用 Markdown 写毕业论文
· 11 min read
最近因为要写博士毕业论文了,由于研究生院也没有非常严格限制毕业论文的格式。于是想着有没有一种便携的方式来撰写毕业论文。
为什么不用 Microsoft word ?
- word 排版没有 LaTeX 的漂亮。
- word 内置的公式功能对于公式排版及其编号、引用不够方便。要解决这个问题,得借助 mathtype 等第三方工具。(题外话:最新版的 office 365 可以通过 LaTeX 插入一些简单公式)。
- 图片、表格、章节的交叉引用操作不方便,感觉每引用一次都得点好多下。
- 大型文档使用体验差。主要是几百页的好几万的文档,保存速度慢,甚至会崩。特别是审阅模式下,编辑时可能会有卡顿的情况。
- 文献引用不方便。word 内置的交叉引用感觉基本不好用,和文献管理器(如 endnote、zotero)没打通。 不过,似乎这个额问题可以通过文件管理器解决。例如,我用的是 zotero,它有个word 插件,可以进行参考文件的插入和最后的汇总。
为什么不直接用 LaTeX ?
因为导师看毕业论文需要用 word 格式(无奈)。 LaTeX 偶尔也还是需要调整格式问题(如图片大小和子图;表格的排版相对 markdown 要麻烦一些。当然 markdown 不支持复杂的表格形式。)。
所以,得有一种方法,可以解决上述的 word 的缺点,还能导出为满足毕业论文 word 模版格式的 word 文件。 大概考虑了几种可能的方案:
- LaTeX 编译为 pdf,然后 pdf 转为 word:这个 pdf -> word 不太可靠,以前试过 adobe 家的 Acrobat,感觉转换的 word 会有各种错乱的问题。
- LaTeX 直接转 word:看起来这个方案似乎还行,例如用 pandoc 来转? 不过,LaTeX 里面用到的各种宏包、参考文献引用不确定是否可以正常转化。这个没正经尝试,感觉会有很多坑。
- 用一种中间格式,可以转成 LaTeX,也可以转成word:对这个中间格式最基本的要求是支持图表的交叉引用、参考文献引用。一开始我想到的是 AsciiDoc,因为其已经内置了交叉引用了。但是其生态似乎没有 markdown 那么好,不确定是否会有坑,感兴趣的可以尝试下。另外,通过查阅资料,发现似乎可以用 markdown 来写论文。
Markdown 的解决方案
这个主要是参考了 colordi 的相关博客。 这里主要解决 Markdown 如何进行交叉引用和文献引用的问题,markdown 到 word、LaTeX、pdf 的转化可以通过瑞士军刀 pandoc 进行。
Tools
工欲善其事,必先利其器。我们先安装一些必要的工具。
- pandoc and pandoc-crossref
- LaTeX: e.g. TeX Live, BasicTeX
- Python 3
- pandoc-minted and Pygments
图片、表格等的交叉引用
pandoc 下针对 markdown 的交叉引用是通过 pandoc-crossref 来达到效果的。
它支持图片、表格、代码、公式、章节的引用。
可以在 markdown 中这么写:
![cell_list](./cell-list.pdf){#fig:cell_list}
ls1-mardyn 等软件则采用 cell-list 数据结构 ,如 [@fig:cell_list] 所示。
发现这种写法和 LaTeX 有点像,在图片部分,给一个 label 名称,在引用的地方用 "@" 进行引用。
此外,作为额外补充,大括号内还支持写图片的其他属性,例如 {width=100px}
,这是 pandoc 所支持的。
需要注意的是,不同类别的内容,有不同的前缀,例如图片就是 fig
,具体如下:
label | ref | example | |
---|---|---|---|
图片 | #fig:label | @fig:label | ![a](image1.png){#fig:label} |
公式 | #eq:label | @eq:label | $$ math $$ {#eq:label} |
表格 | #tbl:label | @tbl:label | : Caption {#tbl:label} (见这里) |
章节 | #sec:section | @sec:section | Section {#sec:section} |
其他的各种细节问题,可以参加 pandoc-crossref 文档,例如如何排版子图(类似于 LaTeX 的 subfigure)、引用代码。