TEX是一款功能强大的排版系统。它是由Stanford University的Donald E.Knuth(高德纳)教授开发的。

TEX是希腊词ΤΕΧΝΗ的缩写,其意指科技和艺术,其也是英文technical的词源。

TeX的「编译器」的真名叫做「TeX 引擎」。TeX引擎大概有如下一些选择:

  • Knuth TeX(高德纳的原版TeX,现在你基本已经找不到它了);
  • e-TeX(目前事实上的「标准」TeX。尽管它名字中的「e」表示的是「extended」。但几乎所有的后续的TeX 编译器都是在其基础上开发的);
  • pdfTeX(西文世界最常用的 TeX 编译器。TEX比pdf格式的诞生早了10余年, TEX系统的输出文件格式为.dvi (device independent). 而PDFTeX可以输出dvi和pdf两种格式);
  • LuaTeX(TEX使用其专属的,集成的,基于宏的语言。许多用户抱怨这种语言比较难于掌握,LuaTeX通过引入 一个现代的脚本语言Lua来解决这个问题);
  • XeTeX(原生支持Unicode,并且和LuaTeX一样,支持直接调用系统里的字体。目前推荐的中文支持办法,是在XeTeX引擎上,使用宏的方式解决的);
  • pTeX(日本作者所做的引擎,这里的「p」是「publish」的缩写);
  • e-upTeX(pTeX 系引擎里,目前用得最广泛的是 e-upTeX。)
  • pTeX-ng(它是由国人@李阿玲开发的引擎。其中「ng」是「next generation」的缩写);

TeX是一个「宏语言」。当你制作了一些特别基础的宏,那么你可以将其发布为一个「格式」(format)。建立在TeX之上,有常用的格式:

  • plain TeX:这是Knuth搞出来的格式,以与低层次的TEX互应,最为基础。现在已经很少有人使用
  • LaTeX:这是兰伯特搞出来的格式,使用最为广泛。
  • ConTeXt:和LATEX类似功能的宏包。

你在某个格式之上写作文档(manuscript)时,你需要先告诉TeX引擎你要载入哪个格式。因为格式使用得太频繁了,所以人们倾向于把格式和引擎打包在一起。这样,就不用每次都告诉TeX引擎这件事情了。以LaTeX为例,将它与上述引擎打包在一起之后,我们有了:

  • e-TeX→LaTeX;
  • pdfTeX→pdfLaTeX;
  • LuaTeX→LuaLaTeX;
  • XeTeX→XeLaTeX;
  • pTeX→pLaTeX;
  • upTeX→upLaTeX;
  • e-upTeX→e-upLaTeX;
  • pTeX-ng→pLaTeX-ng.

尽管真正的「编译器」应该是「TeX 引擎」这一概念。但实际上,在日常沟通中,我们说的「怎么编译」,应当指的是这些「格式与引擎相结合」的产物。

参考