如何创建工件坐标系_自动创建研究工件

如何创建工件坐标系

在我作为编程语言研究人员的工作中,我需要创建易于理解和有据可查的工件 。 为了简化工作,我找到了一种简单的方法来自动生成源代码文档,创建用户文档HTML和PDF版本,将技术(研究)文档编译为PDF,生成书目以及通过软件伪像配置虚拟机为便于我的研究重现而安装。

我使用的工具是:

  • 为所有组件的整体编排制作 makefile
  • Haddock用于生成源代码文档
  • Pandoc用于从Markdown文件生成PDF和HTML文件
  • 供应虚拟机的游民
  • 用于下载Haskell依赖项,编译,运行测试等的堆栈
  • pdflaTeX,用于将LaTeX文件编译为PDF格式
  • BibTeX用于生成书目
  • 压缩以打包所有东西并准备分发

我使用以下文件夹和文件结构:


   
   
├── Makefile
├── Vagrantfile
├── code
│   └── typechecker-oopl (Project)
│       ├── Makefile
│       └── ...

├── documentation
│   ├── Makefile
│   ├── README.md
│   ├── assets
│   │   ├── pandoc.css (Customised CSS for Pandoc)
│   │   └── submitted-version.pdf (PDF of your research)
│   └── meta.yaml

├── research
│   ├── Makefile
│   ├── ACM-Reference-Format.bst
│   ├── acmart.cls
│   ├── biblio.bib
│   └── typecheckingMonad.tex

Makefile将上面列出的所有工具的输出粘合在一起。 代码文件夹包含我创建的工具/语言的源代码。 文档文件夹包含一个Makefile,该文件位于README.md文件中,其中包含有关如何生成用户说明的PDF和HTML版本的说明。 我使用Pandoc生成PDF和HTML用户文档。 这些资源只是要使用CSS样式,而是我的研究论文的PDF,它将从用户生成的文档中超链接,因此很容易遵循。 meta.yaml包含用于生成用户文档的元指令,该文档由Pandoc用于例如作者姓名。 研究文件夹包含LaTeX格式的我的研究文章,但可以包含任何其他技术文件。

如您在结构中看到的,我为每个文件夹都有一个Makefile ,以分离每个Makefile的职责并保持(某种程度上)可维护的设计。 这里是顶级Makefile的概述,该文件协调生成用户文档,研究论文,参考书目,源代码文档以及虚拟机配置。


   
   
all: doc gen

doc:
        make -C $(DOC_SRC) $@
        make -C $(CODE_PATH) $@
        make -C $(RESEARCH)

gen:
        # Creation of folder with artefact, empty at the moment
        mkdir -p $(ARTEFACT_FOLDER)

        # Moving user documentation to artefact folder
        cp $(DOC_SRC)/$(README).pdf $(ARTEFACT_FOLDER)
        cp $(DOC_SRC)/$(README).html $(ARTEFACT_FOLDER)
        cp -r $(DOC_SRC)/$(ASSETS) $(ARTEFACT_FOLDER)

        # Moving research article to artefact folder
        cp $(RESEARCH)/$(RESEARCH_PAPER).pdf $(ARTEFACT_FOLDER)/$(ASSETS)/submitted-version.pdf

        # Moving code and autogenerated doc to artefact folder
        cp -r $(CODE_PATH) $(ARTEFACT_FOLDER)
        cd $(ARTEFACT_FOLDER)/$(CODE_SRC)
        $(STACK)
        cd ../..
        rm -rf $(ARTEFACT_FOLDER)/$(DOC_SRC)
        mv $(ARTEFACT_FOLDER)/$(CODE_SRC)/$(HADDOCK) $(ARTEFACT_FOLDER)/$(DOC_SRC)

        # zip it!
        zip $(ZIP_FILE) $(ARTEFACT_FOLDER)

update:
        vagrant up
        vagrant provision

clean:
        rm -rf $(ARTEFACT_FOLDER)

.PHONY: all clean doc gen update

