Knuth 的 TeX |
Donald E. Knuth |
20 世纪 60 年代,著名计算机科学家和数学家,斯坦福大学 Donald Knuth 教授在忙于撰写那部叫做《计算机程 序设计艺术》 的书。这部书计划一共写七卷,Knuth 在写第四卷时,出版社拿来了第二卷的第二版书样给他过目,结果令他大失所望,因为当时出版社的印刷技术没有使他的书稿更好看,反而变糟了,尤其是在数学公 式和字体上面的缺陷更令他无法接受。于是他就开发了一个既能供科学家编排手稿,又符合出版社印刷要求的高质量的计算机排版系统。
这个排版系统的名字叫做 TeX。这个名称是由三个大写的希腊字母 ΤЄΧ 组成,在希腊语中是“科学”和“艺术”的意思。为了方便书写,一般在纯文本文档中将其写为“TeX”, 念做“泰赫”(我个人习惯将其读作“泰克”)。
Knuth 于 1977 年开始构造 TeX 系统,并为该系统设计了一个字体生成软件——METAFONT。1982 年 TeX 系统发布,之后又有几次版本升级。Knuth 用圆周率 π 的近似值作为 TeX 系统的版本号,并采用自然底数 e 的近似值作为 METAFONT 版本号。系统每升级一次,其版号就增加一位数字,从而不断地趋近于 π 和 e,这种别出心裁的版本号表示方式一方面可以展示 TeX 与科技文献排版的密切关系,同时也表达了 Knuth 对 TeX 系统与 METAFONT 系统不断追求完美的愿望 。
1990年 TeX 第3.1版发布时,Knuth 发出宣言:
- 不再对 TeX 进行任何功能上的扩张。
- 如果出现明显问题,修正的版本依次为3.14版,3.141版,3.1415版.....在自己离开这个世界的时候,将最后的 TeX 版本序号改为 π。 此后,即使再发现错误,也都将成为 TeX 的特征而保留。如果有人非要修改的话,就不要再叫 TeX 了,请另外起名。
- 关于 TeX 的一切,已经全部做了书面说明,可以自由利用来设计其他的软件。
TeX 系统的内核相当稳定,几乎没有 bug,1995 年以后版本号一直停止在3.14159,直到 2002 年 12 月才又进行了一次升级。到目前为止,TeX 系统的版本序号是3.141592,而 METAFONT 版本序号则为 2.71828。
TeX 的许多化身Knuth 之所以很自信的宣布不再对 TeX 进行任何功能上的扩张,并非自视甚高,而是有一定客观原因的。其中最主要的原因就是 TeX 提供了宏扩展机制,开发者或者用户均可以对 TeX 提供的 300 多条基本的控制序列(Control Sequence)进行组合,定义更为高级的控制序列,从而增强 TeX 的排版能力。
尽管很多 TeX 没有原生提供的功能可以通过宏扩展来实现,但是终究是有一些比较重要的问题是宏扩展难以解决的,比如对多国语言文字的支持、对 TrueType、OpenType 字体的支持、图形支持等问题。所以在 Knuth 的 TeX 之后,许多人努力地对 TeX 进行改进,或者干脆开发一个全新的“TeX”。开发者们为了尊重 Knuth 宣言的第二条,这些改进版的 TeX 或者重新开发的 TeX 均不再叫 TeX,它们都有新的名字,诸如 e-TeX、Omega、pdfTeX、XeTeX、LuaTeX 等等。
自 1990 年以来,TeX 的改进项目层出不穷,但是大浪淘沙,许多项目都没有成功,有的已经死去,有的在苟延残喘。目前广为使用 TeX 改进版本主要有 pdfTeX、XeTeX 和 LuaTeX。应当注意的是 pdfTeX 项目开发者 于 2008 年 6 月宣布自 pdfTeX 1.50.0 版本之后只进行 bug 修正,不再提供新功能扩张。LuaTeX 项目则被看作是 pdfTeX 项目的延伸,并且添加了其它许多重要的新功能,并继续开发下去。
虽然 Knuth 的 TeX 系统出现了许多的改进版本和分化版本,但大都是良性的,并且变动的只是TeX 引擎,它们大都兼容 Knuth 定义的TeX 格式。这就好比只改进汽车 的发动机性能,并不改变或者只是略微改变汽车驾驶操作方式,这使得用户可以像往常一样去驾驶一辆性能更好的汽车。所以 TeX 用户们通常无需要担心 TeX 引擎太多,导致自己的 TeX 文稿在其他人的计算机上无法编译。