科技文献排版工具概览

实验室的硕士生似乎有大量的闲情逸致看电影、玩游戏或者充当有可能会演变为 Matrix 触手的智能手机的人肉电池,他们这么年青就已经老到了退休的年龄……这么多的闲情逸致,学习一下论文排版工具也不枉读研一场吧。折腾 TeX 家族的成员,这本身就是一个非常好玩且耐玩的游戏。

6 年以前,我在 galeki 创建的 i11r.com 网站上写过一篇 TeX 简史性质的文章——“序幕有些长”。现在 galeki 貌似失踪了,可能他也觉得我失踪了,于是我们长达 10 年的网络交情此后就变成缅怀了。

TeX 诞生的时代,计算机编程语言的世界里,宏语言是很流行的。现在还被大量使用的宏语言,有 TeX、MetaPost、M4(主要用于 GNU Autotools)、C 语言中的宏、Lisp 语言中的宏等,其中要数 Lisp 宏最为强大。宏语言,有点类似人类语言中的古代文言,现在看来它们虽然灵活多变但是又非常容易令人费解,类似于《老子》区区五千字所讲的东西,就够现代人写几十万字去诠释了,但是我相信老子那个年代的有文化的人应该不难理解《老子》都讲了些什么的。

也许TeX 的最好玩的地方就在于我们在理解它的过程中,不知不觉就穿越了三十多年的历史,与那个年代最聪明的集计算机科学家、计算机艺术家、计算机黑客以及排版专家等角色于一身的家伙交谈,然后你就会知道为什么 TeX 能穿越这数十年的时光青春仍在并且生机却更加焕然了。不仅 TeX 引擎变得更加现代,而且 TeX 也进入了网络时代。现代专门讨论科技内容的网络站点,如果不支持 MathJax,那么简直对科技是一种“侮辱”……我试试这里是否支持数学公式:

$$v=v_0+\int_0^tid\,t+Ri$$

要理解 TeX,应该回到它的源头,去读读 Knuth 写的《The TeXbook》,知乎上有一篇关于这本书的导读,能看英文的就看英文版,没耐心看英文的自己去找 xianxian 精心翻译制作的《特可爱原本》。

在你准备阅读《The TeXbook》之前,我想说,虽然理解 TeX 是非常有趣的事,但是现在大家用的以 TeX 为基础的高层建筑——LaTeX 或 ConTeXt。它们隐藏了 TeX 许多繁琐的细节,而且各自都有相应的入门文档,即使你对 TeX 一无所知,也是可以直接学习 LaTeX 或 ConTeXt 的。LaTeX 的文献非常丰富,这可能与许多期刊是用 LaTeX 排版论文有关。LaTeX 的入门书,我推荐 CTeX 论坛 的 milksea 于 2013 出版的《LaTeX入门》。至于 ConTeXt,由于其最新版本 MkIV 还在开发中,官方的文档尚不齐备,中文的文档主要是几年前我写的那几篇。这两年没怎么关注 ConTeXt MkIV 的动态,前段时间大致看了一下,有一些新的变化,我打算在修订之前我写的文档的时候予以说明。

在我看来编辑 TeX 文本的最好的工具是 GNU Emacs。可能 Vim 也不错,但我已经习惯了 Emacs 的各种强大与它的扩展语言。Emacs 配合 AucTeX 扩展能够显著提升 TeX 文本编辑效率。然而我必须诚恳的说,我一直是徒手编辑 TeX 文本的,因为我的思考速度没有我的文本输入速度快。我没必要为了提升那点不必要的文本输入速度而动用 AucTeX,除非是手指痛或者我的职业是 TeX 排版工作者。

无论是 TeX 还是它的上层建筑,它们的主要任务是处理文字、公式、表格等内容,而科技文献的插图制作也是非常重要的方面。好的论文,它的插图往往也是非常精美的。能够与 TeX 友好相处的矢量图绘制工具有 inkscape、gnuplot、metapost、pgf/tikz、asymptote 等,而位图的处理可以用 imagemagick 与 gimp。

位图软件就不多说了,只说说矢量图软件。我推荐的是 inkscape 与 asymptote,前者可用于交互制作不精确的二维示意图,后者可精确生成二维与三维矢量图形(三维的也可以是位图),二者配合使用,应该能够解决科技文献的大部分绘图问题。gnuplot 可能与 asymptote 的功能有些重叠,但是 gnuplot 的简单与稳定或许能弥补 asymptote 的一些不足,所以也作为重点推荐。

参考文献,几乎是所有科技文献不可或缺的组成部分。参考文献的引用与排版,TeX 家族有个 BibTeX 工具,它能够为 LaTeX 与 ConTeXt 生成参考文献信息,而后者将文献信息转化为版面元素。BibTeX 的输入文件是一种被称为『BibTeX』的文本格式,其中记录了每份文献的检索信息,google scholar 与许多文献检索网站均能生成这种文本格式供 BibTeX 使用。另外,也有一些本地工具能够管理文献并导出 BibTeX 格式的文本,例如 firefox 的 Zotero 扩展,我只推荐这款工具,因为它能够跨平台使用。即使你不喜欢 firefox,也是可以使用 Zotero 的,因为它提供了可脱离 firefox 独立运行的版本。

最后我要指出一点,上述许多工具最佳的运行环境是终端,亦即命令行窗口。因为这样你就有机会动用 Shell 脚本或一些便于使用的编程语言将排版过程中的一些琐事进行自动化处理。也可以为了让一些工具便于使用而进行扩展,例如利用 inkscape 的 WriteTeX 扩展可以在 inkscape 中插入 TeX 公式,这对于一些示意图的文字标注非常有用。也就是说,最好能够熟悉你所用的 Shell 的脚本,再熟悉一种擅长做文本解析之类事务的编程语言,我推荐 python、lua 或 scheme。重点推荐 scheme,因为它的精巧以及教程非常强大,更重要的是 Emacs 的扩展语言几乎就是它。如果熟悉 Emacs 的扩展语言——Emacs Lisp,那么仅仅在 Emacs 中就可以实现更为自动的自动化!

以上这些就是我所认为的科技文献排版领域常用的工具,它们几乎都是跨平台的。也许 Windows 居民很少听说过它们,可能是因为 TeX 家族及其朋友能做到的事, 他们用 MS Word 几乎都能不够精确的做到,而且他们畏惧命令行,畏惧编程,畏惧一切能够让自己更好的控制计算机的东西,所以他们宁愿把时间交给网络上那些根本不值一提的各种娱乐新闻或视频,也不愿意去当一名黑客。所以,Matrix 就是这样统治了人类的。

阅读 4.3k

推荐阅读
while(1) { }
用户专栏

NULL

241 人关注
125 篇文章
专栏主页