用markdown 和 pandoc 写论文的语法小抄

用markdown 和 pandoc 写论文的语法小抄


有更新!!最近写论文又发现一些可以改进的地方~~


本文主要写的是用markdown+pandoc写论文踩过n多坑之后,自己总结的语法小抄

包括「引用文献」、「引用图」、「引用表格」、「开盖即用的命令行」以及「踩过的坑」

如何用 Markdown 写论文?的基础上补充自己实践应用中需要的语法

至于要怎么安装pandoc、编辑器什么的,还是看上面那篇文章吧~~

如果有哪个小伙伴知道怎么设置模版docx文档的格式,烦请告知~~


1. 引用文献

  • .md文件:在你要引用的地方加上 [@文章别名],和.bib文件中要对应一直
  • .bib文件:
@article{文章别名,
  title={文章名},
  author={},
  journal={},
  number={},
  pages={},
  year={},
}
  • pandoc 命令行参数:
    • --filter pandoc-citeproc: pandoc用于引文的filter,需单独用pip下载安装
    • --bibliography=ref.bib:告诉pandoc你的.bib文件叫啥,和.md放同一个目录
    • --metadata link-citations=true: 设置之后,生成的docx文档中才有交叉引用,否则引用的索引只是一个上标而已,不能够点击索引跳转到参考文献列表中对应位置。
    • --metadata reference-section-title="参考文献": 将生成的docx文档中的引文列表标题设为“参考文献”
    • --csl=chinese-gb7714-2005-numeric.csl: 告诉pandoc你的citation style languages是啥,需自行下载,放在.md同一个目录下

2. 引用图

  • .md文件中:
如{@fig:你自己随便设个名字} 所示

![显示在docx文档中的图例名称](图的实际地址/图的实际名称.png){#fig:你自己随便设个名字}
更新:
场景:如果插入的图是引用别人文章里的图怎么办?同样需要在图例中对该文章进行引用。
方法:直接将「设置引用的语法」添加到「设置图例名称的语法」里
示例:
将「引用的语法」(红色)嵌套进「图例的语法」(黄色)即可。
效果:见下图
红框表示引用成功~


  • 但是,需要在.md文件最开始的地方加上以下5行,用于显示符合中国人阅读习惯的图例。否则,默认的是“Figure”。
---
fignos-cleveref: True
fignos-plus-name: 图
fignos-caption-name: 图
...
更新:
1. 后来发现文章中图表的编号不连续,开始新的章节就会从1开始给图表重新编号。后来查阅文档发现可以通过 fignos-number-by-section 属性来进行设置,将其放入以上这个代码块中,置为 True 即可按章节对图表进行编号。后面表格的引用也采用类似的设置。
2. 有的图片引入文中并不那么美观,自己手动在word里面调整大小又太麻烦。可以通过 {#fig:pic1 width=200px height=200px} 来进行设置。不过,我自己试过用百分比的形式来设置 width ,似乎不可行,用像素就亲测有效~~
  • pandoc 命令行参数:
    • --filter pandoc-fignos: pandoc用于引用图的filter,需单独用pip下载安装。这个参数需要放在--filter pandoc-citeproc之前

3. 引用表格

  • .md文件中:
如表格{@tbl:id}所示

| a | b |
| c | d |
Table: tablename. {#tbl:id}
  • 但是,需要在.md文件最开始的地方加上以下4行,同理于pandoc-fignos的设置。
---
tablenos-cleveref: True
tablenos-caption-name: 表
...
  • pandoc 命令行参数:
    • --filter pandoc-tablenos: pandoc用于引用表格的filter,需单独用pip下载安装。这个参数需要放在--filter pandoc-citeproc之前

4. 开盖即用

所以你的论文里有引文、有图、有表格,那么下面这条命令行可以改成你的文件名直接用,当然,前提是你的配置都是正确的。

pandoc --filter pandoc-fignos --filter pandoc-tablenos --filter pandoc-citeproc --bibliography=ref.bib --metadata link-citations=true --metadata reference-section-title="参考文献" --csl=chinese-gb7714-2005-numeric.csl paper.md -o paper.docx

更新:
1. 如果你想生成的doc文档里面自带目录的话,可以在命令行中添加 --toc ,即可生成目录。
2. 如果你不想每次都要修改生成文档的样式,可以另外设置一个「参考文档模版」,在转换命令行中添加参数 --reference-doc democonf.docx, 即目标文档的样式参考模版文档 democonf.docx 的样式。如果有毕业论文的模版文档就可一键生成样式符合要求的毕业论文啦~当然,你也可以自己做一个模版文档

5. 其他坑

  1. 如果报错信息为:pandoc-fignos: Bad reference: @fig:timeline.,哎,说明你的.md文档中图的信息写在一起了,要隔行才行。
1 错误示范:
2
3 ![时间线图示例](fig/timeline.png){#fig:timeline}
4 ![引用关系时间线图示例](fig/引用关系时间线图.png){#fig:引用关系时间线图}
1 正确示范:
2
3 ![时间线图示例](fig/timeline.png){#fig:timeline}
4
5 ![引用关系时间线图示例](fig/引用关系时间线图.png){#fig:引用关系时间线图}

编辑于 2020-04-01 12:11