TeX 简介

摘自 http://www.chinatex.org

什么是TEX:


子排版系统的出现给印刷出版业带来了一场革命,利用电子计算机及各种辅助设备,可以完成从文稿、图表的录入、编辑、修改、组版,直至得到各种不同用途、不同质量的输出结果。利用电子排版系统,可以减轻劳动强度,缩短出版周期。

  目前世界上有许多电子排版系统。这些系统各有特点,也各有自己的适用范围。TeX 就是一种优秀的电子排版系统。

什么是TEX

  TeX 提供了一套功能强大并且十分灵活的排版语言,它多达900多条指令,并且 TeX 有宏功能,用户可以不断地定义自己适用的新命令来扩展TeX系统的功能。许多人利用 TeX 提供的宏定义功能对 TeX 进行了二次开发,其中比较著名的有美国数学学会推荐的非常适合于数学家使用的 AMS-TeX 以及适合于一般文章、报告、书籍的 LaTeX 系统。

  TeX 系统是公认的数学公式排得最好的系统。美国数学学会(AMS)鼓励数学家们使用 TeX 系统向它的期刊投稿。世界上许多一流的出版社如 Kluwer、Addison-Wesley、牛津大学出版社等也利用 TeX 系统出版书籍和期刊。

  大部分的 TeX 系统都是免费的。Knuth 教授还公开了他的全部源程序。TeX 系统目前已经在数百种计算机系统上得到实现。TeX 系统的排版结果 DVI(DeVice Independent)文件与输出设备无关。DVI 文件可以显示、打印、照排,几乎可以在所有的输出设备上输出。TeX 排版源文件及结果在各种计算机系统上互相兼容。

 

TEX 的历史 Top

TeX的起源

  在所有的可以排版科技著作的计算机格式化程序中,要属 Stanford大学Donald E. Knuth在1977年5月开始设计的TeX程序功能最强了. 其名字来源于希腊 字母tec。正是由于这个原因, 其最后一个字母的发音并不是x,而类似于苏格兰语单词loch或者 德语单词ach中的ch,也类似于西班牙语中的j或俄语中的kh。 这个名字强调指出了数学文本的印刷是该程序功能中不可分割的 一部分。注意真正的TeX标志为TEX,这三个字母相靠得很近,而且 中间的那个E有点儿下沉。但在无格式文件中,就写为TeX。

  除此以外,Knuth还设计了另一个软件 METAFONT, 以生成字符的字体。在标准的TeX软件包中有75种不同设计 尺寸的字体,而且每种字体有八种不同的放缩比例。所用这些 字体都是用METAFONT 程序生成的。为了满足其它应用的需要,还设计了其它字符的 字体,如古斯拉夫语或日语字母的字体,有了这体文件, 也可以把相应文本以书籍质量排版出来。

TeX 程序

  最基本的TeX程序只是由一些很原始的命令组成, 它们可以完成简单的排版操作和程序设计功能。 然而,TeX也允许用这些原始命令定义一些更复杂 的高级命令。这样就可以利用低级的块结构, 形成一个用户界面相当友好的环境。

  在处理器运行期间,该程序首先读取所谓的格式文件, 其中包含各种以原始语言写成的高级命令,也包含分割 单词的连字号安排模式。接着处理程序就处理源文件, 其中包含要处理的真正文本,以及在格式文件中已定义了的 格式命令。

  创建新格式是一件需要由具有丰富知识程序员来做的事情。 把定义写到一个源文件中,这个文件接着被一个名叫 initex的特殊版本的TeX程序处理。它采用一种紧凑的方式 存贮这些新格式,这样就可以被通常TeX程序很快地 读取。

Plain TeX

  Knuth设计了一个名叫Plain TeX的基本格式, 以与低层次的TeX互应。这种格式是用TeX处理文本时 相当基本的部分,以致于我们有时都分不清到底哪条指令是 真正的处理程序TeX的,哪条是这个特殊格式的。 大多数声称只使用TeX的人,实际上指的是只用Plain TeX。

  Plain TeX也是其它格式的基础,这些格式进一步 加深了某些人认为TeX和Plain TeX是同一件事的印象。

