怎样更优雅地使用LaTeX撰写文章?分享一些设计模式与建议



怎样更优雅地使用LaTeX撰写文章?分享一些设计模式与建议

文章插图


LaTeX 是一种基于 TeX 的排版系统,已经成为大多数科技领域(STEM)专业排版的标准 。事实上,很多数学、物理和计算机科学相关的期刊和出版社,仅仅接收 LaTeX 排版文章 。
和所见即所得( What You See Is What You Get:WYSIWYG)的 word 排版系统不同,LaTeX 需要编写代码,然后编译生成 PDF 文件 。虽然学起来有一定的难度,但一旦掌握了 LaTeX,文章排版将会更加高效和灵活 。


怎样更优雅地使用LaTeX撰写文章?分享一些设计模式与建议

文章插图


TeX 开发者高德纳(上右),LaTeX 开发者莱斯利·兰伯特(上左)
关于 LaTeX 的介绍,网上已经有很多,但是我发现即便对于已经熟练掌握了 LaTeX 的写作者来说,也会忽略掉一些 LaTeX 的强大的功能 。
本文主要聊聊一些能使得 LaTeX 排版更加有效和简洁的设计模式,以此有效避免错误的产生 。这些模式只是建议,不一定要非得严格遵守 。有时候在一个论文模板中合适的模式在另外一个模板中可能不合适,比如在博士论文模板中定义的某些符号的宏在另外的论文模板(如论文摘要)中可能行不通 。我的这些建议都源于我在机器学习和计算机科学的论文准备过程中所积累起来的经验 。具体应用场景,请遵循你所在学科的排版规范 。
1. 从软件工程角度来看 LaTeXLaTeX 在日臻完善,有很多方便作者的自定义功能,因此可以把排版 LaTeX 文稿和软件工程相类比 。这个类比不是非常完美:一个软件往往需要数十年的维护,但是我们的论文很快就可以发表了 。但是无论如何,两者在设计模式上是类似的 。
不要重复造轮子: 为一些重复出现的模块,比如数学符号等操作,定义宏 。你可能在刚开始写论文的时候,用 代表概率 。但是有一天你希望让概率的符号更加清晰,就用查找和替换的方式把 换掉 。这在实际操作中会产生很多错误,从而导致符号表示上的不一致 。事实上我们如果在头文件中定义 \newcommand{\probability}{P},就可以很容易做到在正文中对 的替换 。我们要时刻保持符号的一致,并按照自己的意愿随时更换符号 。
另外可能会重复代码还有这样的场景,我们有时候会在正文陈述定理内容,但是其证明放在附录中,优雅的做法是应用上面方法来调用正文中的定理 。同样,如果你有在图题中重复的模板(例如,相同的图例),考虑定义一个宏来整合它 。
关注编译过程中的错误和警告: LaTeX 编译器会对各种常见的问题发出警告,如引用未定义的参考文献等等 。我建议趁热打铁,立即修复这些警告 。检查这些问题,如果确实如此,尽快移除该引用 。
编译中出现的错误应立即更正,文档前面的错误会导致剩余部分不能正常编译,从而产生错误的或者不可预知的编译结果 。所以错误一旦出现就要立即修正,避免后续反复调试,从而可以专心撰写论文 。
不过一些优秀的编译器,比如基于云的协作式 LaTeX 编辑器,会执行模糊编译,这样即便有错误还是可以完成编译 。
自动检查: 执行自动检查可以发现一些常见错误 。此处不必局限于代码,可以利用一些外部的开发工具进行自动检查 。比如拼写检查,Matt Might 就写了一些 shell 脚本用来检查语态(被动语态)和一些模棱两可的词汇用法方面的问题 。
掌握好至少一种 IDE: 掌握好一款适用于自己的 LaTeX 集成开发环境 。由于可以实时同步和注释,Overleaf 非常适合协同编辑,我很喜欢用它 。但是它缺少某些功能,并且比本地编译器要慢一些,因此我一般会在 IntelliJ 中安装 IDEA 插件 。当然还有很多其他优秀的 IDE,我们需要做的是选择至少一个适合自己的并掌握 。


怎样更优雅地使用LaTeX撰写文章?分享一些设计模式与建议

文章插图


▲ Overleaf是基于云的协作式 LaTeX 编辑器
代码管理: 毫无疑问,我们一般应用诸如 Git 的版本控制系统来管理代码,并适时推送更新 。如果你的文件损坏或者被删除,你就会意识到代码管理的重要性 。因为可以轻松恢复到早期的版本,我可以对论文进行大量的编辑 。当同时需要一个论文的多个版本时,比如需要研讨会和学术会议两个版本,我们可以分别编辑多个部分,然后根据自己需要进行合并 。这里还有提下 Overleaf,你会对它内置的版本控制系统比较满意 。
2. 聚焦数学公式LaTeX 有非常卓越的数学公式排版功能,因此在数学及其相关学科中应用非常广泛 。