如何用 Markdown 写毕业论文
引言
上一回说道,Markdown 可以使用一些高级用法进一步提升文档的质量和可读性,以完成高要求的复杂文本写作如论文等。
那么,为什么我们需要用 Markdown 来写论文呢?
先总结一下毕业论文的特点:
- 文本量大,需要几十页甚至几百页
- 格式要求完全统一,每种段落都有自己的特有格式
- 图表均需要带有序号,并随章节次序动态调整
- 参考文献角标编号随顺序调整
- …
那么,Word 可以为我们带来哪些呢?
- 所见即所得
- 样式模板设置各级标题及正文
- 自动生成目录
- 结合文献管理器自动生成参考文献列表及角标
- 页面设置及输出 PDF
- …
看起来还不错,但是相应存在的问题是「易分心」和「易崩溃」。分段式的写作调整格式将会成为噩梦,一切超出输入时预想的格式修改,都将消耗掉成倍的时间与精力。一旦输入时没有规范好,写完之后掉过头来修改都会让难度指数式上升。而输入和排版同时进行加大了文件的复杂度,在保存耗时增加的同时使程序易于崩溃,而且在崩溃之后往往无法修复,版本控制也因此变得一团糟。
最令人烦躁的是,当你用 Word 和别人协作的时候,Word 本身就足以成为灾难。以参考文献引用为例,如果你不把 Mendeley 或者 Zotero 的文献库页同步给对方,那么自动生成的标记大概率就会面目全非。
另外还有,无法修改的表格框,因图片而全部被挤到下一页的正文,因富文本粘贴而改变的字体、字号,不知所起的自动编号,不知所云的空格添加,莫名其妙的错误提示,一切的一切都是因为 Word 所见即所得的功能。
所谓成也萧何,败也萧何。Word 归根结底是一个文字编辑软件,而不是一个排版软件,无法做到所见及所得模式下输入和排版的结合。因此,就算不提编辑时”顺眼”的问题,单从实用性的角度,至少 Word 不是一个适用于长文本输入的软件。
既然提到排版和论文写作,怎么可以不提一下 LaTeX 呢?LaTeX 作为极专业的排版软件,可以满足一切你对排版的需求,文本和格式完全分离带来了输入时的”沉浸”体验,对科技类期刊投稿只需要换一个模板而不需要编辑内容,同时 overleaf 堪称最强团队协作软件,免去了本地配置的烦恼,做到了 LaTeX 的开箱即用。
那么,为什么不用 LaTex?
- 学习成本高
- 如找不到对应的模板难以自行设计
- 国内期刊很少提供 LaTeX 模板
- latex 的本地环境配置难
- 不能转换成 word
- …
说了这么多,比起 Word 或 LaTex, Markdown 又有什么独特的优势呢?
- 语法简单
- 便于版本控制
- 实时保存,不易崩溃
- 可转换成 Word 对排版进行补全
而最大的优点是:
来,跟我一起念!
计算机永远不会错!
复制粘贴永远不会错!
自动生成永远不会错!
当然,如果真出了错,那肯定只能是我自己的错……
效果展示
今天重点介绍发布于 github 的 nju-thesis-markdown 项目,作者是 centixkadon.
功能特色
- 可排版硕士、学士学位论文(学士论文封面、摘要暂未直接生成);
- 相比 LaTeX 简单多了,兼顾文本文件的版本控制和 Microsoft Word 的编辑功能;
- 导出的 docx 文件用书签和域来引用,插入图、表、公式导致的编号变化可以直接更新;
- 导出的 docx 文件可以给不使用 LaTeX 的导师修改;
- 功能不足的地方可以导出 docx 文件后用 Microsoft Word 补足。
图例
输入文件
源文件
过程
首先使用 git clone
将仓库克隆到本地。
1 | ## sandy @ sandys-Mac-mini in ~ [15:35:29] |
进入目录 nju-thesis-markdown/thesis
并使用命令 pandoc --lua-filter ../src/thesis.lua --citeproc sample.md --reference-doc nju-thesis-reference.docx --output sample.docx
.
Windows 为 /path/to/pandoc.exe --lua-filter ../src/thesis.lua --citeproc sample.md --reference-doc nju-thesis-reference.docx --output sample.docx
, 在 powershell
或 cmd
中输入,其中 /path/to/pandoc.exe
代表 pandoc
的位置。
1 | ## sandy @ sandys-Mac-mini in ~/Downloads [15:35:40] |
结论
总之,Markdown 不一定是最好的模式,但可以给你一个新的选择。
Life is short, you need Markdown.
报错
all choices failed
根据lua crash when checking equality of built-in objects #8267|github, 应该是版本过老,出现了未修复的 bug.