TeX 家族是一个很庞大的概念,虽然 TeX 程序自己很小,庞大的原因,主要是后来人们不断地对它的功能进行扩展导致的。 TeX 家族最开始的概念是引擎。Knuth 老爹开发出的 TeX 是用 WEB 语言写的,这是一个文学编程的语言,需要用 Pascal 来编译——不过现在的 Pascal 编译器也是不能编译它的,版本不匹配——比较的繁琐,效率也不够高。于是有人开发出了 WEB2C 这个小工具来将 WEB 语言的代码转成 C 语言,这样能提高不少效率。 众所周知,TeX 最开始是 Knuth 老爹为了自己的 TAOCP (不知道的请上网爬文)的排版而创作的,所以当 Knuth 老爹自己对 TeX 满意之后,就不乐意修改它了。然而尽管TeX 是 Knuth 老爹和其他人(他的学生)一起做出来的东西,Knuth 老爹却坚持只有自己才能修改名为 TeX 的东西。所以当 TeX 流传开来之后,大家发现 TeX 功能上有不如人意的地方的时候,只能自己在 TeX 的基础上做一些增强版。比如,著名的e-TeX, 还有大家熟悉的 pdfTeX, XeTeX, LuaTeX 等。不是所有的扩展版都包含了T, E, X 这三个字母,比如以前有一个引擎叫做 Omega, 它支持 16 种文字顺序方向,十分神奇。每一个 TeX 引擎都有一套自己的原语,不过所有的增强版引擎,几乎都兼容原始的 TeX 的原语——语法一致,但功能可能变强大了。 这些增强版,包括最原始的 TeX 在内,都被称为**引擎**。引擎是承担最终排版工作的可执行程序。 让我们回到最开始的 TeX 上面来。众所周知,TeX 是一个引擎,同时也是一种宏编程语言的名字。Knuth 老爹的原始版 TeX 一共有三百多个最原始的宏,我们把它们叫做TeX 原语(TeX primitive)。其他所有的宏都是通过他们构建出来的,所以从理论上说,只要掌握了这三百多个原语,就能让 TeX 帮我们解决一切问题了。不过最原始的东西往往是强大的,但同时是不方便使用的。为了方便使用,我们就要在这些原语的基础上为常用的功能编写宏。 有一些宏非常常用,所以如果每次都载入这些宏会繁琐且缓慢。所以 Knuth 老爹允许人们将常用的宏编译成为格式(format, 扩展名为 fmt)。Knuth 老爹自己设计了一个格式,称为 plain TeX, 加上原语,他一共有 900 多个命令。因为它太基础,用得非常频繁,所以大多数时候人们讲到 TeX 语言的时候,指的是 plain TeX 构成的那些指令集合,而不是 TeX primitives. TeX 是面向排版的,所以许多命令晦涩难懂——通常写文章的作者不需要知道这些细节,于是,刚刚获得图灵奖的 Leslie Lamport 博士在 plain TeX 的基础上又编写了一些宏,并编译为格式,取名为 LaTeX. La 就是他姓氏的头两个字母,仿照中国古代的叫法这就是所谓的莱氏 TeX. 所以你看,不管是中国人还是外国人,都想着光宗耀祖呢。LaTeX 优秀之处在于,它将内容与格式分开,使得作者不需要,或者只需要知道很少的排版细节就能排出漂亮的文章。 除掉 plain TeX 和 LaTeX, 常见的格式可能就只有 ConTeXt 了。 在格式的基础上,人们发现实现某一些特定的功能的时候,使用的宏命令总是一样的。所以如果把它们打包起来,就会变得很方便。所以出现了宏包(package)这个东西。宏包总是和格式对应,LaTeX 格式的宏包往往不能用于使用 plain TeX 格式书写的文章之中。LaTeX 中最常用的几个宏包可能是:amsmath, geometry, hyperref, xcolor, graphicx, booktabs 等。 除掉这些东西,人们还开发了一些辅助工具。比如,名为 BibTeX 的工具,就是用来生成参考文献的;名为 makeindex 的工具,就是用来生成索引的。另外对于引擎、格式、宏包、工具,用户要使用它必须有一份说明文档来指引进步。所有这些东西,零零总总,加起来有成千上万个文件,如果让用户去一一下载安装,一则不方便,二则不方便控制版本。所以就有人/组织/公司将他们全部打包在一起。比较著名的发行版有 Windows 系统下的 MikTeX, 跨平台的 TeX Live (它在 Mac OS X 上运行的版本也被称为 MacTeX),为中文做过优化的 CTeX (大陆吴凌云研究员),cwTeX (台湾吴聪敏教授)等。 至于 TeXworks, WinEdt, TeXstudio, TeXmaker 这些东西,只是编辑代码的工具,和 TeX 系统并没有直接的关系。 总的来说,引擎承担排版工作,对应一套原语;格式对应一套书写规则;宏包对应一定的功能;发行版则是所有东西的大杂烩。如果用汽车来做比喻,那么发行版是整个汽车,引擎是发动机和传动系统,格式是方向盘、刹车、离合器这些控制系统,宏包则是音响、车窗之类的各种功能的小物件。 选自:https://gist.github.com/LiamHuang0205/4ea112411962355f9884

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部