您输入纯拉丁文脚本文本,TeX 会以令人惊讶的谨慎方式对其进行设置:它将 fi 和 ff 融合到连字中,自动紧排对(如 AV),扫描整个段落以选择换行符和连字符,并对齐边缘。本页介绍了其背后的四种机制 - 连字、字距调整、连字符换行和 microtype - 以及作者应该了解的内容以及您想要干预的罕见情况。所有这些都与西方文本有关。日语有自己的排版模式。
连字
A ligature 将几个相邻的字母融合成一个字形。由于 f 右上角的突出部分与后面的 i 的点或 l 的上升部分发生碰撞,因此 f 连字从金属活字时代就开始使用。 TeX 自动形成 。 默认情况下生成的五个是 ff、fi、fl、ffi 和 ffl:只需键入 office 或 fluffier,相关字母就会被一个字形替换。
相同的机器也构建标点连字。一连串的连字符-- 变成破折号(–,用于数字范围等),连续三个--- 变成破折号(—,用于括号中断)。两个反引号 ` 和两个撇号 ''` 变成正确的左双引号和右双引号。这些转换采用西方字体规格;不需要特殊命令。
但是,当连字跨越语素边界(单词由各个部分组成的接缝)时,它可能会损害可读性。典型的例子是shelfful(shelf + ful):融合ff隐藏了shelf和ful之间的连接。 Knuth 在 *The TeXbook* 中引用了这个词,并表示它应该设置为 shelf\/ful。 halflife、offhand 和wolffish 属于同一类型。日语没有这样的问题,但在认真对待西方文本时,这是一个值得注意的陷阱。
有三种传统方法可以打破不需要的连字。 f\/f 在两个 f 之间插入 斜体修正 \/ — 一个大小与字母悬垂大小相同的微小空间(这就是 Knuth 使用的)。 f{}f 插入一个 空组 {}。 f\kern0pt f 插入 零宽度字距。 所有三个都删除了连字,但请注意一个经典的陷阱:在单词内放置这样的换行符可以关闭该单词的连字符。 对于短单词,实际危害可以忽略不计。
shelf\/ful % italic correction — Knuth's example
shelf{}ful % empty group
shelf\kern0pt ful % zero-width kern如果您使用LuaLaTeX,selnolig 包是更好的解决方案。它以英语形态作为模式,并自动抑制 shelfful 或 wolffish 等单词中不需要的连字 - 文本中没有任何标记,同时保持连字符完整。相反,要关闭*所有*连字,microtype(如下)可以在一个位置针对每种字体禁用它们。
字距调整
kern 调整特定的一对相邻字母之间的间隙 - 关闭或打开它,使间距看起来均匀。常见的示例是 AV、To、Wa 和 LT 等对,由于字母的倾斜和侧向,如果没有帮助,它们看起来就会间隙很大。 TeX 也会自动执行此操作。每种西方字体都会在其字体规格(pdfLaTeX 世界中的 .tfm 文件,或 OpenType 字体内部的表格)中提供一个字距调整对表 - “将这一对关闭这么多,打开那个”,然后 TeX 读取它来设置间距。
关键点:连字和字距调整在您的源代码中都是不可见的,并从字体规格中自动应用。您通常根本不需要考虑它们。只有当您想手动调整间隙时,您才需要使用 \kern 和明确的长度添加一个小空格(或一个负空格来收紧)。为了均匀地跟踪或间隔整个单词,不要分散您自己的 \kern — 使用 microtype 的 \textls(如下),这样可以保持连字符正常工作。
字间距、对齐和连字符
TeX 的设置特别漂亮的原因在于,它通过一次查看整个段落来选择换行符。 在许多文字处理器一次修复一行的情况下,TeX 使用 Knuth–Plass 算法 来评估断点的整个组合,并选择最小化跨段落的字间空间必须拉伸或收缩的划分。在此过程中,通过拉伸和收缩字间粘合来实现对齐,以使线条达到相同的宽度。
为了很好地打包行,TeX 使用特定于语言的连字符模式在音节边界自动对单词进行连字符。 关键的事实是 模式与语言相关: 按照英语规则打破德语或法语会给出错误的结果。因此,您可以使用babel(或polyglossia for LuaLaTeX/XeLaTeX)声明文档的语言,这会为其加载正确的模式。这是正确设置文本的先决条件,而不是装饰。
自动连字符很聪明,但可能会误判专有名词和技术术语。补救措施分为三个级别。 (1) 要使特定单词始终仅在选定的点处中断,请将其列在 \hyphenation{...} 的序言中,并用 - 标记允许的点(单词之间用空格分隔)。 (2) 对于一次性断点,请将 \-(一个 任意连字符)放在单词内 - 但请注意,添加 \- 意味着 该单词只能在此处中断。 (3) 要完全禁止中断单词,请将其包含在 \mbox{...} 中。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel} % load English hyphenation patterns
\hyphenation{FORTRAN manu-script data-base} % global exceptions
\begin{document}
We rewrote the man\-u\-script in \mbox{FORTRAN} overnight.
\end{document}您可以调整段落与两个声明的紧密程度。 \sloppy 容忍更宽的字间间距,以避免行超出边距(框过满),而 \fussy (默认)以更多溢出为代价保持严格的间距(“Overfull \hbox”警告)。要仅松开一个段落,请将其包装在 sloppypar 环境中。但\sloppy 往往会留下间隙线,因此重新修改措辞或添加单个\- 通常会产生更漂亮的结果。
用microtype 抛光
最后,明显提升西方排版的软件包是microtype。单行 \usepackage{microtype} 默认打开 pdfTeX 提供的两种微排版细化。一种是字符突出(页边距字距调整):行结束标点符号和圆形或倾斜字母(如 o 和 A)被推过右侧页边距,因此边缘看起来视觉上均匀。另一个是字体扩展:每行的字形都被拉伸或挤压了一点点(百分之几),接管了字间粘合的一些工作,并给出了一个更均匀、更紧密的段落。
除此之外,该软件包还提供 字间距调整、额外字距调整、可连字符的字母间距 (\textls{...}) 和禁用连字。 可用的功能 取决于引擎。 Protrusion 可与 pdfTeX、LuaTeX 和 XeTeX 配合使用;扩展仅适用于pdfTeX 和LuaTeX(不适用于XeTeX);禁用连字适用于 pdfTeX 和 LuaTeX。默认情况下,该软件包仅启用可以在您的引擎上安全运行的内容,因此无需任何选项加载它就足以启动。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype} % protrusion + expansion, on by default
\begin{document}
Long justified paragraphs look noticeably more even with microtype:
fewer rivers of white space, tidier right margins, and \textls{LETTERSPACED}
small caps when you ask for them.
\end{document}这些调整很微妙——乍一看并不明显——但在整个页面上,它们显示为更少的空白河流、更均匀的行结尾和更少的连字符。对于严肃的西方排版,添加 microtype 实际上是一个标准举措——几乎是强制性的质量升级。同样,这些效果适用于 西方(拉丁)文本。 日语有自己的排版模型,与突出和扩展不同,由 luatexja 等工具处理。
制作西方文本证明通过
即使在以日语为中心的手稿中,针对西方标题、参考书目条目、URL、名称和包名称的专用校对也使完成效果更加稳定。在该西方文本通道中,检查应抑制连字的专有名称、可能连字符的技术术语以及 microtype 之后保留的过满行。与段落规划不同的是,一旦文本基本确定,这项工作在接近尾声时效率最高。
- 专有名称:决定是否应在徽标或个人名称中抑制
ff和fi等连字,并仅在需要时在本地使用{}或\kern0pt将其断开。 - 技术术语: 添加
\hyphenation{...}或\-用于重复出现的长单词,这样您就不必手动修补每一行。 - 正文质量: 判断加载
\usepackage{microtype}后的段落。首先跳转到\sloppy通常会放宽间距。 - 日文排版:通过引擎和日文封装模型来调,而不是通过
microtype。