TeX

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋

Template:Selfref Template:NoteTA 腳本錯誤:沒有「Infobox」這個模塊。腳本錯誤:沒有「Check for unknown parameters」這個模塊。 腳本錯誤:沒有「Infobox」這個模塊。腳本錯誤:沒有「Check for unknown parameters」這個模塊。

TeX腳本錯誤:沒有「IPAc-en」這個模塊。,常被讀作 腳本錯誤:沒有「IPAc-en」這個模塊。,音譯「泰赫」、「泰克」,風格化後寫作 「Template:TᴇX」),是一個由美國計算機科學教授高德納腳本錯誤:沒有「Lang」這個模塊。)編寫的排版軟件。TeX的 MIME 類型application/x-tex,是一款自由軟件。它在學術界特別是數學物理學計算機科學界十分流行。TeX被普遍認為是一個優秀的排版工具,尤其是對於複雜數學符號的處理。利用 LaTeX 等終端軟件,TeX就能夠排版出精美的文本以幫助人們辨認和尋找。

歷史[編輯]

高德納最早開始自行編寫TeX的原因,是因為當時的電腦排版技術十分粗糙,已經影響到他的巨著《電腦程式設計藝術》的印刷品質。他以典型的黑客思維模式,決定自行編寫一個排版軟件:TeX。

他計劃在 1978 年的學術休假時完成這項工作,但事實上,直到十多年之後的 1989 年,TeX排版語言才被「凍結」(可以使用)。1978 年夏天,蓋伊·史提爾二世在高德納編寫其第一版的TeX程式時,正好在高德納所工作的史丹福大學,當他回到麻省理工學院(MIT)時他在 腳本錯誤:沒有「ilh」這個模塊。 下重寫了TeX的輸出輸入系統。TeX的第一版是用 SASL 語言寫成的,運行於 PDP-10 型計算機,採用史丹福大學的 腳本錯誤:沒有「ilh」這個模塊。 作業系統。在之後的TeX版本中,高德納發明了所謂的 「文學編程」(literate programming),一種從同一源文件自動生成可編譯的原始碼和高質量的文檔的編程方法。這種語言被稱為 WEB,它所生成的原始碼是使用 Pascal 編程語言

一個從頭開始重寫的新版TeX於1982年發佈,它被稱為TeX82。除了其他修改之外,原本的斷字算法被 腳本錯誤:沒有「ilh」這個模塊。 編寫的新算法所取代。TeX82還使用了定點而不是浮點,以確保結果在不同的計算機硬件上重現。[1]並且在蓋伊·史提爾二世的大力遊說下,TeX82包括一種真正的、圖靈完全的編程語言。[2]1989 年,高德納發佈了新版本的TeX和 Metafont[3]儘管高德納希望保持程序的穩定性,但他意識到,只能輸入 128 個不同的字符不足以容納外語;因此TeX3.0 版本的主要變化是能使用 8 位元輸入,即在文本中允許輸入 256 個不同的字符。

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

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

範例[編輯]

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

此乃於 Microsoft Windows 系統中示範的簡易TeX文本範例。

首先建立一名為 myfile.tex 的純文本文件,並載有以下內容:

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

然後在命令行解釋器(Command line interpreter),如 cmdPowerShell 中鍵入

tex myfile.tex

並回車確認,之後TeX便會建立一名為 myfile.dvi 的文件。此文件可用如腳本錯誤:沒有「ilh」這個模塊。之類的 DVI 檢視器檢視。此檔於閱讀器可見的是 「Hello, World」 一句話。\bye 是一個TeX指令,作用等同於檔案結束標記,不會顯示於此。此 DVI 文件可在閱讀器中直接打印或轉換成更普遍的格式,例如 PostScript,或現代更常見的 .pdf 格式。

另外,使用指令 pdftex myfile.tex 亦能輸出 PDF 文件。PDFTeX出現之前,把 DVI 轉成PostScript 再轉成 PDF 所產生的字體顯示質量很差(但打印則沒問題)。這是由於TeX本身支持點陣字體(Type 3),而此遠不及向量字體(Type 1)的顯示質量好。

數學公式範例[編輯]

二次方程為例,

頁面Template:Markup/styles.css沒有內容。

原始碼 效果Template:For loop

所有行內公式在TeX中都須以一對 $ 符號圍住。如果要使公式成為行間公式,也就是另起一行居中,則應以一對 $$ 取代一對 $。例如:

頁面Template:Markup/styles.css沒有內容。

原始碼 效果Template:For loop

LaTeX[編輯]

腳本錯誤:沒有「main」這個模塊。 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所特有的,比如數學公式的自動間距調整。

數學公式的自動間距調整[編輯]

File:AMS Euler sample math.svg
TeX讓電腦形成一段段的數學公式,字體為AMS Euler

由於TeX的設計目標是實現高質量的書籍排版,高德納在數學公式的排版上下了很大功夫。[5][6]

