TeX

✍ dations ◷ 2025-12-09 19:45:03 #1978年软件,TeX,排版软件,自由TeX软件,高德纳

TeX(/tɛx/,常被读作/tɛk/,音译“泰赫”,“泰克”,写作“TeX”),是一个由美国计算机教授高德纳(Donald Ervin Knuth)编写的排版软件。TeX的MIME类型为application/x-tex,是一款自由软件。它在学术界特别是数学、物理学和计算机科学界十分流行。TeX被普遍认为是一个优秀的排版工具,尤其是对于复杂数学公式的处理。利用LaTeX等终端软件,TeX就能够排版出精美的文本以帮助人们辨认和查找。

高德纳最早开始自行编写TeX的原因,是因为当时的电脑排版技术十分粗糙,已经影响到他的巨著《计算机程序设计艺术》的印刷质量。他以典型的黑客思维模式,决定自行编写一个排版软件:TeX。

他计划在1978年的学术休假时完成这项工作,但事实上,直到十多年之后的1989年,TeX语言才被“冻结”(可以使用)。1978年夏天,盖伊·史提尔二世在高德纳编写其第一版的TeX程序时,正好在高德纳所工作的斯坦福大学,当他回到麻省理工学院(MIT)时他在ITS(英语:Incompatible Timesharing System)下重写了TeX的输出输入系统。TeX的第一版是用SAIL编程语言(英语:SAIL programming language)写成的,运行于PDP-10型计算机(英语:PDP-10),采用斯坦福大学的WAITS(英语:WAITS)操作系统。在之后的TeX版本中,高德纳(Knuth)发明了所谓的“文学编程”(literate programming),一种从同一源文件自动生成可编译的源代码和高质量的文档的编程方法。这种语言被称为WEB,它所生成的源代码是使用Pascal编程语言。

一个从头开始重写的新版TeX于1982年发布,它被称为TeX82。除了其他修改之外,原本的断字算法被Frank Liang(英语:Frank Liang)编写的新算法所取代。TeX82还使用了定点而不是浮点,以确保结果在不同的计算机硬件上重现。并且在盖伊·史提尔的大力游说下,TeX82包括一种真正的、图灵完全的编程语言。1989年,高德纳发布了新版本的TeX和Metafont。尽管高德纳希望保持程序的稳定性,但他意识到,只能输入128个不同的字符不足以容纳外语;因此TeX 3.0版本的主要变化是能使用8位输入,即在文本中允许输入256个不同的字符。

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

由于TeX的源代码基本上处于公共领域,其他程序员可以(并明确被鼓励)改进系统,但需要使用其他名称来分发修改后的TeX。例如,Omega项目是在1991年之后开发的,主要是为了提高TeX的多语种排版能力。高德纳创建了“非官方”修改版本,例如TeX-XeT,它允许用户在同一文档中混合写入从左到右和从右到左书写系统的文本。

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

Hello, World\bye          % marks the end of the file; not shown in the final output

然后在命令行解释器(Command line interpreter)中输入tex myfile.tex,之后TeX便会创建一名为myfile.dvi的文件。此文件可用如Yap(英语:Yap)之类的检视器检视。此档于阅读器可见的是“hello”一词。“\bye”是一个TeX指令,相等于文件结束标记,是不会显示出来的。此DVI文件可在阅读器中直接打印或转换成更普遍的格式,例如PostScript。

另外,使用指令pdftex myfile.tex亦能输出PDF文件。当初创造pdfTeX是因为把DVI转成PostScript再转成PDF所产生的字体显示质量很差(但打印则没问题)。这是由于TeX本身支持点阵字体(Type 3),而此远不及向量字体(Type 1)的显示质量好。

以二次方程为例,

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

