用 Pandoc 生成一篇调研论文 | Linux 中国

2018 年 11 月 1 日 Linux中国
学习如何用 Markdown 管理章节引用、图像、表格以及更多。
-- Kiko Fernandez-reyes



致谢
编译自 | 
https://opensource.com/article/18/9/pandoc-research-paper
 
 作者 | Kiko Fernandez-reyes
 译者 | dianbanjiu 🌟🌟共计翻译:9.0 篇 贡献时间:29 天

学习如何用 Markdown 管理章节引用、图像、表格以及更多。

这篇文章对于使用 Markdown[1] 语法做一篇调研论文进行了一个深度体验。覆盖了如何创建和引用章节、图像(用 Markdown 和 LaTeX[2])和参考书目。我们也讨论了一些棘手的案例和为什么使用 LaTex 是一个正确的做法。

调研

调研论文一般包括对章节、图像、表格和参考书目的引用。Pandoc[3] 本身并不能交叉引用这些,但是它能够利用 pandoc-crossref[4] 过滤器来完成自动编号和章节、图像、表格的交叉引用。

让我们从重写原本以 LaTax 撰写的 一个教育调研报告的例子[5] 开始,然后用 Markdown(和一些 LaTax)、Pandoc 和 Pandoc-crossref 重写。

添加并引用章节

要想章节被自动编号,必须使用 Markdown H1 标题编写。子章节使用 H2-H4 子标题编写(通常不需要更多级别了)。例如一个章节的标题是 “Implementation”,写作 # Implementation {#sec: implementation},然后 Pandoc 会把它转化为 3. Implementation(或者转换为相应的章节编号)。Implementation 这个标题使用了 H1 并且声明了一个 {#sec: implementation} 的标签,这是作者用于引用该章节的标签。要想引用一个章节,输入 @符号并跟上对应章节标签,使用方括号括起来即可: [@ sec:implementation]

在这篇论文中[5], 我们发现了下面这个例子:

   
   
     
  1. we lack experience (consistency between TAs, [@sec:implementation]).

Pandoc 转换:

   
   
     
  1. we lack experience (consistency between TAs, Section 4).

章节被自动编号(这在本文最后的 Makefile 当中说明)。要创建无编号的章节,输入章节的标题并在最后添加 {-}。例如:### Designing a game for maintainability {-} 就以标题 “Designing a game for maintainability”,创建了一个无标号的章节。

添加并引用图像

