数学公式排版简史
数学公式排版简史:从铅字到 Typst 的演进
数学公式的排版,对于非专业人士来说可能显得复杂而神秘。然而,这背后蕴藏着计算机科学与印刷技术发展的漫长历程。从最初的手工铅字排版,到高德纳的 TeX,再到如今新兴的 Typst,每一次变革都旨在让数学公式的呈现更加高效、美观、便捷。
一、手工排版:匠心独运的时代
在计算机排版出现之前,数学公式的印刷是一项极为繁琐的工作。1970年代以前,热金属印刷是主流。工匠们需要手工制作数学符号的铅字,然后由排字工人精确地调节这些字符的位置和间距,最后用熔化的金属浇铸出印刷母版。这种方式虽然能达到极高的精度(误差可达 0.005 毫米),但效率低下,尤其遇到复杂的数学公式,需要使用大量不同大小的铅字,耗时耗力,甚至能把印刷工人逼疯。
二、照片排版:效率提升,精度下降
1970年代兴起的照片排版极大地提高了排版效率。它不再使用实体铅字,而是将文字符号的光学模板放在底片上感光,再用感光底片制作印刷母版。照片排版每小时可以排上百万字,效率惊人。然而,在公式排版方面,其精细度远不如铅字排版。高德纳在收到他新书《计算机程序设计艺术》第二卷第二版的样本时,就因为采用了照片排版而对其质量深感不满,认为比8年前的第一版丑得多。
三、TeX 的诞生:计算机排版的里程碑
高德纳因不满新书的印刷质量,并受到同行使用计算机排版的启发,于1978年着手开发计算机排版工具。历经一年努力,TeX(通常读作“泰赫”或“泰克”,源自希腊语,意为“技术”)诞生了。
TeX 的排版逻辑在于:
- 识别关键词: 通过反斜杠
\
识别特殊命令,如\frac
表示分数,\pm
表示正负号,\sqrt
表示根号。 - 解析分组: 大括号
{}
将内容分组,如{b^2-4ac}
表示这一组内容都在根号下。 - 解读排版符号: 下划线
_
表示下标,尖号^
表示上标。 - 宏命令: TeX 允许用户通过宏命令
\newcommand
自定义复杂指令,例如将\vect
定义为粗体向量,极大地提高了排版效率和灵活性。宏命令甚至可以实现图灵完备的功能。
TeX 不仅能处理数学公式,还能包揽其他排版工作,如居中标题 (\centerline
)、调整段落间距 (\vskip
) 等。完成排版后,TeX 会输出一个 DVI 文件,记录详细的排版信息,可供后续印刷和打印。
TeX 发布后,高德纳在美国数学学会年会上首次向学术界介绍了他的排版系统和字体设计语言 Metafont。Metafont 允许数学家通过贝塞尔曲线参数设计字体。TeX 迅速成为数学出版的事实标准,美国数学学会甚至开始接受学者使用 TeX 排版的投稿,并提供了宏包模板。
四、LaTeX 的普及与发展:用户友好性的提升
尽管 TeX 功能强大,但其原始版本操作复杂,用户需要精确调节字体、间距、布局等参数。为解决这一问题,计算机大神莱斯利·兰波特为 TeX 开发了一套更用户友好的宏,并命名为 LaTeX。LaTeX 比原始 TeX 更简单易读,极大降低了使用门槛。
随着用户手册的出版和广泛传播,LaTeX 迅速流行起来。开发者们在此基础上不断完善,开发出许多分支版本和宏包,例如:
- XeTeX 和 pdfTeX: 支持中文、日文,并能直接输出 PDF 文件。
- 专业宏包: 针对化学方程式、电路图等专业领域的排版需求。
- Overleaf: 2013年上线的在线协作版 LaTeX,进一步提升了便捷性。
如今,LaTeX 已成为科学出版行业的事实标准,被数学家、物理学家、化学家等广泛使用,各大科学文献出版商也普遍接受 LaTeX 投稿。
五、LaTeX 的局限性与新挑战
尽管 LaTeX 取得了巨大成功,但它也存在一些局限性:
- 学习曲线陡峭: 对于习惯所见即所得编辑工具(如 Word)的用户来说,LaTeX 的代码式排版仍然复杂难懂,每次修改都需要重新编译。
- 与 HTML 不兼容: LaTeX 代码与 HTML 差异巨大,为了在网页上显示公式,开发了 MathML,但其代码冗长。为兼容 LaTeX,又出现了 MathJax 插件,将 LaTeX 转换为 SVG 矢量图。
- 宏包冲突与体积庞大: LaTeX 依靠大量宏包实现功能,但宏包之间的兼容性问题层出不穷,且为了完整功能,需要下载体积庞大的宏包。
六、Typst:未来排版的新探索
面对 LaTeX 的诸多不便,柏林工业大学的劳伦兹和马丁于2019年着手开发更简单的排版工具 Typst,旨在结合 LaTeX 的强大功能和 Markdown 的简洁语法。Typst 于2023年3月21日发布首个版本。
Typst 的主要优势在于:
- 高性能: 使用 Rust 语言开发,采用增量编译机制,只编译修改部分,大幅提升了编译速度,实现即时渲染效果。
- 语法简洁: 在数学公式排版方面,Typst 省略了大量转义符号,代码可读性大大提高,尤其在复杂公式上优势明显。
- 社区活跃: 发布后迅速获得 GitHub 4万星标,并吸引了大量程序员自发宣传,社区不断开发插件和模板,生态初具规模。
- 网页端显示优化: 已有
typst.ts
插件,能以更简洁的方式在浏览器上显示公式。
虽然 Typst 仍面临着用户习惯和出版社接受度的挑战,但它的出现无疑为未来的数学公式排版带来了新的可能性,让复杂的排版工作变得更加简单高效。