恭喜你終于看到了這里。如果你認真完成了上面所有的練習,并琢磨了其中的意義,相信你已經可以用 LaTeX 排版出漂亮的文檔了。現在我們說一點歷史,幫助你更好地理解 TeX 這個系統。
帶有 TeX 的詞,僅僅是本文就已經提到了 TeX, LaTeX, XeLaTeX. 通常中國學生面對不了解意思的一群形近單詞,都會有一種“本能的恐懼”(笑~)。
因此,“大神們”在為新手介紹 TeX 的時候,如果互相爭論 “XXTeX 比 YYTeX 好”或者是“XXTeX 的 YYTeX 如何如何”,往往會蹦出下面這些帶有 TeX 的詞匯:
TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX …
事實上,這部分的內容太過復雜,我自己的了解也實在有限。所以下面這部分的內容也只能是對我了解到的知識的一個概括,甚至可能有些許謬誤。所以大家只需要將這部分的內容當做是一個參考就可以了。
## TeX - LaTeX
TeX 是高德納(Donald Ervin Knuth,1938 年 1 月 10 日 —)教授憤世嫉俗(大霧;追求完美)做出來的排版引擎,同時也是該引擎使用的標記語言(Markup Lang)的名稱。這里所謂的引擎,是指能夠實現斷行、分頁等操作的程序(請注意這并不是定義);這里的標記語言,是指一種將控制命令和文本結合起來的格式,它的主體是其中的文本而控制命令則實現一些特殊效果(同樣請注意這并不是定義)。
> 你可以在[這里](http://en.wikipedia.org/wiki/TeX)找到關于 TeX 引擎的具體描述;
>
> 你可以在[這里](http://en.wikipedia.org/wiki/Markup_language)找到關于標記語言的具體描述。
而 LaTeX 則是 L. Lamport (1941 年 2 月 7 日 — ) 教授開發的基于 TeX 的排版系統。實際上 LaTeX 利用 TeX 的控制命令,定義了許多新的控制命令并封裝成一個可執行文件。這個可執行文件會去解釋 LaTeX 新定義的命令成為 TeX 的控制命令,并最終交由 TeX 引擎進行排版。
> 實際上,LaTeX 是基于一個叫做 plain TeX 的格式的。plain TeX 是高德納教授為了方便用戶,自己基于原始的 TeX 定義的格式,但實際上 plain TeX 的命令仍然十分晦澀。至于原始的 TeX 直接使用的人就更少了,因此 plain TeX 格式逐漸就成為了 TeX 格式的同義詞,盡管他們事實上是不同的。
因此在 TeX - LaTeX 組合中,
1. 最終進行斷行、分頁等操作的,是 TeX 引擎;
2. LaTeX 實際上是一個工具,它將用戶按照它的格式編寫的文檔解釋成 TeX 引擎能理解的形式并交付給 TeX 引擎處理,再將最終結果返回給用戶。
## pdfTeX - pdfLaTeX
TeX 系統生成的文件是?_dvi_?格式,雖然可以用其他程序將其轉換為例如 pdf 等更為常見的格式,但是畢竟不方便。
> dvi 格式是為了排版而產生的,它本身并不支持所謂的“交叉引用”,pdfTeX 直接輸出 pdf 格式的文檔,這也是 pdfTeX 相對 TeX 進步(易用性方面)的地方。
為了解決這個問題,Hàn Th? Thành 博士在他的博士論文中提出了 pdfTeX 這個對 TeX 引擎的擴展。二者最主要的差別就是 pdfTeX 直接輸出 pdf 格式文檔,而 TeX 引擎則輸出 dvi 格式的文檔。
> pdfTeX 的信息可以查看[wiki](http://en.wikipedia.org/wiki/PdfTeX).
pdfLaTeX 這個程序的主要工作依舊是將 LaTeX 格式的文檔進行解釋,不過此次是將解釋之后的結果交付給 pdfTeX 引擎處理。
## XeTeX - XeLaTeX
高德納教授在實現 TeX 的當初并沒有考慮到中日韓等字符的處理,而只支持 ASCII 字符。這并不是說中日韓字符就無法使用 TeX 引擎排版了,事實上 TeX 將每個字符用一個框包括起來(這被稱為盒子)然后將一個個的盒子按照一定規則排列起來,因而 TeX 的算法理論上適用于任何字符。ASCII 字符簡單理解,就是在半角模式下你的鍵盤能直接輸出的字符。
在 XeTeX 出現之前,為了能讓 TeX 系統排版中文,國人曾使用了 天元、CCT、CJK?等手段處理中文。其中 天元和 CCT 現在已經基本不用,CJK 因為使用時間長且效果相對較好,現在還有人使用。
不同于 CJK 等方式使用 TeX 和 pdfTeX 這兩個不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。也就是說現在不使用 CJK 也能排版中日韓文的文檔了,并且這種方式要比之前的方式更加優秀。
XeLaTeX 和 XeTeX 的關系與 pdfLaTeX 和 pdfTeX 的關系類似,這里不再贅述。
使用 XeTeX 引擎需要使用 UTF-8 編碼。
> 所謂編碼就是字符在計算機儲存時候的對應關系。例如,假設有一種編碼,將漢字“你”對應為數字“1”;“好”對應為數字“2”,則含有“你好”的純文本文件,在計算機中儲存為“12”(讀取文件的時候,將“12”再轉換為“你好”顯示在屏幕上或打印出來)。
>
> UTF-8 編碼是 Unicode 編碼的一種,可以參考它的?[wiki](http://en.wikipedia.org/wiki/UTF-8).
## LuaTeX
LuaTeX 是正在開發完善的一個 TeX 引擎,相對它的前輩們還相當的不完善,這里不贅述。
## CTeX - MiKTeX - TeX Live
之前介紹了 TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX 等,他們都是 TeX 家族的一部分。但是作為一個能夠使用的 TeX 系統,僅僅有他們還是不夠的。CTeX, MiKTeX, TeX Live 都是被稱為“發行”的軟件合集。他們包括了上述各種引擎的可執行程序,以及一些文檔類、模板、字體文件、輔助程序等等。其中 CTeX 是建立在 MiKTeX 的基礎之上的。
## 總結
TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先進程度遞增(LuaTeX 尚未完善)。
LaTeX 是一種格式,基于 TeX 格式定義了很多更方便使用的控制命令。上述四個引擎都有對應的程序將 LaTeX 格式解釋成引擎能處理的內容。
CTeX, MiKTeX, TeX Live 都是 TeX 的發行,他們是許許多多東西的集合。