LaTeX

  Plain TeX的重点还只是在于如何排版的层次上, 而不是从一位作者的观点出发。 当然对它的深层功能的进一步发掘,需要相当丰富的 编程技巧。因此 它的应用就需要高级排版和程序设计人员。

  正是由此这种原因,美国计算机学家Leslie Lamport 在二十世纪八十年代初期开发了LaTeX格式,这种 格式提供了一组生成复杂文档所需的更高级命令。 利用这种格式,即使使用者 没有排版和程序设计的知识也可以充分发挥由TeX 所提供的强大功能,能在几天, 甚至几小时内生成很多具有书籍质量的 印刷品。 对于生成复杂表格和数学公式,这一点表现得尤为突出。

  LaTeX相对于其基础Plain TeX而言,更像一个包装语言。 它可以在作者根本 不知道所以然的条件下,自动给出标题,章节, 表格目录,交叉索引,公式编号, 文献引用,浮动图表。版面布局信息包含在类文件中, 这些类文件并不是位于 源文件中的。这些布局可以改动,也可以直接采用。

  LaTeX是在十九世纪八十年代出现的,就像其它软件那样, 它也定期地进行更新和修订。经过很多年后,到现在版本号 已固定为2.09,而修订只是用日期来区分。最近的一次 大修订发生在1991年12月1日,其后直到1992年3月 25日为止,还有几次小的修订。

LaTeX2e

  由于LaTeX相当普及,以及它在许多原本没有想像到的领域中 的扩展,再加上计算机技术的日新月异,特别是价格低廉, 但功能强大的激光打印机的出现, 使得相当广泛的一类格式都冠以LaTeX的标签。 为了尝试建立一个真正的 改进标准,在1989年由Leslie Lamport, Frank Mittelbach, Chris Rowley 和Rainer Sch?pf创立了LaTeX3项目。 他们的目标是建立一个最优的,有效的 命令集合,这些命令是来自于各种软件包为了实现 某一目的而设计出来的。

  正如项目名称所表明的,它的目标就是得到LaTeX的一个 新版本3。然而,由于这是一个长期目标,朝向这个目标 迈进的第一步就是在1994年中发行了 LaTeX2e及出版了Lamport 基本手册第二版,同时还有一本新书*,专门描述 在新系统中许多可用的扩展软件包和 LaTeX程序设计。LaTeX2e 是在LaTeX3出现之前的现行标准版本。

  实际上,在LaTeX2e出现之前, 其处理字体安装和选择的一些部分已经以 新字体选择框架(或NFSS)的形式公开了,而且被许多组织 或个人集成到其软件中。这种框架有两个版本,而且不幸的 是它们并不兼容,但分别是相应于LaTeX2.09和 LaTeX2e。后来以一种完全 与2.09版本兼容的方式对NFSS 进行了重新实现。

*即Michel Goossens, Frank Mittelback和 Alexander Samarin在1994年著的“The LaTeX Companion”一 书。

译自"A Guide to LaTeX2e -- Document preparation for beginners and advanced users, Helmut Kopka and Patrick W. Daly, 第二版(1997),有修改.

 

