LaTex 系列 - 1. LaTex 编译器介绍
在 LaTeX 生态中,latex、pdflatex、xelatex 和 lualatex 是不同的编译引擎,各自有不同的特点和适用场景。
1. latex
- 最古老的 LaTeX 编译器,输出的是 DVI 文件,不是 PDF 文件
- 需要使用 dvips 或 dvipdf 等工具将 DVI 文件转换为 PDF 文件(
latex → DVI → PS → PDF)。 - 不支持直接插入 PNG、JPEG、PDF 等图片格式,只支持 EPS 格式。
- 不支持直接插入中文,需要使用 xeCJK 或 CJK 宏包。
2. pdflatex
- 直接生成 PDF 文件(不需要使用 dvips 或 dvipdf 等转换工具)。
- 支持直接插入 PNG、JPEG、PDF 等图片格式(但不支持 EPS 格式)。
- 不支持 Unicode,默认采用 8-bit 编码(如 latin1、utf8 需用 inputenc 宏包)
- 对中文支持较差,需要 CJK 宏包(或 ctex 宏包)。
- 适合英文和西方语言文档(默认 8-bit 编码)
- 如果一定要用 pdflatex 处理中文,需要
1
\usepackage[CJKutf8]{CJK}
3. xelatex
- 直接生成
PDF文件(不需要使用dvips或dvipdf等转换工具)。 - 支持
Unicode,默认采用UTF-8编码,适用于多语言文档(包括中文) - 支持
OpenType/TrueType(OTF/TTF)字体,可以直接使用系统字体(如宋体、楷体、黑体、SimSun、SimHei 等) - 支持
fontspec宏包,使字体管理更灵活。 - 支持直接插入 PNG、JPEG、PDF 等图片格式(但不支持 EPS 格式)。
CTeX默认推荐xelatex
4. lualatex(推荐用于高级应用,如 Lua 代码交互)
- 支持 Unicode 和 OpenType 字体。
- 支持 fontspec 宏包(字体管理)。
- 支持 luacode 宏包,可以在 LaTeX 代码中直接写 Lua 代码,例如:
1
2
3
4\usepackage{luacode}
\begin{luacode}
tex.print("你好,LuaLaTeX!")
\end{luacode}
5. 总结
| 编译器 | 是否支持 Unicode | 直接输出 PDF | 适用于中文 | 图片支持 | 推荐用途 |
|---|---|---|---|---|---|
latex |
❌ 否 | ❌ 需转换 | ❌ 需 CJK | 仅支持 EPS | 过时,基本不用 |
pdflatex |
❌ 否 | ✅ 是 | ⚠️ 需 CJK | PNG、JPEG、PDF | 适用于英文或简单中文 |
xelatex |
✅ 是 | ✅ 是 | ✅ 推荐 | PNG、JPEG、PDF | 推荐中文文档、支持系统字体 |
lualatex |
✅ 是 | ✅ 是 | ✅ 推荐 | PNG、JPEG、PDF | 高级排版、动态 Lua 代码 |
小贴士
Unicode 是字符集,定义了世界上所有语言的字符例如
A→U+0041你→U+4F60😊→U+1F60A
但Unicode 只规定了字符编号(码点),并没有规定如何存储这些字符。
计算机只能存储 二进制数据(0 和 1),所以我们需要 字符编码(Character Encoding)把 Unicode 转换成二进制。
UTF-8 是 Unicode 的一种编码方式,是一种 可变长度的 Unicode 编码
- 1 个字节(8-bit) 表示 ASCII 字符(兼容英语)。
- 2~4 个字节 表示其他 Unicode 字符(如中文、Emoji)。
A→U+0041→0x41(1 字节)你→U+4F60→0xE4BDA0(3 字节)😊→U+1F60A→0xF09F988A(4 字节)
8-bit 编码 主要指 每个字符占 1 个字节(8 位) 的旧式编码,常见的包括
- ASCII:标准 ASCII 只使用 7-bit(128 个字符),由于 7-bit 只能表示 128 个字符,后来扩展到 8-bit(256 个字符)
- ISO-8859-1:用于西欧语言,支持法语、德语、西班牙语等, 但不支持中文
- GB2312 (6,763个汉字) / GBK(21,003个汉字) / GB18030(Unicode所有汉字)
LaTex 系列 - 1. LaTex 编译器介绍
http://yylustb.github.io/2025/02/01/code/Latex/latex_1-intro-2025-02-01/