笔者利用LaTeX进行排版的频率并不高,每次捡起来都要重新在网上辛苦查阅相关资料;
另外,若是能利用本次机会将TeX排版系统的历史以及原理快速捋一遍则是极好的。
> 有些许LaTeX写作经历
> 想弄清楚各种xxxTeX之间关系
\(\TeX\)是高纳德(Donald Knuth)于1978年开发的排版系统,核心由Pascal语言编写,包含大量排版命令。由于其过于稳定,至今其核心基本没受到什么大改动,均是修修补补。
既然TeX是一个系统,就不能单纯说它是“一种编程语言“或”一个程序“,实际上它由排版语言、编译器(引擎)以及一些相关可执行程序构成。用户编写.tex源文件,TeX编译器将其编译为二进制机器码,并存储在.dvi文件中,可以将其对照为C语言和C语言编译器之间的关系。
DVI,Device Independent, 译为设备无关。TeX真正生成的其实是.dvi文件(而不是PDF),这种文件格式是由一个叫David R. Fuchs的人定义的,被高纳德顺手开发出来了。这种文件精确描述了所有页面元素的样式以及各自坐标,并且绝对固定并无法被更改,所以任何读取它的输出设备(显示器、打印机等)显示出来的效果一定是一模一样的!
TeX支持宏,所以开发者可将若干底层命令组合为一个新的宏,实现高一级抽象的功能,方便用户使用。
对于TeX系统,其在编译.tex源文件前,会预载一个格式文件,其中包含各种提前定义好的宏,以被用户在源文件中调用。紧接着对源文件进行编译。所以你可以将格式文件理解为宏的集合。
由高纳德本人设计,仅包含了一些很基础的宏来处理简单的排版,现在很少人用。
\(\LaTeX\)是由美国人Leslie Lamport于80年代设计的格式,属于Plain TeX的套娃,实现了很多强大的宏。
于1994年发布,是LaTeX最新的一个大版本,也是如今使用最广泛的格式,一直更新至今,实际上我们如今说的“latex”便是指2e版本。
由美国数学协会设计,同样属于Plain TeX套娃,实现了很多高级数学排版渲染功能。
我将TeX基础命令类比于汇编语言,Plain TeX可类比于C语言,则LaTeX类比为C++。所以实际上TeX编译器最终会将.tex源文件中的各种高级宏一个不漏地解释拆解为一大堆TeX基础指令。
> 注:从这里开始,建议将“引擎”理解为实际的可执行程序
高纳德将TeX的排版引擎设计得如此开放且易扩展,以至于出现了一些由全球社区在此基础上编写的新排版引擎,它们虽然拓展了若干高级特性,但仍严格兼容TeX引擎本身的严谨性。
需要区分的是,如LaTeX这样的格式文件仅是对原始TeX命令的组合,本质上其拓展范畴仍在TeX系统内;而下文提到的对象则是针对TeX引擎本身进行了改动、拓展甚至重写。
由TUG组织维护,在国外比较流行,主要特性是默认最终产物为pdf文件。
> 注:如果你于终端键入"latex"命令,实际上调用的是pdfTeX引擎,只不过是预载了LaTeX格式而已
由Jonathan Kew开发,在TeX基础上增加了对unicode的支持,同时增加若干高级字体渲染技术、高级数学排版功能,其预载的为Plain TeX格式。
XeTeX生成的目标文件为.xdv(extend DVI),其可由相关程序转换为PDF文件。
> 注:所谓的"XeLaTeX"并不是一个独立的排版引擎,终端命令"xelatex"的效果为调用XeTeX,预载LaTeX格式
由另外几个科学家于pdfTeX的基础上开发而来,主要特性是内置Lua脚本引擎,理论上能利用Lua获得更灵活的扩展性,但其流行性及性能均不如XeTeX。所谓的"LuaLaTeX"同上。
我将原始的TeX系统类比于Linus早期开发的Linux内核,各非盈利 / 盈利组织由此开发出不同的Linux发行版本以增添一些特色功能,如Ubuntu、CentOS、SUSE、REDHAT等等。但Linux是操作系统,接下来介绍的各主流TeX系统发行版本准确来说是由一系列可执行文件、格式文件、宏包、开源字体包装起来的工具链ToolChain。
由国际TeX用户组织TUG发行,是最流行的版本,开源且跨平台。其内置上述提到的所有排版引擎,以及最新的LaTeX2e格式。
是Microsoft Windows平台上最出色的发行版本,其附带安装一个TeX编辑器。
是基于TeXLive修改而重发行的版本,由TUG的子团队开发,其相比于TeXLive增加了一些针对Mac特性的工具,以及附带了TeXShop编辑器。
了解了TeX系统的简单历史后,你可以着手为你的电脑安装合适的TeX发行版本,选择一个你喜欢的文本编辑器(我推荐sublime text或者vs code)以及适合你的排版引擎(一般用户推荐XeTeX搭配LaTeX格式)开始写作。
有关于LaTeX入门教程,我推荐CTeX.org维护的一份LaTeX中文入门教程,条理清晰易懂:于此github页面的release板块中可找到其pdf。
另外对于LaTeX2e的官方文档,我会对其进行翻译,原pdf网址LATEX2e for authors。
点击此处进入LaTeX2e for authors中文版翻译。