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 文件(不需要使用 dvipsdvipdf 等转换工具)。
  • 支持 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 是字符集,定义了世界上所有语言的字符例如

    • AU+0041
    • U+4F60
    • 😊U+1F60A
  • 但Unicode 只规定了字符编号(码点),并没有规定如何存储这些字符。

  • 计算机只能存储 二进制数据(0 和 1),所以我们需要 字符编码(Character Encoding)把 Unicode 转换成二进制。

  • UTF-8 是 Unicode 的一种编码方式,是一种 可变长度的 Unicode 编码

    • 1 个字节(8-bit) 表示 ASCII 字符(兼容英语)。
    • 2~4 个字节 表示其他 Unicode 字符(如中文、Emoji)。
    • AU+00410x41(1 字节)
    • U+4F600xE4BDA0(3 字节)
    • 😊U+1F60A0xF09F988A(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/
作者
yylustb
发布于
2025年2月1日
许可协议