之前一直搞不懂這些亂七八糟的Tex到底有啥區別,不同引擎不同編譯器換來換去,查了些資料又問了下AI,總算是搞懂了。
大概是這樣,很久以前有人寫了個Tex排版引擎,輸入一些代碼命令,輸出dvi文件(設備無關文件),但這個太難用了,就像匯編一樣,非得專家來寫不可,于是有人在這個基礎上封裝了一套宏,叫做LaTex,用\section、\begin{document}等內容來簡化操作,久而久之就變成了一套標準,管你底下Tex怎么實現,你向上提供的接口是一樣的,就像是不同的C語言編譯器底下可能有不同的實現,但我寫的C語言的代碼語法格式都是一樣的。
然后原始的Tex引擎輸出dvi文件(設備無關文件),后來有人改了下這個Tex引擎,使得其能夠直接輸出pdf文件,更加方便更加現代,這個引擎叫做pdfTex,配合LaTex那套宏(語法標準)變成了pdfLaTex,可以理解為C語言的語法標準不變,寫的代碼格式什么的不變,只是底下的編譯器變了,不再輸出.o文件,而是一步到位輸出exe或者dll等文件,當然,具體到pdfLaTex上可能還有些別的細節,但主要的區別就是這個。
后來有人覺得pdfLaTex沒法混排不同的語言文字(不原生支持UTF-8),于是又改了下Tex引擎,變成了XeTex,配合LaTex那套宏變成了XeLaTex,能夠支持包括中文在內的各種語言,原生支持中文,能夠調用系統里的原生字體等等。
再后來有了更加復雜的排版需求,如一些動態特性或者高度自定義的需求等等,有人同樣改了下Tex引擎,配合LaTex變成了luaLaTex,能夠插入lua腳本,做一些很定制化的內容,同樣因為需要解析腳本,所以編譯速度也比較慢。
需要注意以下幾點:
- LaTex是原始Tex引擎之上包裝的一層宏語言,并非什么實體內容,算是一種標準。
- pdfLaTex、XeLaTex和luaLaTex都是修改了底層的Tex引擎,LaTex這套標準大家一直沿用。
- LaTex和pdfLaTex雖然無法支持多語言混排,但是對一些古老的宏包支持比較好,兼容性比較好。
- 這幾種編譯器并非遞進關系,而是并排關系,均是出自不同需求的分支,因此在實際項目選擇編譯器的時候不要無腦選擇最新的,而是根據實際需求選擇。一般國外的期刊會議論文文章都選擇LaTex或者pdfLaTex,國內的論文或者需要多語言混排的論文選擇XeLaTex,需要高度自定義排版需求(如繪圖)以及OpenType高級特性的選擇luaLaTex。
- 編譯速度:pdfLaTex > XeLaTex > luaLaTex。