LaTex、pdfLaTex、XeLaTex和luaLaTex的区别和联系
之前一直搞不懂这些乱七八糟的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。