各種Tex介紹

一點並不正式的說明

本帖最後由 milksea 於 2011-2-11 22:35 編輯

補充:TUG 的說明 http://www.tug.org/levels.html

我作個簡單的說明。

語言層面:

TeX 是一種宏語言。就像別的語言有庫一樣,TeX 語言有的集合。這些宏,就是用這個語言寫出來的東西,供大家共用的。TeX 有個最基本的宏集合,與基礎語言一起構成一種“格式”,就是 Plain TeX。基本的 TeX 語言和 Plain TeX 的宏,都是 Knuth 完成的。
後來有了 LaTeX,就是 Lamport TeX。LaTeX 也是宏的集合,也構成一種與 Plain TeX 不一樣的格式。這種格式提供了不少方便的功能,並強調結構化的文檔,因而很快風行起來。
世界在發展,LaTeX 這個格式提供的基本功能並不能滿足所有人的需要,就有人接着寫宏。這些宏可能就是在 LaTeX 這個格式的框架下面編寫的,也就是說是依賴於 LaTeX 宏的宏。一些有能力有精力的人把他覺得有用的宏打成包,公開發布,就成爲了 LaTeX 的宏包。換言之,宏包就是基本的格式的擴展。當然它是人人可寫的,特別有名的,比如美國數學會官方定製的 AMSTeX/AMSLaTeX,就是一套 TeX/LaTeX 格式下面的宏包。

再來說軟件層面:

一個語言是抽象的,不能運行就沒有結果。因此 Knuth 在設計這個語言的同時也給出了一個程序用來把 TeX 語言的代碼轉換爲排版的結果——這個程序當然也叫 TeX。嗯,可以把這個程序看做編譯器。直接運行 tex 命令(我用小寫字母表示你實際使用的命令),默認就是用 Plain TeX 這種格式進行排版。爲示區別,我們可以把 Knuth 的這個 TeX 程序叫 Knuth TeX。
用 tex 加上一個選擇格式的命令行編譯選項,就可以改用 LaTeX 這種格式進行排版了。但這很麻煩,於是就把 tex 命令與對應編譯選項合成爲一個命令,叫 latex。簡言之,latex 命令就是 tex 命令加一個選項的簡寫方式。
Knuth TeX 這個程序有一些功能不好實現,後面就有人進行擴展,得到 ε-TeX 這個程序,一般寫成 eTeX。eTeX 程序和 Knuth TeX 都是 TeX 語言的一個實現,eTeX 增加了少量的幾個命令,但一般來說是沒有太多區別的。
Knuth TeX 輸出的格式是 DVI(DeVice Independent)文件,但後來電子出版業和電子文檔交換中常用的格式是 Adobe 公司開發的 PostScript 格式(PS)和 Portable Document Format 格式(PDF)。因此就需要有一些工具完成這樣的轉換,一些轉換程序應運而生:Dvips(把 DVI 轉換爲 PS);DVIPDF、DVIPDFM、DVIPDFMx(把 DVI 轉換爲 PDF,可以認爲後面的是前面的改進版)。
轉換的過程令人不爽,於是就又有了 TeX 語言的又一個實現,pdfTeX。它會把 TeX 語言寫的代碼直接編譯成 PDF 文件。當然,不難理解 pdftex 命令就是用 pdfTeX 這個程序和 Plain TeX 這個格式進行排版,而 pdflatex 這個命令就是用 pdfTeX 這個程序和 LaTeX 格式進行排版。不過 pdfTeX 程序也保留了輸出 DVI 格式的能力。
時代在發展,多字節的編碼漸漸代替 ASCII 成爲主流。爲了支持 Unicode 編碼和直接訪問操作系統字體,又出現了 TeX 語言的新的實現,即 XeTeX。作爲一個現代的程序,XeTeX 也直接輸出 PDF 文件(我們暫不去管它內部有格式轉換的實現方式)。於是,不難理解 xetex 命令就是使用 XeTeX 程序以 Plain TeX 格式排版,而 xelatex 命令就是用 XeTeX 程序以 LaTeX 格式排版。
哦,人們的要求總是在發展,現在又想在 TeX 中嵌入其他語言進行更強有力的擴展了。於是 Lua 腳本語言和 TeX 語言的結合體,LuaTeX 應運而生。LuaTeX 程序也是 TeX 語言的一個完整的有擴展的實現。LuaTeX 支持 Unicode、系統字體和內嵌語言擴展,能直接輸出 PDF 格式文件,也可以仍然輸出 DVI 格式。於是 LuaTeX 程序又對應了許多命令:luatex 使用 Plain TeX 格式,輸出 DVI;lualatex 使用 LaTeX 格式,輸出 DVI;pdfluatex 使用 Plain TeX 格式,輸出 PDF;pdflualatex 使用 LaTeX 格式,輸出 PDF。

瞧,語言的脈絡是簡單的,但軟件程序總是層出不窮。


故事還沒有完,前面我遺漏了一個重要的格式,叫做 ConTeXt。這個格式從一開始就很強調與腳本語言,也就是具體實現程序的結合。過去舊版本的 ConTeXt 是使用 pdfTeX 程序作爲它的排版引擎的,用來擴展的腳本語言是 ruby,編譯文件使用的命令一般是 texexec;新版本的 ConTeXt 則使用 LuaTeX 作爲它的排版引擎,腳本也都直接使用 Lua,編譯時使用的命令是 context。那麼不難猜,所謂“XeConTeXt”是什麼東西,它事實上是 ConTeXt 改用 XeTeX 程序作爲它的排版引擎的一種編譯方式,實際的命令則是 texexec 或 context 加上適當的命令行選項。


最後說一下 BibTeX 和 MakeIndex。這兩個都是與 TeX 相關聯的工具程序,一般用在 LaTeX 格式上。BibTeX 處理 .tex 文件,根據其中的引用,從文獻數據庫中提取生成參考文獻列表;而 MakeIndex 處理 LaTeX 格式編譯時輸出的 .idx 文件(裏面是索引條目),生成 .ind 文件(裏面是排序整理好的索引條目)。

(是的,上面的敘述我還是略去了一些細節,東西很雜,不多說了。)

轉自:http://bbs.ctex.org/viewthread.php?tid=49647



發佈了52 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章