一點并不正式的說明
本帖最后由 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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