添加并引用一个图像,跟添加并引用一个章节和添加一个 Markdown 图片很相似:

   
   
     
  1. ![Scatterplot matrix](data/scatterplots/RScatterplotMatrix2.png){#fig:scatter-matrix}

上面这一行是告诉 Pandoc,有一个标有 Scatterplot matrix 的图像以及这张图片路径是 data/scatterplots/RScatterplotMatrix2.png{#fig:scatter-matrix}表明了用于引用该图像的名字。

这里是从一篇论文中进行图像引用的例子:

   
   
     
  1. The boxes "Enjoy", "Grade" and "Motivation" ([@fig:scatter-matrix]) ...

Pandoc 产生如下输出:

   
   
     
  1. The boxes "Enjoy", "Grade" and "Motivation" (Fig. 1) ...

添加及引用参考书目

大多数调研报告都把引用放在一个 BibTeX 的数据库文件中。在这个例子中,该文件被命名为 biblio.bib[6],它包含了论文中所有的引用。下面是这个文件的样子:

   
   
     
  1. @inproceedings{wrigstad2017mastery,

  2.    Author =       {Wrigstad, Tobias and Castegren, Elias},

  3.    Booktitle =    {SPLASH-E},

  4.    Title =        {Mastery Learning-Like Teaching with Achievements},

  5.    Year =         2017

  6. }

  7. @inproceedings{review-gamification-framework,

  8.  Author =       {A. Mora and D. Riera and C. Gonzalez and J. Arnedo-Moreno},

  9.  Publisher =    {IEEE},

  10.  Booktitle =    {2015 7th International Conference on Games and Virtual Worlds

  11.                  for Serious Applications (VS-Games)},

  12.  Doi =          {10.1109/VS-GAMES.2015.7295760},

  13.  Keywords =     {formal specification;serious games (computing);design

  14.                  framework;formal design process;game components;game design

  15.                  elements;gamification design frameworks;gamification-based

  16.                  solutions;Bibliographies;Context;Design

  17.                  methodology;Ethics;Games;Proposals},

  18.  Month =        {Sept},

  19.  Pages =        {1-8},

  20.  Title =        {A Literature Review of Gamification Design Frameworks},

  21.  Year =         2015,

  22.  Bdsk-Url-1 =   {http://dx.doi.org/10.1109/VS-GAMES.2015.7295760}

  23. }

  24. ...

第一行的 @inproceedings{wrigstad2017mastery, 表明了出版物 的类型(inproceedings),以及用来指向那篇论文的标签(wrigstad2017mastery)。

引用这篇题为 “Mastery Learning-Like Teaching with Achievements” 的论文, 输入:

   
   
     
  1. the achievement-driven learning methodology [@wrigstad2017mastery]

Pandoc 将会输出:

   
   
     
  1. the achievement- driven learning methodology [30]

这篇论文将会产生像下面这样被标号的参考书目:

引用文章的集合也很容易:只要引用使用分号 ; 分隔开被标记的参考文献就可以了。如果一个引用有两个标签 —— 例如: SEABORN201514 和 gamification-leaderboard-benefits—— 像下面这样把它们放在一起引用:

   
   
     
  1. Thus, the most important benefit is its potential to increase students' motivation

  2. and engagement [@SEABORN201514;@gamification-leaderboard-benefits].

Pandoc 将会产生:

   
   
     
  1. Thus, the most important benefit is its potential to increase students motivation

  2. and engagement [26, 28]

问题案例

一个常见的问题是所需项目与页面不匹配。不匹配的部分会自动移动到它们认为合适的地方,即便这些位置并不是读者期望看到的位置。因此在图像或者表格接近于它们被提及的地方时,我们需要调节一下那些元素放置的位置,使得它们更加易于阅读。为了达到这个效果,我建议使用 figure 这个 LaTeX 环境参数,它可以让用户控制图像的位置。

我们看一个上面提到的图像的例子:

   
   
     
  1. ![Scatterplot matrix](data/scatterplots/RScatterplotMatrix2.png){#fig:scatter-matrix}

然后使用 LaTeX 重写:

   
   
     
  1. \begin{figure}[t]

  2. \includegraphics{data/scatterplots/RScatterplotMatrix2.png}

  3. \caption{\label{fig:matrix}Scatterplot matrix}

  4. \end{figure}

在 LaTeX 中,figure 环境参数中的 [t] 选项表示这张图用该位于该页的最顶部。有关更多选项,参阅 LaTex/Floats, Figures, and Captions[7] 这篇 Wikibooks 的文章。

产生一篇论文

到目前为止,我们讲了如何添加和引用(子)章节、图像和参考书目,现在让我们重温一下如何生成一篇 PDF 格式的论文。要生成 PDF,我们将使用 Pandoc 生成一篇可以被构建成最终 PDF 的 LaTeX 文件。我们还会讨论如何以 LaTeX,使用一套自定义的模板和元信息文件生成一篇调研论文,以及如何将 LaTeX 文档编译为最终的 PDF 格式。

很多会议都提供了一个 .cls 文件或者一套论文应有样式的模板;例如,它们是否应该使用两列的格式以及其它的设计风格。在我们的例子中,会议提供了一个名为 acmart.cls 的文件。

作者通常想要在他们的论文中包含他们所属的机构,然而,这个选项并没有包含在默认的 Pandoc 的 LaTeX 模板(注意,可以通过输入 pandoc -D latex 来查看 Pandoc 模板)当中。要包含这个内容,找一个 Pandoc 默认的 LaTeX 模板,并添加一些新的内容。将这个模板像下面这样复制进一个名为 mytemplate.tex 的文件中:

   
   
     
  1. pandoc -D latex > mytemplate.tex

默认的模板包含以下代码:

   
   
     
  1. $if(author)$

  2. \author{$for(author)$$author$$sep$ \and $endfor$}

  3. $endif$

  4. $if(institute)$

  5. \providecommand{\institute}[1]{}

  6. \institute{$for(institute)$$institute$$sep$ \and $endfor$}

  7. $endif$

因为这个模板应该包含作者的联系方式和电子邮件地址,在其他一些选项之间,我们更新这个模板以添加以下内容(我们还做了一些其他的更改,但是因为文件的长度,就没有包含在此处):

   
   
     
  1. latex

  2. $for(author)$

  3.    $if(author.name)$

  4.        \author{$author.name$}

  5.        $if(author.affiliation)$

  6.            \affiliation{\institution{$author.affiliation$}}

  7.        $endif$

  8.        $if(author.email)$

  9.            \email{$author.email$}

  10.        $endif$

  11.    $else$

  12.        $author$

  13.    $endif$

  14. $endfor$

要让这些更改起作用,我们还应该有下面的文件:

◈  main.md 包含调研论文
◈  biblio.bib 包含参考书目数据库
◈  acmart.cls 我们使用的文档的集合
◈  mytemplate.tex 是我们使用的模板文件(代替默认的)

让我们添加论文的元信息到一个 meta.yaml 文件:

   
   
     
  1. ---

  2. template: 'mytemplate.tex'

  3. documentclass: acmart

  4. classoption: sigconf

  5. title: The impact of opt-in gamification on `\\`{=latex} students' grades in a software design course

  6. author:

  7. - name: Kiko Fernandez-Reyes

  8.   affiliation: Uppsala University

  9.   email: kiko.fernandez@it.uu.se

  10. - name: Dave Clarke

  11.   affiliation: Uppsala University

  12.   email: dave.clarke@it.uu.se

  13. - name: Janina Hornbach

  14.   affiliation: Uppsala University

  15.   email: janina.hornbach@fek.uu.se

  16. bibliography: biblio.bib

  17. abstract: |

  18.   An achievement-driven methodology strives to give students more control over their learning with enough flexibility to engage them in deeper learning. (more stuff continues)

  19. include-before: |

  20.      \` ``{=latex}

  21.      \copyrightyear{2018}

  22.      \acmYear{2018}

  23.      \setcopyright{acmlicensed}

  24.      \acmConference[MODELS '18 Companion]{ACM/IEEE 21th International Conference on Model Driven Engineering Languages and Systems}{October 14--19, 2018}{Copenhagen, Denmark}

  25.      \acmBooktitle{ACM/IEEE 21th International Conference on Model Driven Engineering Languages and Systems (MODELS '18 Companion), October 14--19, 2018, Copenhagen, Denmark}

  26.      \acmPrice{XX.XX}

  27.      \acmDOI{10.1145/3270112.3270118}

  28.      \acmISBN{978-1-4503-5965-8/18/10}

  29.      \begin{CCSXML}

  30.      <ccs2012>

  31.      <concept>

  32.      <concept_id>10010405.10010489</concept_id>

  33.      <concept_desc>Applied computing~Education</concept_desc>

  34.      <concept_significance>500</concept_significance>

  35.      </concept>

  36.      </ccs2012>

  37.      \end{CCSXML}

  38.      \ccsdesc[500]{Applied computing~Education}

  39.      \keywords{gamification, education, software design, UML}

  40.      \` ``

  41. figPrefix:

  42.   - "Fig."

  43.   - "Figs."

  44. secPrefix:

  45.   - "Section"

  46.   - "Sections"

  47. ...

这个元信息文件使用 LaTeX 设置下列参数:

◈  template 指向使用的模板( mytemplate.tex
◈  documentclass 指向使用的 LaTeX 文档集合( acmart
◈  classoption 是在  sigconf 的案例中,指向这个类的选项
◈  title 指定论文的标题
◈  author 是一个包含例如  nameaffiliation 和  email 的地方
◈  bibliography 指向包含参考书目的文件( biblio.bib
◈  abstract 包含论文的摘要
◈  include-before 是这篇论文的具体内容之前应该被包含的信息;在 LaTeX 中被称为  前言 [8]。我在这里包含它去展示如何产生一篇计算机科学的论文,但是你可以选择跳过
◈  figPrefix 指向如何引用文档中的图像,例如:当引用图像的  [@fig:scatter-matrix] 时应该显示什么。例如,当前的  figPrefix 在这个例子  The boxes "Enjoy", "Grade" and "Motivation" ([@fig:scatter-matrix])中,产生了这样的输出: The boxes "Enjoy", "Grade" and "Motivation" (Fig. 3)。如果这里有很多图像,目前的设置表明它应该在图像号码旁边显示  Figs.
◈  secPrefix 指定如何引用文档中其他地方提到的部分(类似之前的图像和概览)

现在已经设置好了元信息,让我们来创建一个 Makefile,它会产生你想要的输出。Makefile 使用 Pandoc 产生 LaTeX 文件,pandoc-crossref 产生交叉引用,pdflatex 构建 LaTeX 为 PDF,bibtex 处理引用。

Makefile 已经展示如下:

   
   
     
  1. all: paper

  2. paper:

  3.         @pandoc -s -F pandoc-crossref --natbib meta.yaml --template=mytemplate.tex -N \

  4.          -f markdown -t latex+raw_tex+tex_math_dollars+citations -o main.tex main.md

  5.         @pdflatex main.tex &> /dev/null

  6.         @bibtex main &> /dev/null

  7.         @pdflatex main.tex &> /dev/null

  8.         @pdflatex main.tex &> /dev/null

  9. clean:

  10.         rm main.aux main.tex main.log main.bbl main.blg main.out

  11. .PHONY: all clean paper

Pandoc 使用下面的标记:

◈  -s 创建一个独立的 LaTeX 文档
◈  -F pandoc-crossref 利用  pandoc-crossref 进行过滤
◈  --natbib 用  natbib (你也可以选择  --biblatex)对参考书目进行渲染
◈  --template 设置使用的模板文件
◈  -N 为章节的标题编号
◈  -f 和  -t 指定从哪个格式转换到哪个格式。 -t 通常包含格式和 Pandoc 使用的扩展。在这个例子中,我们标明的  raw_tex+tex_math_dollars+citations 允许在 Markdown 中使用  raw_tex LaTeX。  tex_math_dollars 让我们能够像在 LaTeX 中一样输入数学符号, citations 让我们可以使用  这个扩展 [9]

要从 LaTeX 产生 PDF,按 来自bibtex[10] 的指导处理参考书目:

   
   
     
  1. @pdflatex main.tex &> /dev/null

  2. @bibtex main &> /dev/null

  3. @pdflatex main.tex &> /dev/null

  4. @pdflatex main.tex &> /dev/null

脚本用 @ 忽略输出,并且重定向标准输出和错误到 /dev/null ,因此我们在使用这些命令的可执行文件时不会看到任何的输出。

最终的结果展示如下。这篇文章的库可以在 GitHub[11] 找到:

结论

在我看来,研究的重点是协作、思想的传播,以及在任何一个恰好存在的领域中改进现有的技术。许多计算机科学家和工程师使用 LaTeX 文档系统来写论文,它对数学提供了完美的支持。来自社会科学的研究人员似乎更喜欢 DOCX 文档。

当身处不同社区的研究人员一同写一篇论文时,他们首先应该讨论一下他们将要使用哪种格式。然而如果包含太多的数学符号,DOCX 对于工程师来说不会是最简便的选择,LaTeX 对于缺乏编程经验的研究人员来说也有一些问题。就像这篇文章中展示的,Markdown 是一门工程师和社会科学家都很轻易能够使用的语言。


via: https://opensource.com/article/18/9/pandoc-research-paper

作者:Kiko Fernandez-Reyes[13] 选题:lujun9972 译者:dianbanjiu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


登录查看更多
0

相关内容

Markdown 是一种轻量级的标记语言,可以用一些简单语法来表达一些富文本内容。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
35+阅读 · 2020年4月5日
【经典书】数据结构与算法C++,第二版,738页pdf
专知会员服务
166+阅读 · 2020年3月27日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
Github项目推荐 | pikepdf - Python的PDF读写库
AI研习社
9+阅读 · 2019年3月29日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Github项目推荐 | RecQ - Python推荐系统框架
AI研习社
8+阅读 · 2019年1月23日
还在PS里手动描边?AI自动抠图只需5秒
机器之心
12+阅读 · 2018年12月19日
用Python调用百度OCR接口实例
数据挖掘入门与实战
16+阅读 · 2018年1月29日
基于对偶学习的跨领域图片描述生成
PaperWeekly
6+阅读 · 2017年11月7日
Adversarial Mutual Information for Text Generation
Arxiv
13+阅读 · 2020年6月30日
A survey on deep hashing for image retrieval
Arxiv
14+阅读 · 2020年6月10日
Directions for Explainable Knowledge-Enabled Systems
Arxiv
26+阅读 · 2020年3月17日
Arxiv
92+阅读 · 2020年2月28日
Recurrent Fusion Network for Image Captioning
Arxiv
3+阅读 · 2018年7月31日
Arxiv
6+阅读 · 2018年3月28日
Arxiv
7+阅读 · 2018年1月31日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
35+阅读 · 2020年4月5日
【经典书】数据结构与算法C++,第二版,738页pdf
专知会员服务
166+阅读 · 2020年3月27日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
相关资讯
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
Github项目推荐 | pikepdf - Python的PDF读写库
AI研习社
9+阅读 · 2019年3月29日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Github项目推荐 | RecQ - Python推荐系统框架
AI研习社
8+阅读 · 2019年1月23日
还在PS里手动描边?AI自动抠图只需5秒
机器之心
12+阅读 · 2018年12月19日
用Python调用百度OCR接口实例
数据挖掘入门与实战
16+阅读 · 2018年1月29日
基于对偶学习的跨领域图片描述生成
PaperWeekly
6+阅读 · 2017年11月7日
相关论文
Top
微信扫码咨询专知VIP会员