本页使用了标题或全文手工转换

TeX

维基百科,自由的百科全书
跳转至: 导航搜索
TeX
TeX logo
開發者 高德纳
穩定版本 3.14159265(2014年1月)
操作系统 跨平台
类型 排版
许可协议 Permissive
網站 http://www.tug.org/

TeX希腊语/tɛx/[1],音译“泰赫”,文本模式下写作TeX),是一个由美国计算机教授高德纳Donald Ervin Knuth)编写的功能强大的排版软件。它在学术界十分流行,特别是数学物理学计算机科学界。TeX被普遍认为是一个优秀的排版工具,特别是在处理复杂的数学公式时。利用诸如是LaTeX等终端软件,TeX就能够排版出精美的文本。

TeX的MIME类型application/x-tex。TeX是自由软件

历史[编辑]

高德纳最早开始自行编写TeX的原因是当时十分粗糙的排版水平已经影响到他的巨著《计算机程序设计艺术》的印刷质量。他以典型的黑客思维模式,最终决定自行编写一个排版软件:TeX。他原本以为他只需要半年时间,在1978年下半年就能完成,但最终他用了超过十年时间,直到1989年TeX才最终停止修改。

蓋伊·史提爾二世在高德纳编写其第一版的TeX程式时正好在高德纳所工作的斯坦福大学,当他回到MIT时他在ITS下重写了TeX的输出输入系统。

TeX的第一版是用SAIL编程语言写成的,运行于PDP-10型计算机操作系统是斯坦福大学的WAITS操作系统。在之后的TeX版本中,Knuth发明了所谓的“文学编程”(literate programming),一种从同一源文件自动生成可编译的源代码和高质量的文档的编程方法。这种语言被称为WEB,它所生成的源代码是使用Pascal编程语言

TeX的版本号码也十分有趣。从TeX第三版开始,之后的升级是在小数点后加入一个新数位,使之越来越接近圆周率 π 的值。TeX目前的版本是3.1415926。这显示了TeX已经十分稳定,任何的升级都十分细微。高德纳曾表示“最后一次升级是(于我过世后)将版本数改为 π,那时任何余下的漏洞将被看作程序的功能。”

TeX允许自由的再发布及修改,但禁止任何修改版本以TeX或任何其他相似的名字命名。

特性[编辑]

TeX软件在当时拥有其他排版软件没有或不成熟的功能。其中有一些功能得益于排版算法的创新,其中很多成为了高德纳的学生的论文主题。尽管有些功能现在已经被其他排版系统所实现,但仍有部分功能是TeX所特有的,比如数学公式的自动间距调整。

数学公式的自动间距调整[编辑]

Mathematical text typeset using TeX and the AMS Euler font

由于TeX的设计目标是实现高质量的书籍排版,高德纳在数学公式的排版上下了很大功夫。[2][3] 他研究了三种按照老方法排版、排版质量高的书籍:艾迪生韦斯利出版社(即高德纳的《计算机程序设计艺术》的出版商)的出版物,尤其是汉斯·沃尔夫和约瑟夫·拉格朗日的书籍(thermodynamics innovation, +1856)、数学期刊《Acta Mathematica》、和数学期刊《Indagationes Mathematicae》。高德纳通过研究其数学公式的排版,总结出了一套数学公式内部间距的规则,并将其用于TeX。[4]TeX排版数学公式时只是提供了一个间距调整引擎,实际的间距大小由数学字体提供。比如TeX默认的Computer Modern字体提供了一套成熟的间距参数,可以直接使用。

TeX的数学排版功能并非十全十美,有时也招来部分批评。比如TeX诞生的时代的部分机器由于容量不够,不足以存储TeX的所有字体参数,在部分场合需要hack才能正常使用。在美学方面,TeX对根号的处理也招致批评。[5]

OpenType字体技术的数学字体参数基于TeX。[6][7][8]

断行[编辑]

与手动排版相比,计算机排版系统可以自动处理断行问题。大部分排版系统都采用首次拟合法处理断行,即一行一行处理,一行处理完就不管了。TeX的方法是一次处理一个自然段,尝试每一种断行方法,然后选出最优解。两种方法的差异如下:

(此演示不考虑断字)
  The quick brown fox jumps over          The  quick  brown  fox   jumps
