LaTeX 是如何诞生的?它又是如何引发了学术排版的变革?
新闻链接:https://www.linkresearcher.com/information/1e5cf087-2029-4816-ae58-6cee83d222ca?from=groupmessage

世界上的许多人类都受到过 LaTeX 的恩泽,经它排版的论文,就算有再复杂的公式,格式也不会乱掉。但人们可能并不了解,LaTeX 有个祖先叫 TeX,出生在1977年,并且在一个没有互联网的年代就红遍了全球。
那么,身为世界上最早开源项目之一的 TeX,究竟是如何诞生,又如以进化形态 LaTeX 活跃了几十年不败?
故事开始于一本叫做《计算机编程艺术》 (The Art of Computer Programming) 的书,作者是斯坦福计算机系教授Donald Knuth,中文名字“高德纳”。后来也是因为这本书,他获得了图灵奖。

1968年,《计算机编程艺术》初版问世。在这之前,高德纳给了出版商 Addison-Wesley
几千页手写书稿。出版商用的是传统金属排版设备,需要专业人员手动操作。那时候电脑上还没有图形界面,书里面有各种编程示例,高德纳就一点一点向排版人描述他到底想要怎样的效果。成书的时候,高德纳感到很满意。
转折发生在1976年,《计算机编程艺术》准备再版,扩充了一些内容。这一次,出版商改用了便宜的电子排版方法,小样完全达不到高德纳要求。虽然高德纳知,高分辨率的数字排版机可以生成精确的形状,但从前那些专业的排版人员已经找不到了。

他想到,如果让计算机软件来代替专业人士呢?于是在1977年,高德纳用了一个夏天加一整年的学术休假执行了他的“数字排版计划”,他和学生一起写出了一个排版程序,名叫
TeX。转年,《计算机编程艺术》的修订版就用 TeX 排版完成了。那时的高德纳可能不知道,TeX 会引发学术排版的巨大变革。
有了TeX,即便论文作者没有排版的专业知识,也可以把自己想要的效果直接告诉电脑:只要在手稿里加入一些简单的 markup 代码:

这就是 TeX 输出的样子,结果就像60年代的高德纳教授和排版人员密切沟通出来的那样。而且,和电脑沟通,还避免了人与人之间的误解。
其实在文本中加 markup 倒不算新鲜事。TeX
的新鲜之处在于,它可以捕捉到非常实用的排版知识和概念,并且把它们形成体系,表现出来:高德纳定义了几百个排版命令,而用来理解这些命令的排版机就是
TeX 引擎,它可以读取作者的手稿,生成一个文件——直接能拿去打印的那种。
高德纳也知道,不管 TeX 能理解多少命令,都不可能满足手稿作者的所有需求。所以他又写了一个可扩展的
TeX,让用户随意添加自己想要的功能:只要给它一些新的宏(Macro)),就能定义新的命令。每个人都可以自己创建宏文件,这样不用修改 TeX
引擎,就能扩展 TeX 的功能。1984年,他还出版了The TeXbook,这本书详细讲述 TeX
了所有原始命令的含义,以及普通宏命令(Plain Macro Commands),还有引擎内部的工作原理。

这本书的出现,就是为了鼓励开发者去写自己的宏。在高德纳的坚持之下,TeX 引擎的源代码已经免费了40年,每个人都可以修改。不过他也规定,一切不兼容的修改版都不能叫做 TeX;他还发布了一组自动测试,修改版引擎必须通过测试,才能用 TeX 这个名字。
在那个没有互联网的年代,生在斯坦福的 TeX 走向了世界。它被移植到各种计算机系统、各种语言、各种打印设备上,为越来越多的人类排版。
1982年和1989年,高德纳又修改了 TeX 两次。1992年,教授从项目里功成身退,接着写《计算机编程艺术》。这本促成了 TeX 诞生的书,内容一直在不断扩充。虽然高德纳不再更新项目了,但还有其他人在继续他的工作。
TeX 的命令集,都是偏低层 (Low-Level) 的,适合高德纳教授这样,希望从细节上把握排版效果的人类。但这几百个命令,对于大多数人来说可能还是太多了。
“能让计算机来做的决定,就不要问我。”用户常常希望自己手写的排版命令越少越好,他们需要的是高层命令,是更加方便使用的 markup
语言,最好是可以把内容 (Content))和表现形式 (Presentation))分开的那种工具。于是,1980年诞生了
Scribe,这是卡耐基梅隆大学 (CMU) Brian Reid的博士论文项目。

在80年代早期,Scribe 受到了许多学术作者的追捧。不过它并不免费,这一点阻碍了传播。Scribe 有位忠实用户,来自斯坦福的兰波特(
Leslie Lamport),当时已是著名的计算机科学家。他在尝到便利的滋味之后,想要把 Scribe 的易用性转移到 Tex
身上,并最终发明了LaTeX。
1984年,兰波特自己创建了一个宏,叫做“lplain”,“l”是他姓氏的首字母。这里面的一系列命令,比TeX的原始命令易用得多得多。兰波特把新的宏放出来给大家免费使用:只要运行一个LaTeX程序,让TeX引擎先读取这个宏。兰波特还写了一本书,叫
LaTex:a Document Preparation System,教学术作者怎样用他写的命令来给文章排版。

当然,就算有了LaTeX,用户依然可以用TeX的底层命令,来实现复杂的需求。
这下,TeX 用户数量大大大大大爆发。许多人用了很久的 LaTeX 命令,甚至不知道有 TeX 这个名字。整个学术排版行业也因为
LaTeX
的诞生,受到了深远的影响:在这个领域,精确排版至关重要,从前只有手动排版才能满足需求;但现代世界里,论文、期刊、书籍和其他出版物大量产出,远远超过了手动排版能达到的吞吐量。

LaTex 在实现自动化的同时,又不会损失排版质量。现在,许多学术出版机构,都接受用LaTeX排版的稿件。除此之外,连ArXiv这片机器学习论文的沃土,也是在LaTex的滋养下,才有更加蓬勃的生命力。