历史与未来: Top

  十年代末,Donald E. Knuth(高德纳)在看到其多卷巨著“The Art of Computer Programming”第二卷的校样时,对由计算机排版的校样的低质量感到无法忍受。因此决定自己来开发一个高质量的计算机排版系统,这样就有了 TeX。

  TeX 的名字是由大写的希腊字母“tec”(tau, epsilon, chi)组成。在希腊语中这个词的意思是“科技”和“艺术”,这也解释了它的发音。“T”和“E”就像在“technology”中的发音一样,而“x”的发音类似于苏格兰语单词“loch”或德语单词“ach”中的“ch”,也类似于西班牙语中的“j”或俄语中的“kh”。

  TeX 的第一版于 1978 年面世。在经过了不断的改进后,1982 年版的 TeX 是一个十分稳定的版本。从此以后,TeX 没有较大的变动,只有很少部分的改进和错误修正。现在几乎所有的操作系统平台下,都有相应的 TeX 软件,而且用它们排版同一个文件得到的输出结果是相同的。TeX 目前的版本是 3.14159,很接近圆周率π。每有一新的版本,就会加上一个π的小数点后的数。所以我们已经知道下一版本的 TeX 是 3.141592,最终将收敛到π。这也代表了 TeX 不断追求完美的理想。

  TeX 的源程序是用 Pascal 写成的,原因是 Knuth 希望 TeX 尽可能方便地移植到其它的操作系统中去。当时 Pascal 是最适合于这一要求的编程语言。这也使得 TeX 现在已经在几乎所有的计算机系统中得到实现。

  TeX 的另一个重要的特征就是它的输出是与设备无关的。TeX 的输出文件称为 DVI 文件,即是“Device Independent”。一旦 TeX 处理了你的文件,你所得到的 DVI 文件就可以被送到任何输出设备如打印机,屏幕等并且总会得到相同的结果,而这与这些输出设备的限制没有任何关系。这说明 DVI 文件中所有的元素,从页面设置到文本中字符的位置都被固定,不能更改。

  TeX 现在已经被它的开发者 Knuth 所“冰封”(frozen),新版本的 TeX 只有少许改进和错误修正。这些变动必须保证不会使得即使是写于 1982 年的 TeX 文档无法编译,TeX 自带了测试文件来确保这一点。如果测试文件文件的输出结果不同于预定的结果,那么这个排版系统就不能够被称为“TeX”。所以像一些对 TeX 有很大改进的软件,如“Omega”等将不能被称为“TeX”,尽管它也是基于“TeX”的。

  在设计 TeX 的同时,Knuth 还设计了一个字体生成程序 Metafont。Metafont 是独立于 TeX 之外的,但又与 TeX 有着非常密切的联系。Metafont 生成的只是位图字体,当对字体进行缩放时的效果不佳。对于如何得到像 Type1 字体一样的轮廓字体,现在还在研究之中。与 TeX 一样,Knuth 也“冰封”了 Metafont。所以 Metafont 的进一步的改进和发展将会由其他人来完成,而且名字也将不再是 Metafont。

  虽然 TeX 在过去的二十多年中没有大的变化,但这并不意味着 TeX 是一个僵化的系统。恰恰相反,TeX 开放的设计使得它能够很容易的适应新的要求。例如,在没有改动内核的情形下,TeX 很容易地实现了对 PostScript 字体和外部图形的支持。TeX 还是第一个能够自动生成 HTML 的字处理软件。最近,TeX 又开始增加了在不借助其它工具(如 Adobe Distiller)的条件下生成 PDF 的扩展功能。下面列出的几个项目都是正在进行中,对 TeX 的功能进行了扩展。

PDFTeX : 完全兼容标准的 TeX,但能够给出 PDF 输出。它也可以输出标准的 DVI。

e-TeX: 不仅完全兼容标准的 TeX,还支持一种“扩展模式”。在“扩展模式”中引入了许多新的特性和增强功能。这些新的特性和增强功能提供了更好的编程工具和对输出的控制。

Omega: 这是一个几乎是完全重新写过的,支持 Unicode 的 TeX 程序。Omega 有很多特征都超出了 Knuth 对 TeX 的原始设想。它采用了与 TeX 不同的方法来处理字符,使得可以处理非拉丁语系的文本。也支持从右到左,从上到下的排版方式。

NTS: NTS 代表“New Typesetting System”。Knuth 已经停止发展 TeX,并决定任何超越 TeX 的扩展都不能被称为 TeX。NTS 现在还只是一些对于 TeX 的后续继承者的设想和概念的集合,还不是一个实际上的系统。自然,NTS 会继承 TeX 的绝大部分让我们热爱的特征,并且在很多方面对其加以发展。NTS 可能最终会取代 TeX 或 e-TeX。

MLTeX: 这个 TeX 的扩展引入了命令 \charsubdef,使得可以更为简单方便的使用 8 bit 字符。不过,与 e-TeX 相比,这只是一个微小的改进。

 

优点与不足: Top

一个充斥着“所见即所得”(WYSIWSG)桌面出版软件的情况下来使用 TeX 确是有点令人奇怪。但是,在某些情形下,你会感到 TeX 是最好的,甚至是唯一适合的系统。

  首先我们来看一下 TeX 的优势所在:

