最開始接觸Latex排版是從做ppt開始,所以一開始就與其他人的學習路線不同,但是這種奇葩的路線讓自己對latex編譯命令更為敏感。
首先介紹自己使用工具和環境:
* Tex 編譯器:CTex
* 編輯器:Texmaker
### 錯誤排查
當在編譯出現問題時,不要慌張,查看錯誤報告,仔細分析問題。
可以嘗試下面兩則通用的操作:
1.
通過換用不用的編譯命令
Texmaker 將一些編譯命令集成到 一條命令中,可以在 Tools Toolbar 中進行選擇(另外可以定制自己的集成編譯指令)
在編譯 beamer 模板時一直使用的 Xelatex 命令,但是在編譯 article or report 時則應該使用 pdflatex 命令
1.
刪掉目錄下的 `.aux .log .out .toc` 文件
不同的編譯命令之間切換時會出現一些不可預知的錯誤在日志、輸出文件之中,這是可以嘗試刪掉目錄下的相應文件,然后重新編譯。
### 概念與原理
- 語言抽象層:
TeX 是一種宏語言。就像別的語言有庫一樣,TeX 語言有宏的集合。這些宏,就是用這個語言寫出來的東西,供大家共用的。TeX 有個最基本的宏集合,與基礎語言一起構成一種“格式”,就是 Plain TeX。基本的 TeX 語言和 Plain TeX 的宏,都是 Knuth 完成的。
后來有了 LaTeX,就是 Lamport TeX。LaTeX 也是宏的集合,也構成一種與 Plain TeX 不一樣的格式。這種格式提供了不少方便的功能,并強調結構化的文檔,因而很快風行起來。
一個語言是抽象的,不能運行就沒有結果。
- 再來說軟件層面:
1. `tex` :
Knuth 在設計這個語言的同時也給出了一個程序用來把 TeX 語言的代碼轉換為排版的結果——這個程序當然也叫 TeX。嗯,可以把這個程序看做編譯器。直接運行`tex`命令(用小寫字母表示你實際使用的命令),默認就是用 Plain TeX 這種格式進行排版。為示區別,我們可以把 Knuth 的這個 TeX 程序叫 Knuth TeX。
1. `tex`+編譯選項:
用 tex 加上一個選擇格式的命令行編譯選項,就可以改用 LaTeX 這種格式進行排版了。但這很麻煩,于是就把 tex 命令與對應編譯選項合成為一個命令,叫 latex。簡言之,latex 命令就是 tex 命令加一個選項的簡寫方式。
1. ε-TeX:
Knuth TeX 這個程序有一些功能不好實現,后面就有人進行擴展,得到 ε-TeX 這個程序,一般寫成 eTeX。eTeX 程序和 Knuth TeX 都是 TeX 語言的一個實現,eTeX 增加了少量的幾個命令,但一般來說是沒有太多區別的。
1. pdfTeX:
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 格式的能力。
1. XeTeX:
時代在發展,多字節的編碼漸漸代替 ASCII 成為主流。為了支持 Unicode 編碼和直接訪問操作系統字體,又出現了 TeX 語言的新的實現,即 XeTeX。作為一個現代的程序,XeTeX 也直接輸出 PDF 文件(我們暫不去管它內部有格式轉換的實現方式)。于是,不難理解 xetex 命令就是使用 XeTeX 程序以 Plain TeX 格式排版,而 xelatex 命令就是用 XeTeX 程序以 LaTeX 格式排版
1. LuaTeX:
哦,人們的要求總是在發展,現在又想在 TeX 中嵌入其他語言進行更強有力的擴展了。于是 Lua 腳本語言和 TeX 語言的結合體,LuaTeX 應運而生。LuaTeX 程序也是 TeX 語言的一個完整的有擴展的實現。LuaTeX 支持 Unicode、系統字體和內嵌語言擴展,能直接輸出 PDF 格式文件,也可以仍然輸出 DVI 格式。
瞧,語言的脈絡是簡單的,但軟件程序總是層出不窮
- 其他相關工具程序
最后說一下 BibTeX 和 MakeIndex。這兩個都是與 TeX 相關聯的工具程序,一般用在 LaTeX 格式上。BibTeX 處理 LaTeX 格式編譯時輸出的 .aux 文件,根據其中的引用,從文獻數據庫中提取生成參考文獻列表;而 MakeIndex 處理 LaTeX 格式編譯時輸出的 .idx 文件(里面是索引條目),生成 .ind 文件(里面是排序整理好的索引條目)。
### 總結
下面將TeX, LaTeX, XeTeX, PdfTeX等基本概念做簡單梳理
- TeX:一種宏語言。
- Plain Tex: Tex中的一個最基本的宏集合與TeX的基礎語言構成的一種格式。
- LaTex: Tex中的一個宏集合,構成一種與 Plain TeX 不一樣的格式。
- Tex程序:把Tex語言轉換為排版的程序,也叫Tex。為區別,稱這個 TeX 程序叫Knuth TeX。
- tex命令:Tex程序中的編譯命令。tex命令默認用Plain TeX格式進行排版。也就是說tex命令后面默認跟的tex文件應該是用Plain Tex格式寫的。
- latex命令:tex命令加上某一個選項使用,就會用LaTeX 格式進行排版,也就是說此時后面跟的tex文件應該是用LaTex格式寫的。為方便,就把tex 命令與對應編譯選項合成為一個命令,叫latex命令。
- ε-TeX 程序:Knuth TeX程序的一個擴展,也是一個程序,一般寫成 eTeX。增加了少量的幾個命令,但一般來說是與Knuth TeX程序沒有太多區別的。
- 實現:在文中的意思就是指“程序”的意思。如文中:eTeX 程序和 Knuth TeX 都是TeX語言的一個實現(也就是說,eTeX 程序和 Knuth TeX 都是把TeX語言轉換為排版的程序。程序作用于tex文本文件,把tex文件編譯成dvi文件)。
- pdfTeX程序:Tex語言的又一個實現,也就是把Tex語言轉換為排版的又一個程序。它會把 TeX 語言寫的代碼直接編譯成 PDF 文件。
- pdftex命令:pdfTex程序中的命令,用來編譯用Plain TeX格式寫的tex文件。
- pdflatex命令:pdfTex程序中的命令,用來編譯用LaTeX格式寫的tex文件。
- XeTeX程序:TeX語言的新的實現,即把Tex語言轉換為排版的一個新程序。支持Unicode 編碼和直接訪問操作系統字體。
- xetex命令:XeTeX程序中的命令,用來編譯用Plain TeX格式寫的tex文件。
- xelatex命令:XeTeX程序中的命令,用來編譯用LaTeX格式寫的tex文件。