跳至内容
Topos Uranos

摘要

本课讲授如何以排版所要求的精确度书写正文。它区分段落和单纯的换行:段落由一个空行或 \par 开始,换行则用 \\ 或 \newline;并说明为什么换行不应代替段落。它介绍竖直间距以及应当节制使用它的理由;介绍水平间距:词间空格、禁止断行的波浪号、细空格、句点后的空格(babel 按语言调整它),以及 luatexja 在汉字与西文之间自动加入的间距;介绍键盘混为一个键的四种符号,即连字符、短破折号、长破折号和减号,以及它们在中文和英文排版中的用法;介绍引号,可以直接输入,也可以用 csquotes;介绍省略号;介绍 LuaLaTeX 所支持的 Unicode 直接输入;最后介绍数字:小数点、千位分隔和百分号在正文和公式中都需要留意,最好在它们让人吃惊之前就有所了解。

学习目标

  1. 用空行分隔段落,只在以行而不是以段落为单位的场合使用换行。
  2. 对每一对词语或数字,在普通空格、波浪号、细空格和不加空格之间作出选择。
  3. 按照语言的排版规范,在适当的位置写出连字符、短破折号、长破折号和减号,并了解中文标点的对应写法。
  4. 在中文文档中排出多层引号,可以直接输入,也可以用 \enquote;并正确写出省略号。
  5. 预测 LaTeX 在正文和公式中如何排出小数、千位分隔和百分数,并按中文的规范书写它们。

段落与换行

对 LaTeX 来说,源文件不是分成行,而是分成段落。在西文中,源文件里的换行相当于一个空格,连续多个空格相当于一个;在两个汉字之间(包括全角标点),luatexja 会去掉换行产生的空格,因为中文本来就不用空格分词。另一方面,一个空行结束段落,连续多个空行相当于一个。命令 \par 的作用与空行完全相同:实际上,引擎把每个空行都转换成 \par。在段落内部,引擎通盘考虑整个段落来决定每一行在哪里结束,这一点在第一课中已经看到;在段落之间,它应用文档类的规则:首行缩进、段落之间的竖直间距、避免在页底或页顶留下孤行。

例题中文的段落

源文件第一段中的换行在结果中看不到;连续两个空行只产生一次分段,与 \par 相同。

LaTeX 代码
\documentclass{article}\usepackage{luatexja-fontspec}\setmainjfont{Noto Serif CJK SC}\usepackage{indentfirst}\begin{document}\section{假设}每一节的第一段也首行缩进,这是中文排版的习惯。​一个空行开始一个新段落。​​两个空行,也只开始一个。\par 命令 par 的作用相同。\end{document}
结果
结果

第二、三行用于中文:luatexja-fontspec 宏包在 fontspec 的基础上加入汉字排版,\setmainjfont 选择含有汉字的字体。标题之后的第一段不缩进,是 LaTeX 默认遵循的英美传统;中文则每段都首行缩进,第四行载入的 indentfirst 宏包正是让第一段也缩进。缩进宽度还可以用 \setlength{\parindent}{2\zw} 设为两个汉字宽。中文用户也常用 ctex 宏包集提供的文档类(例如 ctexart),它默认就按中文习惯缩进两个汉字。

换行,即 \\ 或与之等价的 \newline,在该处结束一行,但不结束段落:下一行属于同一段,没有缩进,也不与上一行隔开。形式 \\[6pt] 在断开的行下面加入竖直间距;形式 \\* 如在“文档的结构剖析”一课中所见,还禁止在该处分页。

例题一个段落中的三次换行
LaTeX 代码
\documentclass{article}\usepackage{luatexja-fontspec}\setmainjfont{Noto Serif CJK SC}\begin{document}段落的第一行,\\同一段落的第二行,\newline第三行,\\[6pt]以及额外间距之后的第四行。​真正的段落以缩进开始。\end{document}
结果
结果

然而,换行不是段落;把它当作段落使用,是从文字处理软件转过来的人最常犯的排版错误。理由有三。第一:段落的形式由文档类决定,一个用换行分隔段落的文档,在引擎看来只有一个段落;如果以后更换文档类,或要求加大段落间距,真正的段落会随之改变,而假的段落不会。第二:保护段落的规则,例如避免在页底留下孤行的规则,不适用于不是段落的东西。第三:用来留出空行的换行会产生劣度最大的盒子警告(使用 luatexja 时,这类警告不一定出现,错误因此更不易察觉),而段落开头的换行是一个错误。换行有它正当的用途,即以行为单位的场合:诗句、地址的各行,或手工排版的标题的各行。