2. 用 LaTeX 排版文字

2. 用 LaTeX 排版文字 #

2.1 语言文字和编码 #

2.1.1 ASCII 编码 #

ASCII 用 7 位表示基本拉丁字母、数字、标点和控制字符。LaTeX 命令使用的反斜线、花括号等都属于这个范围。

2.1.2 扩展编码 #

Latin-1、GBK 等编码扩展了可表示的字符,却不能彼此随意混用。按 GBK 保存的文件被当作 UTF-8 读取时,可能乱码或报错。

了解这些编码有助于处理历史文档。新项目不要为了排中文改用 GBK,也不必直接配置旧的 CJK 工作流。

2.1.3 UTF-8 编码 #

UTF-8 是 Unicode 的一种编码方式,也是现代 LaTeX 的默认输入编码。文件编码、字体包含的字形、语言排版规则是三件不同的事:能读入一个字符,不代表选中的字体能显示它。

本教程的源文件统一保存为 UTF-8,使用 XeLaTeX。fontspec 用于选择 OpenType 字体;ctex 负责进一步配置中文。在 XeLaTeX/LuaLaTeX 下,不要额外加载用于传统输入编码的 inputenc。

2.2 排版中文 #

ctex 同时处理中文字体、中西文间距、标点禁则和标题名称等。可以选择中文文档类:

\documentclass[UTF8,fontset=fandol]{ctexart}
\begin{document}
在 \LaTeX{} 中排版中文。

汉字和 English 单词混排,通常不需要手工添加间距。
汉字之间在源文件中换行,也不会引入多余的西文空格。
\end{document}

如果现有模板要求别的文档类,可以在兼容的前提下加载 ctex 宏包,而不是替换文档类:

\documentclass{article}
\usepackage[UTF8,fontset=fandol]{ctex}

\begin{document}
这是使用 ctex 宏包的中文文档。
\end{document}

两种方案选一种即可。使用 ctexart 时不必再次加载 ctex、xeCJK 或 fontspec。

在 XeLaTeX 下,ctex 借助 xeCJK 处理中文;在 LuaLaTeX 下借助 luatexja。本教程用 XeLaTeX 统一示例环境。fontset=fandol 明确使用发行版字体,避免示例默认依赖某台电脑上的宋体或黑体。

“CTeX 开发小组”“ctex 宏包/文档类”和历史上的 CTeX 发行版不是同一个概念。

2.3 LaTeX 中的字符 #

2.3.1 空格和分段 #

在西文中,多个连续空格一般合并为一个,源代码中的单次换行通常相当于空格。空一行或使用 \par 才表示新段落。

Several    spaces become one.
This is still the same paragraph.

This is a new paragraph.

中文的连续汉字之间不按西文单词空格处理。不要用连续空格缩进、对齐表格或调节页面布局。

2.3.2 注释 #

% 忽略该行余下内容,也会忽略行尾换行产生的空格:

正文内容。 % 这是一条作者笔记

Some%
thing

后两行输出为 Something,中间没有空格。定义命令时,行尾的 % 常用来避免意外空白。

2.3.3 特殊字符 #

下列字符有语法含义,不能总是直接当普通文字输入:

# $ % & { } _ ^ ~ \
要输出 写法 要输出 写法
# \# $ \$
% \% & \&
{、} \{、\} _ \_
^ \textasciicircum{} ~ \textasciitilde{}
\ \textbackslash{}

\^{} 和 \~{} 也能输出相应字符;它们本来是重音命令,空参数使其只打印重音。表示普通 ASCII 字符时,上表的 \textascii... 写法意图更明确。

\\ 是换行命令,不是打印反斜线的方法。全角括号、全角逗号不能替代命令语法需要的半角字符。

2.3.4 连字 #

一些西文字体会把 fi、fl、ff 等组合排成连字。这是字体与排版的正常行为,不是丢字。特定位置不想连写时,可以用空分组隔开:

difficult \qquad dif{}ficult

连字效果受字体和引擎设置影响,应查看 PDF,而不是仅根据源码判断。

2.3.5 标点符号 #

中文标点直接用中文输入法输入。英文左右引号可以用两个反引号和两个单引号表示:

``Please press the `x' key.''

中文可以直接输入“外层引号”和‘内层引号’。

西文中的三种横线作用不同:

源码 用途
well-known 一个连字符,连接复合词。
pages 13--67 短破折号,表示范围。
yes---or no? 长破折号,分隔语句。

西文省略号用 \ldots 或 \dots,不要把三个句点当作排版好的省略号。中文省略号通常直接输入“……”。中文波浪号可直接输入“~”。

2.3.6 拉丁文扩展与重音 #

XeLaTeX 下,只要字体支持,就可以直接输入 café、naïve、Möbius。对应的命令写法仍有用:

caf\'e \qquad na\"{\i}ve \qquad M\"obius

\`o \quad \^o \quad \~o \quad \c{c} \quad \ss{}

\i 是不带点的 i,便于添加重音。文本重音与数学重音不同:正文用 \"o,数学变量上的帽子用 \hat{x}。

2.3.7 其它符号 #

常见文本符号包括 \copyright、\textregistered、\texttrademark、\S、\P、\dag 和 \ddag。连续使用字母命令时,注意用 {} 保留后面的词间空格。

没有找到某个符号时,先查明它属于文本符号还是数学符号,以及是否需要额外宏包;不要只复制一个命令名而遗漏依赖。

2.3.8 LaTeX 标志 #

\TeX、\LaTeX、\LaTeXe 分别输出 TeX、LaTeX 和 LaTeX 2ε 的标志。更多标志可以使用 hologo 宏包输出:

% 导言区
\usepackage{hologo}

% 正文
\TeX{}、\LaTeX{}、\LaTeXe{};
\hologo{XeLaTeX}、\hologo{LuaLaTeX}。

标志名区分大小写。要输入其他工具的标志,先查 hologo 手册中的名称。

2.4 断行和断页 #

LaTeX 默认根据整段文字决定断行,再根据版面决定分页。只有确实需要时才手工干预。

2.4.1 单词间距 #

~ 是不会在该处断行的空格,适合把名称和编号连在一起:

Donald~E.~Knuth

图~\ref{fig:demo}

第二行依赖文档中已经定义的 fig:demo 标签。普通词间空格可随两端对齐伸缩,不需要手工统一宽度。

2.4.2 手动断行和断页 #

命令 作用
\\、\newline 在当前段落中换行,不产生新段落。
\\[6pt] 换行并增加垂直间距。
\\* 换行,并禁止紧接着在此分页。
\newpage 单栏时另起一页;双栏时另起一栏。
\clearpage 先排出等待中的浮动体,再另起一页。

正文分段仍然应该空一行。不要在空白处用 \\“多空一行”,这可能产生 There's no line here to end 错误。

\linebreak[n]、\nolinebreak[n]、\pagebreak[n]、\nopagebreak[n] 用于建议或阻止断行、断页,n 从 0 到 4,强度递增。它们与 \newline、\newpage 的填充行为不同,强行使用可能造成过大的间距。

2.4.3 断词 #

英文长单词通常可按语言的断词规则自动拆分。局部指定可断位置可用 \-:

super\-cali\-fragilistic\-expialidocious

只有在那个位置实际断行时才出现连字符。单词没有断开不一定是错误;过长的 URL、不可拆分的盒子和错误的语言配置,也会导致行溢出。

← 基本概念 · 下一章:文档元素 →

来源与许可