高质量的输出 TeX 遵循传统的排版规则,以排版的质量为最重要的目标。如果你把 TeX 的输出结果和用其它的排版软件排版相同的文本所得到的结果加以比较,你就会发现其中的区别。

超常的稳定性 自从 TeX 出现以来,只有一些微小的改动。也就是说,十几年前的 TeX 文件用现在的 TeX 系统排版得到的结果与十几年前得到的结果是一样的。稳定性还体现在 TeX 系统极少会崩溃,可以处理任意大小的文件,即使你的计算机的内存很少,TeX 也可自如的工作。

TeX 是可编程的 TeX 是一种宏命令编程语言。你可以用很少的命令来完成非常复杂的工作。如果需要的话,你也可以重新定义 TeX 的所有命令来得到特殊的效果。

高度的灵活性 TeX 自从出现以来其内核只有微小的改动。但是由于其内核的设计方式,世界上的 TeX 使用者可以让 TeX 做几乎任何工作。你可以用 TeX 来排版英文文本,也可以排版德文,俄文,中文等多种语言。你还可以用 TeX 来排版乐谱,象棋,围棋棋谱等等。

简单方便 TeX 文档是 ASCII 码的文本文件。因此,即使你手边没有 TeX 系统,你也可以看懂绝大部分的内容。TeX 文件的这种特点使得它占用很少的存储空间,也可以很方便的用 email 来传输。

良好的通用性 目前为止,TeX 几乎在所有的计算机操作系统平台上得到实现。如:Atari,Apple,Macintosh,Unix,VMS,MS-DOS,MS-Windows 和 OS/2 等等。TeX 的源文件可在不同的平台之间自由的交换,而得到的输出是完全相同的。

低廉的价格 TeX 是免费软件,它的源程序也是免费的。你可能仅仅需要支付邮费,甚至于一分不花地得到适合你的 TeX 系统。世界上有很多非常好的 TeX 免费软件如:teTeX,mikTeX,fpTeX 等等。同时也有一些具有各自特点(如或多或少的所见即所得特性的)和提供专家级帮助系统的商业版本。

超级技术支持 由于 TeX 并不是被某个公司所垄断开发,所以世界各地的使用者设计了统一的技术支持的方式。这通常是通过因特网以 email, WWW, Usenet 或 Ftp 的方式来提供,有时也可能通过电话或传真的方式。绝大多数情况下这些技术支持都是免费的,这也是 TeX 的精神。

TeX 是一种乐趣 使用 TeX 不仅仅是一种工作手段,也是一种乐趣。它有挑战,也有荣誉。很多人在熟悉了 TeX 之后都开始把使用 TeX 作为一种爱好,而不是一件枯燥无味的劳动。

  在展示了 TeX 的优秀之处后,也得承认 TeX 也有一些不足的地方:

命令繁多 TeX 不是在一个下午就能学会的,除非你是一个真正的天才。当你开始学习并使用它的时候,你将会不停的去翻看 TeX 的参考手册来寻找一个 TeX 命令。你也会发现 TeX 常常不理会你键入的命令,还给出一个让你感到迷惑的错误讯息。这一切都说明了掌握 TeX 需要一个比较长而且艰难的学习过程。

错误难找 当发生错误的时候,TeX 会给出一些信息来提示你。但很多情况下并不足以是你迅速准确的找到错误之所在。尤其对刚刚开始学习的新手来说更是如此。

写宏包有难度 像 TeX 这种宏语言不同于其它的计算机语言,如 C,Pascal 等,大多数人并不了解。因此,当你想要写自己的宏命令时,你需要对 TeX 有比较深入的了解才能写出牢固可靠的宏命令。 不过幸好的是,通常普通用户不需要自己写宏包,只要学会使用宏包就可以了。

使用不直观 TeX 不是所见即所得的。尽管市场上有些近似于所见即所得的商业版本,但即使与最普通的字处理软件比,也还是有不小的差距。着恐怕也是好多人不喜欢使用 TeX 的一个重要原因。

 

常见的 TeX 宏集: Top

Plain TeX

