Random Thoughts

Recent content on Random Thoughts

马上订阅 Random Thoughts RSS 更新: https://blog.joway.io/index.xml

一份其实好吃的 LaTeX 入门餐

2018年5月13日 08:00

最近在使用 LaTeX 写作,发现虽然这个「软件」使用简单,设计简约,但使用起来却并不是非常的容易,加上其生态非常芜杂,各种宏包和发行版层出不穷,中文世界鲜有文章系统地去讲他们之间的关系。这篇文章不会去介绍其基本用法,而是以一个更为宏观的角度,旨在厘清 TeX 排版系统的来龙去脉,以及其生态圈中各个项目的作用与关系。或有纰漏,还望雅正。

标题致敬 Liam Huang 老师很流行的一篇文章 《一份其实很短的 LaTeX 入门文档》

什么是 Tex

TeX 是高德纳教授在70年代末编写 The Art of Computer Programming 时,对当时的计算机排版技术感到无法忍受,因而决定自己开发一个高质量的计算机排版系统 TeX 。

TeX 的版本号有别于当下流行的 x.x.x,而是以圆周率 π 的形式。当前的版本号是 3.14159265 ,所以下一个版本是 3.141592653 。最终无限收敛到 π ,代表了 TeX 不断追求完美的理想。而事实上 TeX 也的确堪称「完美」,高德纳甚至曾悬赏任何发现 Bug 的人,每一个漏洞的奖励金额从2.56美元开始,之后每发现一个 Bug 都会翻倍,直至327.68美元封顶。

TeX 的输出文件被称为 DVI(Device Independent) 文件,DVI 可以作为一种界面描述的中间格式,通过它可以再进而转换成 PDF 格式。

为了区分概念,我们应当将高德纳写的 TeX 软件分为 TeX 语法 和 TeX 编译器。虽然高德纳自己写了一个 TeX 编译器,但其它人依旧可以在不同平台自己编程实现 TeX 语法的编译器。为了保持语法的稳定,TeX 有一组严格的测试文件,如果测试文件文件的输出结果不同于预定的结果,那么这个排版系统就不能够被称为「TeX」。这些不同的 TeX 编译器我们都称之为 「 TeX 引擎」。

TeX 目前(2018年)有如下几个编译引擎:

  1. TeX : 高德纳最早开发的官方实现,只能编译成DVI格式。
  2. pdfTeX : 支持直接编译成 PDF 格式。
  3. XeTeX : 支持 Unicode 编码和直接访问操作系统字体。
  4. LuaTeX : Lua 实现的 TeX 编译器。

虽然 Tex 出于向下兼容考虑要求了所有编译器都需要能够编译历史上所有符合标准的 Tex 文件,但并不意味着它不能增加新的功能。TeX 作为一门「宏语言」,能够使用宏定义出新的语法,甚至能够覆盖原先的语法。要理解这一点必须要先理解什么是「宏编程」。