中文排版不是「英文排版 + 汉字」
把中文直接塞进 pdfLaTeX,通常会得到一堆乱码或报错。原因在于中文排版有自己的一套规则:汉字之间可以任意断行(不像英文靠空格断词)、标点有避头尾规则(句号逗号不能出现在行首)、中西文之间要留适当间距。这些都不是英文排版引擎默认会做的。
现代解决方案是 ctex 宏包家族配合 XeLaTeX 或 LuaLaTeX 引擎。ctex 帮你处理中文断行、标点挤压、字体选择;XeLaTeX 则负责调用系统里真正的中文字体。
用起来极其简单:把文档类从 article 换成 ctexart(或 ctexrep、ctexbook),并在编译时选择 XeLaTeX 引擎。剩下的事 ctex 全包了。
引擎选择:一个必须理解的开关
为什么强调引擎?因为 ctexart 用 pdfLaTeX 编译会直接失败。pdfLaTeX 对中文的支持依赖老旧的 CJK 方案,现代 ctex 默认走 XeLaTeX/LuaLaTeX 路线。
所以「中文文档编译不过」最常见的两个原因就是:① 忘了换引擎(还在用 pdfLaTeX);② 文档类没写 ctexart/ctexrep/ctexbook 或没加载 ctex 宏包。记住:中文 = ctex + XeLaTeX/LuaLaTeX。
本站的每个中文示例都已经把引擎标签切成了 XeLaTeX——点击右上角的引擎标签可以看到,这也是一种提醒。
中文标点:直接打,不用转义
在 ctex 环境下,中文标点可以直接用中文输入法敲出来,不需要转义:, 。 、 ; : ? ! “ ” 《 》 都是合法字符。这与第 2 课的英文标点习惯不同,因为它们不在 LaTeX 的保留字符表里。
ctex 会自动应用避头尾规则:句号、逗号、右括号不会出现在行首;左括号、左引号不会出现在行尾。你不需要手动加不换行空格去调整,这正是中文排版引擎的价值。
唯一需要小心的是全角空格和中文间的英文标点:中文句子里引用英文时,句号仍应按上下文选择。语言混排里,标点归属要跟着它「修饰」的语言走。
中英混排:空格与字体的细节
中英混排时,一个常见问题是「汉字和英文/数字之间太挤」。ctex 会自动在中西文之间插入适当的弹性间距,让段落呼吸更自然,你不必手动加空格。
如果要主动分隔,可以用 \ (反斜杠加空格)或 ~(不换行空格)。例如写「第 3 章」时,希望数字与「章」之间有点空隙且不断行,可以写 第~3~章。
字体方面,ctex 会自动为中文搭配一套默认字体(如 Windows 下的中易宋体、macOS 下的宋体)。需要自定义字体时,可用 \setCJKmainfont{字体名} 显式指定,这在做正式排版、要求特定中文字体时很有用。
pdfLaTeX:最快、最通用,西文论文首选;不支持系统字体与中文。
XeLaTeX:可以直接调用系统字体,中文文档的标准选择;本文所有中文示例都用它。
LuaLaTeX:功能最全的现代引擎,支持嵌入 Lua 脚本,适合复杂自动化需求。
一句话判断:纯西文 → pdfLaTeX;有中文 → ctex + XeLaTeX/LuaLaTeX。
十课走下来,你已经覆盖了 LaTeX 的完整主干:文档骨架 → 特殊字符 → 文档类与宏包 → 逻辑结构与交叉引用 → 公式(基础/进阶)→ 插图 → 表格 → 参考文献 → 中文排版。
回头看会发现一条主线:LaTeX 的核心思想是内容与格式分离。你始终在描述「这是什么」,编号、位置、字体、间距全部自动生成。交叉引用、公式编号、图表编号、文献编号——它们之所以能自动同步,都源于同一套机制。
下一步建议:去练习场用真实模板写一份完整文档(比如你的读书笔记或实验报告),把十课的知识串起来。真实项目的复杂度,才是最好的老师。