LaTeX的历史:图灵奖得主1977年开启的计划,引发学术圈重大变革
LaTeX的前世今生
栗子 编译整理
量子位 出品 | 公众号 QbitAI
世界上的许多人类,都受到过LaTeX的恩泽。
经它排版的论文,就算有再复杂的公式,格式也不会乱掉。
但人们可能并不了解,LaTeX有个祖先叫TeX,出生在1977年。
并且在一个没有互联网的年代,就红遍了全球。
那么,身为世界上最早开源项目之一的TeX,究竟是如何诞生?又如以进化形态LaTeX,活跃了几十年不败?
专业排版师,找不到了
故事,开始于一本叫做《计算机编程艺术》 (The Art of Computer Programming) 的书。
作者是斯坦福计算机系教授Donald Knuth,中文名字“高德纳”。后来也是因为这本书,他获得了图灵奖。
1968年,初版问世。在这之前,他给了出版商Addison-Wesley几千页手写书稿,出版商用的是传统金属排版设备,需要专业人员手动操作。
那时候,电脑上还没有图形界面。
书里面有各种编程示例,高德纳就一点一点向排版人描述,他到底想要怎样的效果。成书的时候,他很满意。
转折发生在1976年,这本书准备再版,扩充了一些内容。这一次,出版商改用了便宜的电子排版方法,小样完全达不到高德纳要求。
虽然高德纳知道,高分辨率的数字排版机可以生成精确的形状,但从前那些专业的排版人员已经找不到了。
他想着,如果让计算机软件来代替专业人士呢?
于是,1977年高德纳用了一个夏天,再加一整年的学术休假,执行他的数字排版计划:和学生一起写出了排版程序,名叫TeX。
转年,《计算机编程艺术》的修订版,就用TeX排版完成了。
那时的高德纳可能不知道,TeX会引发学术排版的巨大变革。
原来你是这样的TeX
有了TeX,即便论文作者没有排版的专业知识,也可以把自己想要的效果,直接告诉电脑。
只要在手稿里加入一些简单的markup代码:
叮当法术变变变:
这就是TeX输出的样子。
就像60年代的高德纳教授,可以和排版人员密切沟通那样。而且,和电脑沟通还避免了人与人之间的误解。
其实在文本中加markup,倒不算新鲜事。但TeX的新鲜之处在于,它可以捕捉到非常实用的排版知识和概念,并且把它们形成体系、表现出来:
高德纳定义了几百个排版命令。而用来理解这些命令的排版机,就是TeX引擎:它可以读取作者的手稿,生成一个文件,直接能拿去打的那种。
不过,高德纳也知道,不管它能理解多少命令,都不可能满足手稿作者的所有需求。
所以,他写了一个可扩展的TeX,让用户随意添加自己想要的功能:
只要给它一些新的宏 (Macro) ,就能定义新的命令。每个人都可以自己创建宏文件,这样不用修改TeX引擎,就能扩展TeX的功能。
当然,既是高德纳自己写的工具,肯定够自己用的了。1984年他还出版了The TeXbook,这本书详细讲述TeX了所有原始命令的含义,以及普通宏命令 (Plain Macro Commands) ,还有引擎内部的工作原理。
这本书的出现,就是为了鼓励开发者,去写自己的宏。
在高德纳的坚持之下,TeX引擎的源代码已经免费了40年,每个人都可以修改。
不过他也规定,一切不兼容的修改版都不能叫做TeX;还发布了一组自动测试,修改版引擎必须通过测试,才能用TeX这个名字。
在那个没有互联网的年代,生在斯坦福的TeX走向了世界。它被移植到各种计算机系统、各种语言、各种打印设备上,为越来越多的人类排版。
1982年和1989年,高德纳又修改了TeX两次。
1992年,教授从项目里功成身退,接着写《计算机编程艺术》。这本促成了TeX诞生的书,内容一直在不断扩充。
虽然高德纳不再更新项目了,但还有其他人在继续他的工作。
从TeX到LaTeX,更更更简单
TeX的命令集,都是偏低层 (Low-Level) 的,适合高德纳教授这样,希望从细节上把握排版效果的人类。
但这几百个命令,对于大多数人来说,可能还是太多了。
“能让计算机来做的决定,就不要问我。”
用户常常希望自己手写的排版命令越少越好,他们需要的是高层命令,是更加方便使用的markup语言。
最好是,可以把内容 (Content) 和表现形式 (Presentation) 分开的那种工具。
Scribe:爆发之前奏
于是,1980年诞生了Scribe,是卡耐基梅隆大学 (CMU) Brian Reid的博士论文项目。
在80年代早期,Scribe受到了许多学术作者的追捧。不过它并不免费,这一点阻碍了传播。
即便如此,它也不只是个插曲:
Scribe有位忠实用户,来自斯坦福的Leslie Lamport (简称“兰波特”) ,当时已是著名的计算机科学家。
就是他,在尝到便利的滋味之后,想要把Scribe的易用性,转移到Tex身上,最终发明了LaTeX。
LaTeX:大爆发
1984年,兰波特自己创建了一个宏,叫做“lplain”,“l”是他姓氏的首字母。
这里面的一系列命令,比TeX的原始命令易用得多得多。
他把新的宏放出来给大家免费使用:只要运行一个LaTeX程序,让TeX引擎先读取这个宏。
兰波特还写了一本书,叫LaTex:a Document Preparation System,教学术作者怎样用他写的命令来给文章排版。
当然,就算有了LaTeX,用户依然可以用TeX的底层命令,来实现复杂的需求。
这下,TeX用户数量大大大大大爆发。
而许多人用了很久的LaTeX命令,甚至不知道有TeX这个名字。
整个学术排版行业,也因为LaTeX的诞生,受到了深远的影响:
在这个领域,精确排版至关重要,从前只有手动排版才能满足需求;但现代世界里,论文、期刊、书籍和其他出版物大量产出,远远超过了手动排版能达到的吞吐量。
LaTex在实现自动化的同时,又不会损失排版质量。
现在,许多学术出版机构,都接受用LaTeX排版的稿件。
除此之外,连ArXiv这片机器学习论文的沃土,也是在LaTex的滋养下,才有更加蓬勃的生机。
因为,即便没有出版商排版,作者也可以把严谨整齐的研究成果,送给全球的人类观赏。
真是一个美好的世界。
One More Thing
那么问题来了,LaTeX的鼻祖高德纳,为什么会有个中文名字呢?
1977年夏天,他在中国度过了三个星期。中文名便是在那时解锁的。
巧的是,排版计划也是在那个夏天启动的。
原文传送门:
https://increment.com/open-source/the-lingua-franca-of-latex/
- 马云正式卸任后,阿里巴巴开盘跌0.87%2019-09-10
- AI独角兽云知声,已完成一期科创板IPO辅导2019-10-17
- 亚马逊在华拓展云计算团队,挑战阿里巴巴和腾讯2019-10-16
- IDC:今年上半年中国公有云服务市场规模达54.2亿美元2019-11-07