Latex中各種概念的區分
目錄:
1 名詞理解
latex(tex)本身其實並不復雜, 復雜的是各種不同的版本 + 中文環境 + 不同的操作系統版本 (尤其是linux下), 這幾點加起來, 就讓人頭暈了. 比如:
- 各種名詞讓人頭暈: tex, ctex, xetex, latex, xelatex, texlive, texpdf, pdflatex
- 各種中文字符集, 字體, 亂碼, 編譯報錯問題.
在這里對一些概念試圖加以區分. 對於不太想了解這些細節, 只想快速上手的人, 可以忽略本文直接移步:
(對於linux的用戶, 如果想快速無障礙的上手, 強烈建議安裝texlive-full latex-cjk-all這兩個包, 這兩個包很大, 不過正因如此, 包含的東西比較多, 所以網上與書上找到的各種例子, 基本上都能跑通. 所以這個空間換時間還是比較值得的.)
但是Mike推薦新手還是大概瀏覽一下本文, 哪怕有個籠統的印象也好.
下表來自(http://blog.csdn.net/dbzhang800/article/details/6820659)
類型 | 名詞 | 解釋 |
---|---|---|
引擎 | (Knuth)TeX | 真正的(原始的)TeX |
引擎 | ε-TeX | 相對於原始的TeX它提供了一種擴展模式 |
引擎 | pdfTeX | 它從tex文件不通過dvi文件直接生成pdf文件(開發者已經轉向LuaTeX) |
引擎 | LuaTeX | 它使用Lua作為擴展語言, 對於LaTeX支持尚不完善? |
引擎 | XeTeX | 相對於原始的TeX, 主要增加了Unicode和 OpenType 的支持 |
------- | ---------------- | --------------------------------------------------------------- |
宏包 | plain TeX | 最古老的TeX宏包, 提供了一些最基本的命令 |
宏包 | AMSTeX | 是美國數學會提供的一個TeX宏包, 它添加了許多數學符號和數學字體 |
宏包 | LaTeX | 相對於PlainTeX, 它使得科技文檔的排版更加直觀和方便 |
宏包 | ConTeXt | 和LaTeX 相比, 它更加靈活和自由 |
------- | ---------------- | --------------------------------------------------------------- |
發行版 | TeX Live | 國際TeX用戶組織TUG開發,支持不同的操作系統 |
發行版 | MiKTeX | Windows 下廣泛使用的一個TeX發行版 |
發行版 | ConTeXt Minimals | 它包含了最新版本的 ConTeXt |
發行版 | teTeX | 一個Unix下的TeX發行版, 現在已經停止更新且並入TeXLive |
發行版 | fpTeX | 一個Windows的TeX發行版, 已不再更新 |
那么, 什么叫引擎, 宏包, 發行版呢?
打個不太恰當但是比較直觀的比方:
(該列表為Mike個人的理解)
- Tex就相當於C/C++語言, 規定了基本的關鍵字, 語法等.
- 宏包就相當於C/C++各種庫和宏函數等, 比如C++提供標准庫, 但是有些人覺得不夠用, 又開發了boost等庫, 這就有點類似PlainTeX與LaTeX的關系.
- 引擎, 就有點類似於編譯器(Mike: 或者有點類似於各種編程框架吧? 目前還不是理解的很清楚).
- 而發行版, 就有點類似於同是gnu編譯器, 但是有Ubuntu下的, 有Fedora下的(額, 這個比方貌似不太恰當, 勉強幫助理解吧).
2 稍微具體一些的解釋
2.1 PlainTeX(宏包)
原始的TeX已經有了一組宏包, 也就是Knuth所寫的著名的Plain TeX(原始的TeX和Plain Tex都是<<The TeXbook>>
一書中介紹的內容).
2.2 LaTeX(宏包)
Tex中的一個宏包合, 構成一種與 Plain TeX 不一樣的格式. PlainTeX很底層,不夠方便, 直觀, 於是Leslie Lamport寫了另一組宏, 稱為LaTeX, 主要是它版本配置和文中內容適度分開處理.
每一個LaTeX 命令實際上最后都會被轉換解釋成幾個甚至上百個TeX 命令. 但是, 普通用戶可以無需知道這中間的復雜聯系. 就象編程的時候如果使用一些已經編譯 好的函數庫和模板可以使我們僅僅用幾個命令就實現很多功能一樣, LaTeX 根據人們排版文章的習慣, 定義了許多命令和模板, 通過這些命令和模板, 我們可以很快的得到漂亮的排版結果.
2.3 ctex(宏包)
ctex宏包提供了一個統一的中文LaTeX文檔框架,底層支持CCT, CJK和xeCJK三種中文LaTeX系統.
- CCT 非常不推薦了
- CJK 這個? 應該在windows下工作還很不錯
- xeCJK 比較推薦(該推薦來自: http://blog.csdn.net/dbzhang800/article/details/6820659)
ctex宏包提供了編寫中文LaTeX文檔常用的一些宏定義和命令.
主要文件包括ctexart.cls, ctexrep.cls, ctexbook.cls 和 ctex.sty, ctexcap.sty.
對於CJK與xeCJK的來龍去脈, 可以參考這個討論: 知乎:如何評價xeCJK
2.4 pdfTeX(引擎)
它從tex文件不通過dvi文件直接生成pdf文件(開發者已經轉向LuaTeX)
2.5 LuaTeX(引擎)
pdfTeX 的后繼是LuaTEX, 這是一種把腳本語言 Lua 和 TeX 結合起來的程序.
2.6 XeTeX(引擎)
是一種使用Unicode的TeX排版引擎, 並支持一些現代字體技術, 例如 OpenType. 其作者和維護者是Jonathan Kew, 並以X11自由軟件許可證發布. 它原生的支持Unicode, 並默認其輸入文件為UTF-8編碼. XeTeX可以在不進行額外配置的情況下直接使用操作系統中安裝的字體, 因此可以直接利用OpenType, Graphite中的高級特性, 例如額外的字形, 花體, 合字, 可變的文本粗細等等.
2.7 XeLaTeX(引擎)
是使用LaTeX的排版引擎, 也有上述XeTeX的優點, 命令下直接使用 xelatex ***.tex
就會產生對應的PDF文件.
2.8 更多解釋
如果想了解更多的來龍去脈, 請參考劉海洋老師的<<LaTeX入門>>
中的 "編譯程序" 以及 "文字編碼與 Unicode" 這兩節. 該書作者好像是CTeX的負責人之一, 所以他寫的書比較深入淺出, 尤其是對於這種歷史沿革性的內容, 比網上找來的信息看着明白多了.
這里只給出一個簡單的參考示意圖, 表示他們的發展脈絡:

各種tex關系圖
3 Latex轉pdf流程
原始的方式
latex dvips ps2pdf
*.tex ------> *.dvi ------> *.ps -------> *.pdf
dvipdfm(x)方式,少一個.ps 步驟
latex dvipdfm
*.tex ------> *.dvi --------> *.pdf
pdflatex或xelatex, 直接生成pdf
pdflatex
*.tex ---------> *.dvi