the lazy dog. The words here are        over  the  lazy  dog.  The words
quite  short.  Aren't they?  But        here  are  quite  short.  Aren't
long     ones      such       as        they?  But  long  ones  such  as
perhydrocyclopentanophenanthrene        perhydrocyclopentanophenanthrene
may appear.                             may appear.

左边的例子是首次拟合法的结果。第4行单词间的空集中在一处不美观,TeX的方法由于考虑了所有的情况,所以一般情况下能找出较好的方法(即把空分散在1~4段)。TeX的断行算法里有一个叫做badness(“不美观度”)的参数,空格伸缩量越大badness越大。每一种断行的方式都有一个总体的衡量标准,包括badness、断行、以及行与行之间的疏密差异等。TeX其实并不考虑所有的2n种情况,而是采用一种算法复杂度仅为O(n2)的最短路径算法,加上不考虑空格伸缩量太大的情况,断行所用的时间几乎和段落大小成正比。在分页问题上,TeX并不采用一种考虑所有情况,得出最优解的算法,而是用一页一页处理的方法,因为一是分页的灵活性没有断行那样高,二是当时的计算机没有足够的速度。但是,TeX仍然有避免寡行和孤行的功能。Michael Plass的一篇论文指出,考虑到图表的放置位置的完美分页算法可能为NP完全

TeX的断行算法后来被Adobe InDesign桌面出版软件所采用。

在断行时,如果一遍不成功,TeX会尝试断字,即把一个诸如“computer”的多音节单词断成“com-”和“puter”或“compu-”和“ter”分在两行。TeX82采用了一套Frank Liang于1983年发明的断字算法。这套算法采用“匹配项”的方法。“匹配项”的作用是找到单词中可能出现的一些字母组合,然后在适当的位置插入数字来表示可能/不可能的断字点。这些“匹配项”对单词的字母与字母之间会给予是否为断字点提示。提示有相对的强弱。如果提示互相冲突,则强的会覆盖弱的。最后留下来的提示决定一处是否为断行点。TeX自带4447条“匹配项”,从.ach4开始到z4zy结束。所有“匹配项”使用1到5这5个数字,其中奇数表示可能为可断字点,偶数表示不为可断字点,大的数字的话语权强于小的数字。例如,h5elo的含义是,单词中如果出现“helo”,那么在“h”和“e”之间有很大把握为可断行点(例如“bach-e-lor”和“ech-e-lon”);hach4的含义是,单词中如果有“hach”,则“h”后面很可能不是断字点(如“tooth-aches”),虽然把握没有数字5的那么大。例如,对于单词“encyclopedia”,对得上的匹配项有1c4l4, 1cy, 1d4i3a, 4edi, e3dia, 2i1a, ope5d, 2p2ed, 3pedi, pedia4, y1c。插入完所有数字后,留下来的数字中的最大值为en1cy1c4l4o3p4e5d4i3a4,最后奇数处为可断行点:“en-cy-clo-pe-di-a”。

这种方法可以找到约90%的正确断字点,几乎从不出错。而且,TeX有一个“断字特例表”的功能,对于自带断字算法出错的单词可以手动处理。TUG(TeX用户组)有一份英语单词的特例表。另外,TeX默认不会把单词在前两个字母或后三个字母之间断开,所以encyclopedia一词不会断成“encyclopedi-”和“a”(这样不好看)。

质量[编辑]

TeX是非常稳定的程序,高德纳悬赏奖励任何能够在TeX中发现程序漏洞(bug)的人。每一个漏洞的奖励金额从1美分开始,并每年翻倍,直到目前的327.68美元封顶。然而高德纳从未因此而损失大笔金钱,因为TeX中的漏洞极少,而真正发现漏洞的人在获得支票后往往不愿将其兑现。[9][10]

到目前为止,关于TeX的最后一个bug是被Oleg Bulatov发现的。

名字[编辑]

TeX这个词的标准发音为/tɛx/,其中/x/相当于普通话“赫”字的声母,或者苏格兰语“loch”一词中“ch”的发音(X其实是希腊字母 χ)。音译“泰赫”。在英语法语中实际通常读作/tɛk/,音译“泰克”。TeX这个词来自希腊文中的 τέχνη (TEXNH),希腊文意为“艺术”和“制造”,也是英语中 technical(技术)的词源。书写时,三个字母都是大写,字母E应当低于其他两个字母。而不支援下标的系统则只能这样书写:“TeX”。

