pdflatex、lualatex、platex……命令名称看起来很相似,容易造成混乱,但每个命令实际上都是 “格式”和“引擎”的组合。 格式是预编译的宏包;引擎是实际运行它的程序。 LaTeX 就是这样一种格式,它运行在几个不同的引擎之上。此页面沿着该轴对 LaTeX2e、pLaTeX/upLaTeX、LuaLaTeX 和 XeLaTeX 进行排序。
格式与引擎
引擎是读取 .tex 文件并对其进行排版的可执行文件(TeX、pdfTeX、XeTeX、LuaTeX、e-pTeX 等)。相比之下,格式是宏的巨大集合 - \documentclass、\section 和其他宏 - 提前读入并预编译到单个转储(.fmt 文件)。启动时,引擎会立即加载 .fmt,从而避免每次运行时重新定义每个宏。
所以“LaTeX”是格式的名称,而不是引擎的名称。相同的 LaTeX 格式可以在不同的引擎上运行,并且您键入的命令会编码您想要的引擎+格式。 pdflatex表示“pdfTeX引擎+LaTeX格式”; lualatex 的意思是“LuaTeX 引擎 + LaTeX 格式”。
LaTeX 不是唯一的格式。 Knuth 自己的基本 plain TeX 和 ConTeXt 完全是其他格式。此页面缩小到最广泛使用的一个 - LaTeX - 并逐步介绍您可以运行它的主要引擎。
LaTeX (2e)
今天,“LaTeX”几乎毫无例外地意味着LaTeX2e。它是 Leslie Lamport 的 LaTeX 宏的当前版本,现在由 LaTeX 项目维护,于 1994 发布。 2e 意味着对早期 LaTeX 2.09 的“小修改”,这是向长期计划的 LaTeX3 迈进的一个临时步骤。
但 LaTeX3 从未作为一个独立的新内核实现;相反,它的工作作为 expl3(LaTeX3 编程层) 分层在 LaTeX2e 之上。自 2020 expl3 默认情况下作为格式的一部分加载以来,它越来越多地在内核内部使用来实现新功能。结果是:我们仍然每天运行普通的 LaTeX2e,但其内部结构不断通过 LaTeX3 技术进行现代化改造。
LaTeX2e 内核现在定期每年两次(大约六月和十一月)更新。最新的稳定版本是 2025-11-01(于 2025 年 11 月发布),下一个稳定版本的开发预版本 2026-06-01 已经在进行测试。创作模型是一致的:选择顶部带有 \documentclass 的文档类,在前导码中进行包加载和配置,直到 \begin{document},然后编写正文 - 熟悉的“类 + 前导码”模型。
在pdfTeX 引擎上运行这种格式是最经典、标准的配对。相同的 pdfTeX 按输出目标分为两个命令:latex 在 DVI 模式下运行 pdfTeX 并发出中间 DVI 格式(稍后通过单独的工具转换为 PDF),而 pdflatex 让 pdfTeX 直接发出 PDF。对于当今主要是西方文本的文档,pdflatex 是事实上的默认值。
pLaTeX / upLaTeX
pLaTeX 和 upLaTeX 将 LaTeX 格式放在为日语排版构建的引擎上。日本特有的工作——竖写、注音(注音)、日文行文——由 pTeX 系列引擎处理,最初是在 ASCII Corporation 扩展的。在当前的 TeX Live 中,platex 和 uplatex 都在 e-upTeX 基础上运行,但 platex 保留 pLaTeX 兼容的字符处理,而 uplatex 作为面向 Unicode 的 upLaTeX 格式运行。
该系列 始终输出 DVI,然后使用 dvipdfmx 将日语轴承 DVI 转换为 PDF — 一个两步管道(uplatex file.tex 后跟 dvipdfmx file.dvi)。将其与 upmendex 配对以获得日本索引。对于文档类,Haruhiko Okumura 的 jsarticle/jsbook(用于 pLaTeX)及其 Unicode 对应项(例如 ujarticle)很常见,最近的 JIS X 4051 一致 jlreq 也是如此。
platex 和 uplatex 之间的区别较少是可执行基础,而更多的是 格式级字符处理。 platex 保留传统的 pTeX 样式行为,以向后兼容 pLaTeX 资产。 uplatex 假定 Unicode 并可以很好地处理日语与朝鲜文或西里尔文的混合。对于新的日语论文,uplatex 是标准选择。
何时使用它:当日本社团或出版商为 pLaTeX 提供类或风格时,或者当您想要 pTeX 成熟的日语作文(竖写等)时,pLaTeX/upLaTeX 是不错的选择。相反,如果您想按原样使用系统字体或直接倒入 Unicode,则 LuaLaTeX-ja (如下)更适合。
LuaLaTeX
LuaLaTeX 将 LaTeX 格式放在 LuaTeX 引擎上;命令是 lualatex。 LuaTeX 是一个源自 pdfTeX 的引擎,它直接处理 Unicode 输入,并且可以加载通过 fontspec 包安装在 OS 上的 OpenType / TrueType 系统字体。它直接生成PDF,没有中间格式。
顾名思义,其特点是Lua 脚本语言嵌入在引擎中。使用 \directlua{...},您可以编写 Lua 来深入 TeX 的内部,从而使曾经困难的扩展变得更加容易。日语排版由 luatexja 包处理,提供与 pLaTeX 同等的组合,同时保留系统字体和 Unicode。
这种现代性就是为什么 LaTeX 团队越来越多地指出 LuaLaTeX 作为现代引擎,并推荐它作为新项目的默认引擎。它的缺点是速度:编译比 pdflatex 或 xelatex 更重(有时大约比 XeLaTeX 慢两倍)。如果您想要一个能够处理日语、多语言文本、精细字体处理和编程排版的引擎,LuaLaTeX 是第一个候选者。
XeLaTeX
XeLaTeX 将 LaTeX 格式放在 XeTeX 引擎上;命令是 xelatex。与 LuaLaTeX 一样,它支持 Unicode 输入 和通过 fontspec 直接使用系统字体。对于输出,它通过其内置的 xdvipdfmx (从 dvipdfmx 派生的驱动程序)生成 PDF。
XeLaTeX 的优点是简单。对于“我只想使用我的系统字体”,它往往比 LuaLaTeX 更容易配置并且编译更快。它的字体选择感觉与操作系统自己的字体名称查找很接近,因此尝试一个又一个字体名称很简单。另一方面它缺乏Lua的深度可编程性,新开发的重心已经转移到LuaTeX。
命令备忘单
即使使用相同的 LaTeX 格式,命令名称也决定了其背后的引擎、输出格式以及字体的工作方式。在下表中,从命令名称开始从左到右阅读。
| 命令 | 引擎 | 输出 | Unicode / 系统字体 |
|---|---|---|---|
latex | pdfTeX(DVI模式) | DVI → 需要转换 | 否(需要输入等) |
pdflatex | pdfTeX | PDF(直接) | 否(需要输入等) |
platex | e-upTeX(pLaTeX 兼容性运行时) | DVI → dvipdfmx | 日本人;旧字体 |
uplatex | e-upTeX | DVI → dvipdfmx | 内部Unicode;旧字体 |
lualatex | LuaTeX | PDF(直接) | 是 — fontspec / luatexja |
xelatex | XeTeX | PDF(通过 xdvipdfmx) | 是的 — fontspec |
从实际命令来看,发出PDF的引擎直接一步完成,而基于DVI的引擎则增加了一个转换步骤。
# pdfTeX: PDF を直接出力 / emits PDF directly
$ pdflatex main.tex # → main.pdf
# LuaTeX: PDF を直接出力 / emits PDF directly
$ lualatex main.tex # → main.pdf
# upLaTeX: DVI を出力し、dvipdfmx で PDF へ変換
# upLaTeX emits DVI, then dvipdfmx converts to PDF
$ uplatex main.tex # → main.dvi
$ dvipdfmx main.dvi # → main.pdf选择哪一个
下面是一个粗略的指南。详细的标准——速度、包兼容性、日本情况等等——在“选择引擎”页面上进行了探讨。
- 主要是西方文本,快 →
pdflatex。最成熟,具有最广泛的软件包支持。 - 日语论文/所需的现有课程 →
uplatex(或需要时platex)。 DVI →dvipdfmx。 - 现代万能引擎,包括日语 →
lualatex。 Unicode + 系统字体 +luatexja。 - 轻松使用系统字体 →
xelatex。配置简单,编译速度更快。
选择后,将其冻结在项目中
发动机的选择不能随心情而改变。对于论文,一旦标题页、目录、图、表格和参考书目正确构建,将构建过程冻结在 README 或 .latexmkrc 中。将文档从 lualatex 中途移动到 uplatex 会同时更改字体选择、日语处理、PDF 路线以及通常的参考书目处理。如果您要切换,请先测试小样本中的每个功能,然后再返回完整的手稿。
冻结时,不仅要记录命令,还要记录日志的第一行。 This is LuaHBTeX ...、This is XeTeX ... 或 This is e-upTeX ... 等行显示了实际的发动机和 TeX Live 年份。在协作中,当“同一命令”给出不同的输出时,比较这一行可以快速将编辑器设置问题与 TeX Live 或格式差异分开。