TeX
開發者 | 高德納 |
---|---|
首次發布 | 1978年 |
目前版本 |
|
原始碼庫 | |
程式語言 | WEB/Pascal |
作業系統 | 跨平台 |
類型 | 排版 |
許可協定 | 寬鬆自由軟體授權條款 |
網站 | www |
副檔名 |
.tex |
---|---|
網路媒體型式 |
application/x-tex |
首次發布 | 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 下重寫了 TeX 的輸出輸入系統。TeX 的第一版是用 SASL 語言寫成的,執行於 PDP-10 型計算機,採用史丹佛大學的 WAITS 作業系統。在之後的 TeX 版本中,高德納發明了所謂的 「文學編程」(literate programming),一種從同一原始檔自動生成可編譯的原始碼和高品質的文件的編程方法。這種語言被稱為 WEB,它所生成的原始碼是使用 Pascal 程式語言。
一個從頭開始重寫的新版 TeX 於 1982 年發布,它被稱為 TeX 82。除了其他修改之外,原本的斷字演算法被 Frank Liang 編寫的新演算法所取代。TeX 82 還使用了定點而不是浮點,以確保結果在不同的電腦硬體上重現。[2]並且在蓋伊·史提爾二世的大力遊說下,TeX 82 包括一種真正的、圖靈完全的程式語言。[3]1989 年,高德納發布了新版本的 TeX 和 Metafont。[4]儘管高德納希望保持程式的穩定性,但他意識到,只能輸入 128 個不同的字元不足以容納外語;因此 TeX 3.0 版本的主要變化是能使用 8 位元輸入,即在文字中允許輸入 256 個不同的字元。
從 TeX 第三版開始,之後的升級是在小數點後加入一個新數位,使之越來越接近圓周率「π」的值。TeX目前的版本是 3.141592653。這顯示了 TeX 已經十分穩定,任何的升級都十分細微。高德納曾表示 「最後一次升級是(於我過世後)將版本數改為『π』,那時任何餘下的漏洞將被看作程式的功能。」
由於 TeX 的原始碼基本上處於公共領域,其他程式設計師可以(並明確被鼓勵)改進系統,但需要使用其他名稱來分發修改後的 TeX。例如,Omega 專案是在 1991 年之後開發的,主要是為了提高 TeX 的多語種排版能力。高德納建立了 「非官方」 修改版本,例如 TeX-XeT,它允許使用者在同一文件中混合寫入從左到右和從右到左書寫系統的文字。
範例
此乃於 Microsoft Windows 系統中示範的簡易 TeX 文字範例。
首先建立一名為 myfile.tex
的純文字檔案,並載有以下內容:
Hello, World
\bye % marks the end of the file; not shown in the final output
然後在命令列直譯器(Command line interpreter),如 cmd 或 PowerShell 中鍵入
tex myfile.tex
並Enter確認,之後TeX便會建立一名為 myfile.dvi
的檔案。此檔案可用如雅浦島之類的 DVI 檢視器檢視。此檔於閱讀器可見的是 「Hello, World」 一句話。\bye
是一個 TeX 指令,作用等同於檔案結束標記,不會顯示於此。此 DVI 檔案可在閱讀器中直接列印或轉換成更普遍的格式,例如 PostScript,或現代更常見的 .pdf 格式。
另外,使用指令 pdftex myfile.tex
亦能輸出 PDF 檔案。PDFTeX 出現之前,把 DVI 轉成PostScript 再轉成 PDF 所產生的字型顯示品質很差(但列印則沒問題)。這是由於 TeX 本身支援點陣字型(Type 3),而此遠不及向量字型(Type 1)的顯示品質好。
數學公式範例
以二次方程為例,
原始碼 | 效果 |
---|---|
|
|
所有行內公式在 TeX 中都須以一對 $
符號圍住。如果要使公式成為行間公式,也就是另起一行居中,則應以一對 $$
取代一對 $
。例如:
原始碼 | 效果 |
---|---|
|
|
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 的設計目標是實現高品質的書籍排版,高德納在數學公式的排版上下了很大功夫。[5][6]
他研究了三種按照老方法排版、排版品質高的書籍:艾迪生韋斯利出版社(即高德納的《電腦程式設計藝術》的出版商)的出版物,尤其是漢斯·沃爾夫和 Joseph-Louis Lagrange 的書籍《Thermodynamics Innovation》(1856)、數學期刊《Acta Mathematica》、和數學期刊《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 其實並不考慮所有的 種情況,而是採用一種演算法複雜度僅為 的最短路徑演算法,加上不考慮空格伸縮量太大的情況,斷行所用的時間幾乎和段落大小成正比。在分頁問題上,TeX 並不採用一種考慮所有情況,得出最佳解的演算法,而是用一頁一頁處理的方法,因為一是分頁的靈活性沒有斷行那樣高,二是當時的電腦沒有足夠的速度。但是,TeX 仍然有避免寡行和孤行的功能。Michael Plass 的一篇論文指出,考慮到圖表的放置位置的完美分頁演算法可能為 NP 完全。TeX 的斷行演算法後來被 Adobe InDesign 等桌面出版軟體所採用。
在斷行時,如果一遍不成功,TeX 會嘗試斷字,即把一個諸如 「computer」 的多音節單詞斷成 「com-」 和 「puter」 或 「compu-」 和 「ter」 分在兩行。TeX 82 採用了一套 Frank Liang 於 1983 年發明的斷字演算法。這套演算法採用 「匹配項」 的方法。「匹配項」的作用是找到單詞中可能出現的一些字母組合,然後在適當的位置插入數字來表示可能或不可能的斷字點。這些 「匹配項」 對單詞的字母與字母之間會給予是否為斷字點提示。提示有相對的強弱。如果提示互相衝突,則強的會覆蓋弱的。最後留下來的提示決定一處是否為斷行點。TeX 內建 4447 條 「匹配項」,從 .ach4 開始到 z4zy 結束。所有 「匹配項」 使用 1 到 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的,主要的有:
- -TeX:美國數學學會(American Mathematical Society)發表的 TeX 版本。絕大多數的 -TeX 功能可以利用 包在 LaTeX 上實現,稱為 -TeX。
- ConTeXt
- jadeTeX
- LaTeX(Lamport TeX):流行的文件處理程式
- LuaTeX
- MacTeX
- MikTeX
- pdfTeX
- SyncTeX
- Texinfo:GNU 的文件處理系統
- TeX Live
- XǝTeX
相容工具
TeXmacs 是一個所見即所得的科學文件編輯器,利用 TeX 字型作為顯示字型,具有類似 Emacs 的編輯方式。它可以匯出為 TeX 文字,PS,PDF 文件,以及 HTML,XML 頁面。
發音和拼寫
TeX 這個詞的標準發音為 [tɛx],其中 [x] 為清的軟齶擦音,相當於中文裡「赫」字的聲母,或者蘇格蘭語 「loch」 一詞中 「ch」 的發音(TeX 其實是希臘單詞 τεχ 的全大寫形式)。整個詞發音接近「戴赫」或「泰赫」。在英語和法語中實際通常訛讀作 /tɛk/,發音接近「泰克」。TeX 這個詞來自希臘文中的 τέχνη (TEXNH),希臘文意為「藝術」和「製造」,也是英語中 technical(技術)的詞源。書寫時,三個字母都是大寫,字母 E 應當左縮排 0.1667 em,向右縮排 0.125 em,並低於其他兩個字母 0.5 ex。而不支援複雜文字的系統則只能這樣書寫:「TeX」。
TeX 的使用者喜歡創造一些和 TeX 有關的詞彙,例如 「TeXnician」(與英語單詞 「technician」,技工的發音相近,意為「TeX 使用者」),「TeXhacker」(「TeX 程式設計師」,「TeX 駭客」)和「TeXnique」(與英語單詞 「technique」,技巧的發音相近,意為「TeX 水平」)等。另有人發明一詞為「TeXpert」(「TeX 高手」),但是高德納本人反對這一名稱,因為這裡 TeX 一詞的讀法是錯誤的[15]。
參見
註腳
- ^ https://www-cs-faculty.stanford.edu/~knuth/abcde.html.
- ^ Knuth and Plass, p. 144
- ^ 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.
- ^ 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.
- ^ Slater, Robert, Portraits in Silicon, MIT Press: 349, 1989 [2015-04-19], ISBN 9780262691314, (原始內容存檔於2015-03-18)
- ^ Syropoulos, Apostolos; Tsolomitis, Antonis; Sofroniou, Nick, Digital Typography Using LaTeX, Springer: 93, 2003 [2015-04-19], ISBN 9780387952178, (原始內容存檔於2015-03-18)
- ^ Donald E. Knuth. Questions and Answers II, TUGboat 17 (1996), p. 355–367. Reprinted as chapter 32 of Digital Typography, p. 620–624.
- ^ Ulrik Vieth (2001) Math typesetting in TEX: The good, the bad, the ugly (頁面存檔備份,存於網際網路檔案館)
- ^ High-Quality Editing and Display of Mathematical Text in Office 2007. [2015-04-19]. (原始內容存檔於2011-08-05).
- ^ LineServices. [2015-04-19]. (原始內容存檔於2011-08-04).
- ^ 存档副本 (PDF). [2015-04-19]. (原始內容存檔 (PDF)於2014-09-11).
- ^ Kara Platoni, Love at First Byte (頁面存檔備份,存於網際網路檔案館). Stanford Magazine, May–June 2006
- ^ The History of TeX (頁面存檔備份,存於網際網路檔案館)
- ^ TeX — Beauty and Fun, http://www.ctex.org/documents/shredder/tex_frame.html (頁面存檔備份,存於網際網路檔案館)
- ^ Knuth, Donald Ervin. The TeXbook. Addison-Wesley. 1993. ISBN 0-201-13448-9.
參考文獻
- 本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。
- Beebe, Nelson HF, 25 Years of TeX and METAFONT: Looking Back and Looking Forward (PDF), TUGboat, 2004, 25: 7–30 [2021-03-18], (原始內容 (PDF)存檔於2021-01-18).
- Knuth, Donald Ervin, The TeXbook, Computers and Typesetting A, Reading, MA: Addison-Wesley, 1984, ISBN 0-201-13448-9 . The source code of the book in TeX (頁面存檔備份,存於網際網路檔案館) (and a needed set of macros [1]) is available online on CTAN. It is provided only as an example and its use to prepare a book like The TeXbook is not allowed.
- ———, TeX: The Program, Computers and Typesetting B, Reading, MA: Addison-Wesley, 1986, ISBN 0-201-13437-3 . The full source code of TeX; also available on CTAN. Being written using literate programming, it contains plenty of human-readable documentation.
- ———, Digital Typography, Lecture notes (78), Center for the Study of Language and Information, 1999, ISBN 1-57586-010-4 .
- ———; Plass, Michael F, Breaking Paragraphs into Lines, Software: Practice and Experience, 1981, 11 (11): 1119–84, S2CID 206508107, doi:10.1002/spe.4380111102. Reprinted as Bigelow, Charles; Day, Donald. Chapter 3. Digital Typography 249. 1983: 67–155. Bibcode:1983SciAm.249b.106B. doi:10.1038/scientificamerican0883-106.
|journal=
被忽略 (幫助);|issue=
被忽略 (幫助). - ———, TeX (source code), (原始內容 (WEB)存檔於27 September 2011) contains extensive documentation about the algorithms used in TeX.
- Lamport, Leslie, LaTeX: A Document Preparation System 2nd, Reading, MA: Addison-Wesley, 1994, ISBN 0-201-52983-1.
- Liang, Franklin Mark, Word Hy-phen-a-tion by Com-put-er (PhD thesis), Department of Computer Science, Stanford University, August 1983 [2021-03-18], (原始內容存檔於2021-05-07).
- Salomon, David, The Advanced TeXbook, Springer, 1995, Bibcode:1995adte.book.....S, ISBN 0-387-94556-3.
- Spivak, MD, The Joy of TeX (reference) 2nd, American Mathematical Society, 1990, ISBN 0-8218-2997-1 on AMS-TeX.
- Vulis, Michael, Modern TeX and Its Applications, CRC Press, 1992 [2021-03-18], ISBN 0-8493-4431-X, (原始內容存檔於2021-04-15).
外部連結
- 中文TeX使用者群組 (頁面存檔備份,存於網際網路檔案館)
- TeX Users' Group (頁面存檔備份,存於網際網路檔案館)
- TeX (questions and answers), StackExchange, [2021-03-18], (原始內容存檔於2021-06-12).
- Eijkhout, Victor. TeX by Topic (頁面存檔備份,存於網際網路檔案館)
- TeX for the Impatient (頁面存檔備份,存於網際網路檔案館)