首先, doc目标使用Pandoc生成用户文档,然后使用Haddock从Haskell库源代码生成文档,最后,从LaTeX文件创建PDF。 如下图所示,生成的用户文档使用HTML和CSS。 用户文档包含指向生成的源代码文档(也包括HTML和CSS)以及技术(研究)论文的链接。 生成的源代码文档直接链接到源代码,以防读者想了解其实现。

Artifact automation structure

用户文档是使用以下Makefile生成的:


   
   
DOCS=README.md
META=meta.yaml
NUMBER_SECTION_HEADINGS=-N

.PHONY: all doc clean

all: doc

doc: $(DOC)
        pandoc -s $(META) $(DOCS) --listings --pdf-engine=xelatex -c assets/pandoc.css -o $(DOCS:md=pdf)
        pandoc -s $(META) $(DOCS) --self-contained -c assets/pandoc.css -o $(DOCS:md=html)

clean:
        rm $(DOCS:md=pdf) $(DOCS:md=html)

为了从Haskell代码生成文档,我使用了另一个Makefile,该Makefile利用Stack来编译库并下载依赖项,并使用Haddock(在其OPTS或选项内部)在HMTL中创建文档:


   
   
OPTS=exec -- haddock --html --hyperlinked-source --odir=docs

doc:
        stack $(OPTS) src/Initial/AST.hs src/Initial/Typechecker.hs \
        src/Reader/AST.hs src/Reader/Typechecker.hs \
        src/Backtrace/AST.hs src/Backtrace/Typechecker.hs \
        src/Warning/AST.hs src/Warning/Typechecker.hs \
        src/MultiError/AST.hs src/MultiError/Typechecker.hs \
        src/PhantomFunctors/AST.hs src/PhantomFunctors/Typechecker.hs \
        src/PhantomPhases/AST.hs src/PhantomPhases/Typechecker.hs \
        src/Applicative/AST.hs src/Applicative/Typechecker.hs \
        src/Final/AST.hs src/Final/Typechecker.hs

.PHONY: doc

我使用以下简单的Makefile将研究论文从LaTeX编译为PDF:


   
   
.PHONY: research

research:
        pdflatex typecheckingMonad.tex
        bibtex typecheckingMonad
        pdflatex typecheckingMonad.tex
        pdflatex typecheckingMonad.tex

虚拟机(VM)依赖于Vagrant和Vagrantfile,我可以在其中编写所有命令来设置VM。 我不知道如何自动化的一件事是将所有文档(一旦生成)都移到了VM中。 如果您知道如何将文件从主机传输到VM,请在注释中分享您的解决方案。 这意味着,当前,我手动输入VM并将文档放置在Desktop文件夹中。


   
   
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.ssh.username = "vagrant"
  config.ssh.password = "vagrant"
  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true

    # Customize the amount of memory on the VM:
    vb.memory = "2048"
    vb.customize ["modifyvm", :id, "--vram", "64"]
  end
  config.vm.provision "shell", inline: <<-SHELL
    ## Installing dependencies, comment after this has been done once.
    # sudo apt-get update -y
    # sudo apt-get install ubuntu-desktop -y
    # sudo apt-get install -y build-essential linux-headers-server

    # echo 'PATH="/home/vagrant/.local/bin:$PATH"' >> /home/vagrant/.profile

    ## Comment and remove the folder sharing before submission
    mkdir -p /home/vagrant/Desktop/TypeChecker
    cp -r /vagrant/artefact-submission/* /home/vagrant/Desktop/TypeChecker/
    chown -R vagrant:vagrant /home/vagrant/Desktop/TypeChecker/
  SHELL
end

在最后一步中,一切都已完成。 您可以在HTMLPDF中看到结果的一个示例。 我已经创建了一个GitHub存储库,其中包含所有源代码 ,以便于学习和重现性。

我在两次会议上都使用了这种设置,这两次会议是欧洲面向对象编程会议(ECOOP)和国际软件语言工程会议(SLE),我们在这两次会议中均获得了Disguinshed Artifact Award。

翻译自: https://opensource.com/article/20/1/automating-documentation

如何创建工件坐标系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值