TeX

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
TeX
TeX logo
開發者高德納
首次發布1978年,​46年前​(1978
當前版本
  • 3.141592653 (2021年1月;穩定版本)[1]
編輯維基數據鏈接
源代碼庫 編輯維基數據鏈接
編程語言WEB/Pascal
操作系統跨平台
類型排版
許可協議寬鬆自由軟體授權條款
網站www.tug.org/ 編輯維基數據
TeX
副檔名
.tex
網路媒體型式
application/x-tex
首次發布1978年,​46年前​(1978
格式類型文檔文件格式

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還使用了定點而不是浮點,以確保結果在不同的計算機硬件上重現。[2]並且在蓋伊·史提爾的大力遊說下,TeX82包括一種真正的、圖靈完全的編程語言。[3]1989年,高德納發布了新版本的TeX和Metafont[4]儘管高德納希望保持程序的穩定性,但他意識到,只能輸入128個不同的字符不足以容納外語;因此TeX 3.0版本的主要變化是能使用8位元輸入,即在文本中允許輸入256個不同的字符。

從TeX第三版開始,之後的升級是在小數點後加入一個新數位,使之越來越接近圓周率π」的值。TeX目前的版本是3.141592653。這顯示了TeX已經十分穩定,任何的升級都十分細微。高德納曾表示「最後一次升級是(於我過世後)將版本數改為『π』,那時任何餘下的漏洞將被看作程序的功能。」

由於TeX的源代碼基本上處於公共領域,其他程序員可以(並明確被鼓勵)改進系統,但需要使用其他名稱來分發修改後的TeX。例如,Omega項目是在1991年之後開發的,主要是為了提高TeX的多語種排版能力。高德納創建了「非官方」修改版本,例如TeX-XeT,它允許用戶在同一文檔中混合寫入從左到右和從右到左書寫系統的文本。

範例

LaTeX巨集基於TeX,可以將純文字生成一個印刷樣頁

此乃一簡易的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的文件。此文件可用如雅浦島之類的檢視器檢視。此檔於閱讀器可見的是「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

所有方程式在TeX中都是以一對$符號圍住。如果要使公式另起一行居中,那麼就用$$取代$。例如:

原始碼 效果
The quadratic formula is $$-b \pm \sqrt{b^2 - 4ac} \over 2a$$
\bye

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

特性

TeX軟件在當時擁有其他排版軟件沒有或不成熟的功能。其中有一些功能得益於排版算法的創新,其中很多成為了高德納的學生的論文主題。儘管有些功能現在已經被其他排版系統所實現,但仍有部分功能是TeX所特有的,比如數學公式的自動間距調整。

數學公式的自動間距調整

TeX讓電腦形成一段段的數學公式,字體為AMS Euler

由於TeX的設計目標是實現高質量的書籍排版,高德納在數學公式的排版上下了很大功夫。[5][6] 他研究了三種按照老方法排版、排版質量高的書籍:艾迪生韋斯利出版社(即高德納的《計算機程序設計藝術》的出版商)的出版物,尤其是漢斯·沃爾夫和約瑟夫·拉格朗日的書籍《Thermodynamics Innovation》(1856)、數學期刊《Acta Mathematica英語Acta Mathematica》、和數學期刊《Indagationes Mathematicae英語Indagationes Mathematicae》。高德納通過研究其數學公式的排版,總結出了一套數學公式內部間距的規則,並將其用於TeX。[7] TeX排版數學公式時只是提供了一個間距調整引擎,實際的間距大小由數學字體提供。比如TeX默認的Computer Modern字體提供了一套成熟的間距參數,可以直接使用。

TeX的數學排版功能並非十全十美,有時也招來部分批評。比如TeX誕生的時代的部分機器由於容量不夠,不足以存儲TeX的所有字體參數,在部分場合需要hack才能正常使用。在美學方面,TeX對根號的處理也招致批評。[8]

OpenType字體技術的數學字體參數基於TeX。[9][10][11]

斷字與斷行

與手動排版相比,計算機排版系統可以自動處理斷行問題。大部分排版系統都採用首次擬合法處理斷行,即一行一行處理,一行處理完就不管了,因此一旦遇到較長的專有名詞,前面排版正常,後面間距卻非常的寬。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英語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進制的100美分)開始,以後每發現一個bug,都會翻倍,直到目前的327.68美元封頂。然而高德納從未因此而損失大筆金錢,因為TeX中的漏洞極少,而真正發現漏洞的人在獲得支票後往往不願將其兌現。[12][13][14]到目前為止,關於TeX的最後一個bug是被Oleg Bulatov發現的。

衍生軟件

有許多衍生出來的文檔處理程序就是基於TeX的,主要的有:

兼容工具

TeXmacs是一個所見即所得的科學文檔編輯器,利用TeX字體作為顯示字體,具有類似Emacs的編輯方式。它可以導出為TeX文本,PSPDF文檔,以及HTMLXML頁面。LyX也是一個類似的工具。

發音和拼寫

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一詞的讀法是錯誤的[15]

參見

腳註

  1. ^ https://www-cs-faculty.stanford.edu/~knuth/abcde.html.
  2. ^ Knuth and Plass, p. 144
  3. ^ Donald E. Knuth, Knuth meets NTG members頁面存檔備份,存於網際網路檔案館, NTG: MAPS. 16 (1996), 38–49. Reprinted as Questions and Answers, III, chapter 33 of Digital Typography, p. 648.
  4. ^ Donald E. Knuth. The New Versions of TeX and METAFONT頁面存檔備份,存於網際網路檔案館), TUGboat 10 (1989), 325–328; 11 (1990), 12. Reprinted as chapter 29 of Digital Typography.
  5. ^ Slater, Robert, Portraits in Silicon, MIT Press: 349, 1989 [2015-04-19], ISBN 9780262691314, (原始內容存檔於2015-03-18) 
  6. ^ Syropoulos, Apostolos; Tsolomitis, Antonis; Sofroniou, Nick, Digital Typography Using LaTeX, Springer: 93, 2003 [2015-04-19], ISBN 9780387952178, (原始內容存檔於2015-03-18) 
  7. ^ Donald E. Knuth. Questions and Answers II, TUGboat 17 (1996), p. 355–367. Reprinted as chapter 32 of Digital Typography, p. 620–624.
  8. ^ Ulrik Vieth (2001) Math typesetting in TEX: The good, the bad, the ugly頁面存檔備份,存於網際網路檔案館
  9. ^ High-Quality Editing and Display of Mathematical Text in Office 2007. [2015-04-19]. (原始內容存檔於2011-08-05). 
  10. ^ LineServices. [2015-04-19]. (原始內容存檔於2011-08-04). 
  11. ^ 存档副本 (PDF). [2015-04-19]. (原始內容存檔 (PDF)於2014-09-11). 
  12. ^ Kara Platoni, Love at First Byte頁面存檔備份,存於網際網路檔案館). Stanford Magazine, May–June 2006
  13. ^ The History of TeX頁面存檔備份,存於網際網路檔案館
  14. ^ TeX — Beauty and Fun, http://www.ctex.org/documents/shredder/tex_frame.html頁面存檔備份,存於網際網路檔案館
  15. ^ Knuth, Donald Ervin. The TeXbook. Addison-Wesley. 1993. ISBN 0-201-13448-9. 

參考文獻

外部連結