方便 TeX 的使用者,TeX 的专家提供了包含很多用户级命令,容易学习使用的宏集。其中最重要的就是由 Knuth 编写的“Plain TeX”宏集。现在世界上的绝大多数宏集都是基于这个最早问世的宏集的。它是如此的重要以至于当我们谈到 TeX 时, 也可以把 TeX 和 Plain TeX 等同起来,尽管 TeX 事实上不仅仅是 Plain TeX。

  Plain TeX 是一个非常基本的,但是却有着异常强大的功能的宏集。构建 PlainTeX 的很多命令都是“底层 ”的。也就是说这些命令不能被用来写你的书稿,但是却可以用来设计可以被用来写你的书稿的标记语言。LaTeX 和 ConTeXt 就是这样的“高级”标记语言。对于希望深入了解 TeX 或希望自己来做所需的工作的人来说,Plain TeX 无疑具有巨大的吸引力。Knuth 的“TeXbook”一书从各个方面展示了 Plain TeX 的强大功能。该书用 Plain TeX 排版并使用了很精悍的宏命令(只有约 700 行代码)。如果你有兴趣,可以追随着 Knuth 的脚步去使用他的 manmac 宏。

LaTeX

   Leslie Lamport 开发的 LaTeX 是当今世界上最流行和使用最为广泛的 TeX 宏集。它构筑在 Plain TeX 的基础之上,并加进了很多的功能以使得使用者可以更为方便的利用 TeX 的强大功能。使用 LaTeX 基本上不需要使用者自己设计命令和宏等,因为 LaTeX 已经替你做好了。因此,即使使用者并不是很了解 TeX,也可以在短短的时间内生成高质量的文档。对于生成复杂的数学公式,LaTeX 表现的更为出色。

  LaTeX 自从八十年代初问世以来,也在不断的发展。最初的正式版本为 2.09,在经过几年的发展之后,许多新的功能,机制被引入到 LaTeX 中。在享受这些新功能带来的便利的同时,它所伴随的副作用也开始显现,这就是不兼容性。标准的 LaTeX 2.09,引入了“新字体选择框架”(NFSS) 的 LaTeX ,SLiTeX,AMSLaTeX 等等,相互之间并不兼容。这给使用者和维护者都带来很大的麻烦。为结束这中糟糕的状况,Frank Mittelbach 等人成立了 LaTeX3 项目小组,目标是建立一个最优的,有效的,统一的,标准的命令集合。即得到 LaTeX 的一个新版本3。这是一个长期目标,向这个目标迈出第一步就是在 1994 年发布的 LaTeX2e。LaTeX2e 采用了 NFSS 作为标准,加入了很多新的功能,同时还兼容旧的 LaTeX 2.09。LaTeX2e 每 6 个月更新一次,修正发现的错误并加入一些新的功能。在 LaTeX 3 最终完成之前,LaTeX2e 将是标准的 LaTeX 版本。

AMSTeX / AMSLaTeX

  AMSTeX 是美国数学会提供的,在 Plain TeX 基础上开发的 TeX 宏集。它主要用于排版含有很多数学符号和公式的科技类文章或书籍。AMSTeX 给出了许多高级命令,可以让使用者很方便地排版大型的,复杂的数学公式。AMSTeX 排版数学公式等的功能通过 AMSLaTeX 中的宏包 amsmath 在 LaTeX 中得到实现。AMSTeX 目前的版本为 2.1。

  AMSLaTeX 包括两部分,一是上面提到的 amsmath 宏包,主要的目的是用来排版数学符号和公式。另一部分是 amscls,提供了美国数学会要求的论文和书籍的格式。AMSLaTeX 目前的版本为 2.0。

  在提供 AMSTeX 和 AMSLaTeX 的同时,美国数学会还提供一套数学符号的字库,AMSFonts。这套字库中增加了很多 TeX 的标准字库 Computer Modern 所没有的一些数学符号,粗体数学符号等。AMSFonts 现在的版本为 2.2,有 Metafont 和 Type1 两种字库提供下载。

 

 
  什么是 TeX
  TeX 的历史
  历史与未来
  优点与不足
  常见的 TeX 宏集