他研究了三種按照老方法排版、排版質量高的書籍:艾迪生韋斯利出版社(即高德納的《電腦程式設計藝術》的出版商)的出版物,尤其是漢斯·沃爾夫和 Joseph-Louis Lagrange 的書籍《Thermodynamics Innovation》(1856)、數學期刊《腳本錯誤:沒有「ilh」這個模塊。》、和數學期刊《腳本錯誤:沒有「ilh」這個模塊。》。高德納通過研究其數學公式的排版,總結出了一套數學公式內部間距的規則,並將其用於TeX。[7]TeX排版數學公式時只是提供了一個間距調整引擎,實際的間距大小由數學字體提供。比如TeX默認的 Computer Modern 字體提供了一套成熟的間距參數,可以直接使用。

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

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

斷字與斷行[編輯]

與手動排版相比,計算機排版系統可以自動處理斷行問題。大部分排版系統都採用首次擬合法處理斷行,即一行一行處理,一行處理完就不管了,因此一旦遇到較長的專有名詞,就會出現前面排版沒有問題,但後面的行卻出現極醜陋的大間距的情況。TeX的方法是一次處理一個自然段,嘗試每一種斷行方法,然後選出最優解。兩種方法的差異如下:(此演示不考慮斷字頁面Template:Col-begin/styles.css沒有內容。

左邊的例子是首次擬合法的結果。第4行單詞間的空集中在一行導致排版不美觀,TeX的方法由於考慮了所有的情況,所以一般情況下能找出較好的方法(即把空分散在 1~4 行)。

TeX的斷行算法裏有一個叫做 badness(「不美觀度」 或 「丑度」)的參數,空格伸縮量越大 badness 越大。每一種斷行的方式都有一個總體的衡量標準,包括 badness、斷行、以及行與行之間的疏密差異等。TeX其實並不考慮所有的 <math>2^n</math> 種情況,而是採用一種算法複雜度僅為 <math>\Omicron(n^2)</math> 的最短路徑算法,加上不考慮空格伸縮量太大的情況,斷行所用的時間幾乎和段落大小成正比。在分頁問題上,TeX並不採用一種考慮所有情況後得出最優解的算法,而是用一頁一頁處理的方法。一是因為分頁的靈活性沒有斷行那樣高,二是因為當時的計算機沒有足夠的速度。但是,TeX仍然有避免寡行和孤行的功能。腳本錯誤:沒有「ilh」這個模塊。 的一篇論文指出,考慮圖表的放置位置的完美分頁算法可能為 NP 完全。TeX的斷行算法後來被 Adobe InDesign桌面出版軟件所採用。

在斷行時,如果一遍不成功,TeX會嘗試斷字,即把一個諸如 「computer」 的多音節單詞斷成 「com-」 和 「puter」 或 「compu-」 和 「ter」 分在兩行。TeX82採用了一套 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的,主要的有:

  • AMS-TeX美國數學學會(American Mathematical Society)發表的TeX版本。絕大多數的 <math>\mathcal{AMS}</math>-TeX功能可以利用 <math>\mathcal{AMS}</math> 包在 LaTeX 上實現,稱為 <math>\mathcal{AMS}</math>-TeX。
  • 腳本錯誤:沒有「ilh」這個模塊。
  • jadeTeX
  • LaTeX(LamportTeX):流行的文檔處理程序
  • LuaTeX
  • 腳本錯誤:沒有「ilh」這個模塊。
  • MikTeX
  • pdfTeX
  • 腳本錯誤:沒有「ilh」這個模塊。
  • 腳本錯誤:沒有「ilh」這個模塊。GNU 的文檔處理系統
  • TeX Live
  • XeTeX

兼容工具[編輯]

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

LyX 也是一個類似的工具。

發音和拼寫[編輯]

TeX這個詞的標準發音為 腳本錯誤:沒有「IPA」這個模塊。,其中腳本錯誤:沒有「IPA」這個模塊。為清的軟齶擦音,相當於中文裏「赫」字的聲母,或者蘇格蘭語 「loch」 一詞中 「ch」 的發音(TeX其實是希臘單詞 腳本錯誤:沒有「Lang」這個模塊。 的全大寫形式)。整個詞發音接近「戴赫」或「泰赫」。在英語法語中實際通常訛讀作 腳本錯誤:沒有「IPA」這個模塊。,發音接近「泰克」。TeX這個詞來自希臘文中的 腳本錯誤:沒有「Lang」這個模塊。 (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]

參見[編輯]

Template:Portal bar

腳註[編輯]

  1. Knuth and Plass, p. 144
  2. 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.
  3. 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.
  4. Template:Cite web
  5. 腳本錯誤:沒有「citation/CS1」這個模塊。
  6. 腳本錯誤:沒有「citation/CS1」這個模塊。
  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. Template:Cite web
  10. Template:Cite web
  11. Template:Cite web
  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. Template:Cite book

參考文獻[編輯]

頁面Template:ReflistH/styles.css沒有內容。

  • 本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。
  • 腳本錯誤:沒有「citation/CS1」這個模塊。.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。. 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.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。. The full source code of TeX; also available on CTAN. Being written using literate programming, it contains plenty of human-readable documentation.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。. Reprinted as Template:Cite book.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。 contains extensive documentation about the algorithms used in TeX.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。 on AMS-TeX.
  • 腳本錯誤:沒有「citation/CS1」這個模塊。.

外部連結[編輯]

Template:TeX navbox Template:TeX編輯器 Template:Free and open-source typography Template:高德納 腳本錯誤:沒有「Authority control」這個模塊。腳本錯誤:沒有「Check for unknown parameters」這個模塊。