TeX的用户喜欢创造一些和TeX有关的词汇,例如TeXnician(与英语单词technician,技工的发音相近,意为TeX用户),TeXhacker(TeX程序员,TeX黑客)和TeXnique(与英语单词technique,技巧的发音相近,意为TeX的使用技巧)等。另有人發明一詞為TeXpert(TeX高手),但是高德納本人反對這一名稱,因為這裡TeX一詞的讀法是錯誤的[11]

衍生软件[编辑]

有许多衍生出来的文档处理程序就是基于TeX的,主要的有:

兼容工具[编辑]

TeXmacs是一个所见即所得的科学文档编辑器,利用TeX字体作为显示字体,具有类似Emacs的编辑方式。它可以导出为TeX文本,PSPDF文档,以及HTMLXML页面。LyX也是一个类似的工具。

范例[编辑]

此乃一简易的TeX文本范例。 首先建立一名为myfile.tex的纯文本,并载有以下内容:

hello
\bye

然后激活命令行解释器(Command line interpreter,如MS-DOS),输入:

tex myfile.tex

之后TeX便会建立一名为myfile.dvi的档案。此檔可用如Yap之类的检视器检视。此档于检视器可见的是“hello”一词。“\bye”是一个TeX指令,相等于档案结束标记,是不会显示出来的。此DVI档可在检视器中直接打印或转换成更普遍的格式,例如PostScript

另外,使用以下指令亦能输出PDF檔。

pdftex myfile.tex

当初创造pdfTeX是因为把DVI转成PostScript再转成PDF所产生的字体显示质素很差(但打印则没问题)。这是由于TeX本身支持点阵字体(Type 3),而此远不及向量字体(Type 1)的显示质素好。

数学公式范例[编辑]

二次方程为例,以下的输入

 Quadratic formula is ${-b\pm\sqrt{b^2-4ac} \over {2a}}$
 \bye

会产生如下输出:

\hbox{Quadratic formula is } \textstyle{-b \pm \sqrt{b^2 - 4ac} \over 2a}

所有方程式在TeX中都是以一对$符号括住。如果要使公式放在新行置中,那么就以$$取代$。例如:

 Quadratic formula is $${-b\pm\sqrt{b^2-4ac} \over {2a}}$$
 \bye

输出结果:

\hbox{Quadratic formula is}
-b \pm \sqrt{b^2 - 4ac} \over 2a

LaTeX[编辑]

LaTeX是一套以TeX描述的巨集软件。LaTeX有很多预设的模版、样式。它比TeX更为结构化,如包含了供建立索引表格列表等的巨集和公用软件。例如:

\documentclass[a4paper]{book}
\begin{document}
\section{ ... a title }
\subsection{ ... a subtitle}
%% Text goes here
\end{document}

执行

latex myfile.tex
dvips myfile.dvi

会建立一本为PostScript档的书。如要建立PDF档则可使用

pdflatex myfile.tex

脚注[编辑]

  1. ^ 国际音标的/x/读似“喝”音
  2. ^ Slater, Robert, Portraits in Silicon, MIT Press, 349, 1989, ISBN 9780262691314 
  3. ^ Syropoulos, Apostolos; Tsolomitis, Antonis; Sofroniou, Nick, Digital Typography Using LaTeX, Springer, 93, 2003, ISBN 9780387952178 
  4. ^ Donald E. Knuth. Questions and Answers II, TUGboat 17 (1996), p. 355–367. Reprinted as chapter 32 of Digital Typography, p. 620–624.
  5. ^ Ulrik Vieth (2001) Math typesetting in TEX: The good, the bad, the ugly
  6. ^ http://blogs.msdn.com/b/murrays/archive/2006/09/13/752206.aspx
  7. ^ http://blogs.msdn.com/b/murrays/archive/2006/11/15/lineservices.aspx
  8. ^ http://www.ntg.nl/maps/38/03.pdf
  9. ^ Kara Platoni, Love at First Byte. Stanford Magazine, May–June 2006
  10. ^ The History of TeX
  11. ^ Knuth, Donald Ervin. The TeXbook. Addison-Wesley. 1993. ISBN 0-201-13448-9. 

参见[编辑]

外部链接[编辑]

参考文献[编辑]

  • Donald Knuth: The TeX book, Massachusetts: Addison-Wesley, 1984