The quadratic formula is  b ± b 2 4 a c 2 a {\displaystyle {\hbox{The quadratic formula is }}\textstyle {-b\pm {\sqrt {b^{2}-4ac}} \over 2a}} 种情况,而是采用一种算法复杂度仅为(2)的最短路径算法,加上不考虑空格伸缩量太大的情况,断行所用的时间几乎和段落大小成正比。在分页问题上,TeX并不采用一种考虑所有情况,得出最优解的算法,而是用一页一页处理的方法,因为一是分页的灵活性没有断行那样高,二是当时的计算机没有足够的速度。但是,TeX仍然有避免寡行和孤行的功能。Michael Plass(英语: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)的人。每一个漏洞的奖励金额从2.56美元(16进制的一美元)开始,以后每发现一个bug,都会翻倍,直到目前的327.68美元封顶。然而高德纳从未因此而损失大笔金钱,因为TeX中的漏洞极少,而真正发现漏洞的人在获得支票后往往不愿将其兑现。到目前为止,关于TeX的最后一个bug是被Oleg Bulatov发现的。

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

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

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

TeX的用户喜欢创造一些和TeX有关的词汇,例如“TeXnician”(与英语单词“technician”,技工的发音相近,意为“TeX用户”),“TeXhacker”(“TeX程序员”,“TeX黑客”)和“TeXnique”(与英语单词“technique”,技巧的发音相近,意为“TeX水平”)等。另有人发明一词为“TeXpert”(“TeX高手”),但是高德纳本人反对这一名称,因为这里TeX一词的读法是错误的。

相关

  • 筒夹筒夹是一种零件,它主要负责把小直径的工作物夹紧于主轴端。主要用于六角车床及自动车床。依种类可分为:
  • 拿破仑一世拿破仑·波拿巴(法语:Napoléon Bonaparte;意大利语:Napoleone Buonaparte;1769年8月15日-1821年5月5日),法国军事家、政治家与法学家,在法国大革命末期和法国大革命战争中达到权力巅
  • 生存空间生存空间(德语:Lebensraum)是1897年,德国地理学家拉采尔提出国家有机体学说,之后提出了生存空间的概念。他利用生物学概念与当时流行的社会达尔文主义,以生物类比的方式研究国家政
  • 巴伐利亚王储鲁普雷希特鲁普雷希特(Rupprecht,1869年5月18日-1955年8月2日),全名鲁普雷希特·玛利亚·柳特波德·斐迪南(Rupprecht Maria Luitpold Ferdinand),巴伐利亚王储,1921年后为巴伐利亚王室首领,称巴
  • 韦纳奇-东韦纳奇都会区韦纳奇-东韦纳奇都会统计区(英语:Wenatchee–East Wenatchee Metropolitan Statistical Area)系由美国人口调查局定义,为涵盖美国华盛顿州奇兰县与道格拉斯县的城市群,韦纳奇与东
  • 岩本薰岩本薰(1902年2月5日-1999年11月29日),日本围棋九段棋手。第3、4届本因坊战冠军,号薰和。岛根县益田市人,小时候在韩国釜山长大。师从广濑平治郎八段,1918年入段,1919年二段,1920年三
  • 帕特尔·萨德哈卡尔·雷迪帕特尔·萨德哈卡尔·雷迪(Patel Sudhakar Reddy,?-2009年5月23日)是印度共产党(毛主义)中央委员会的领导人。他受安得拉邦马赫布布纳加尔Maldakal附近的Kurthiravulacheruvu的村庄
  • 尤金尼·伯德尤金尼·伯德(英语:Eugene Byrd,1975年8月28日-)出生于美国宾夕法尼亚州费城,为美国男演员。1975年,伯德出生在美国宾夕法尼亚州费城。伯德的著名作品有《狂蟒之灾2》、《机器鸡》
  • 图阿普谢防御战役图阿普谢防御战役,是苏德战争中,于1942年9月25日至12月20日在黑海港口城市图阿普谢东北处的高加索山脉北坡地域,苏联第18集团军抗击德军A集团军群第17集团军的图阿普谢战役集群
  • 怪盗与名侦探《怪盗与名侦探》(法语:Arsène Lupin contre Herlock Sholmes)是法国作家莫理斯·卢布朗第二个以怪盗亚森·罗宾为主角的故事集,分为“蓝钻与金发女子”和“犹太古灯”两篇。故