本节将指导你了解文本格式化技术。格式化指的是与外观相关的大多数内容,包括文本样式和间距。格式化还可能涉及段落和页面布局,在这里我们将重点关注单词和句子的自定义。

作家使用格式化技术来区分文本元素与正文的其他部分。作家希望区分文本元素的多种方式促生了许多格式化技术。斜体通常用来强调关键词或短语。脚注对于提供额外息或澄清而不打断文本的主要流程非常有用。正因如此,格式化非常重要。然而,格式化也很容易被滥用,过度格式化的文档可能看起来和阅读起来比完全不格式化的文档更糟。

LaTeX 非常灵活,实际上我们这里只是略过表面,因为如果你愿意,你可以更好地控制文档的排版。但话虽如此,LaTeX 的其中一个目的就是减轻你自己处理物理排版的压力,因此你不必过于沉迷于此!

间距

行间距

如果你想在文档中使用更大的行间距,可以通过在文档的前言部分添加以下命令来更改其值:

\linespread{factor}

使用 \linespread{1.3} 来实现“1.5倍”行间距,使用 \linespread{1.6} 来实现“双倍”行间距。通常,行距是没有调整的,因此默认的行距因子是 1。这在所有情况下可能并不理想:可以查看 这里 以获取更多息。

setspace 包允许对行间距进行更细粒度的控制。如果你希望在整个文档中设置“1.5倍”行间距,但又不希望在通常不需要的地方(例如脚注、标题等)使用,可以这样做:

\usepackage{setspace}
%\singlespacing
\onehalfspacing
%\doublespacing
%\setstretch{1.1}

要在文档中更改行间距,setspace 包提供了 singlespaceonehalfspacedoublespacespacing 环境:

This paragraph has \\ default \\ line spacing.
 
\begin{doublespace}
  This paragraph has \\ double \\ line spacing.
\end{doublespace}
 
\begin{spacing}{2.5}
  This paragraph has \\ huge gaps \\ between lines.
\end{spacing}

行间距的值包含在 \baselineskip 长度中,但不建议更改其值,因为这将影响其他类型的内容(如段落),从而产生不希望的效果。

不间断空格

这一基本功能对新手来说可能有些不熟悉,尽管它在大多数所见即所得(WYSIWYG)文档处理器中都可以使用。不间断空格在两个符号(如单词、标点符号)之间插入时,防止处理器在它们之间插入换行符。此外,不间断空格无法放大。它对于一致的阅读非常重要。

LaTeX 使用 ~ 符号作为不间断空格。你通常会在某些语言的标点符号之间、单位和货币符号之间、首字母缩略词等情况下使用不间断空格。在法语排版中,所有双部分标点符号前面都会插入不间断空格。

例如:

D.~Knuth
EUR~50

句间空格——单词和句子之间的空格

为了在输出中获得一个整齐的右边距,LaTeX 会在单词之间插入不同量的空格。默认情况下,它遵循传统的排版惯例,在句末插入更多空格,以帮助读者:使用的是 em 空格而不是单词空格。在打字机或计算机键盘上,可以通过按下两次空格键来模拟这个效果,而不是按一次。打字机发明之后,英语的做法是在句子之间按两次空格(但不在各种其他标点符号周围),而法语的做法是在句子之间按一次空格(但在一些其他标点符号周围也按一次空格)。

句末添加的额外空格如今在当前的英语大宗印刷中被认为是排版上过时的做法。这一做法在十五世纪被发现有助于读者阅读,并且在十五到二十世纪期间一直是标准做法。二战期间排版技术的变革促使大众出版商出于成本/利润的原因越来越多地使用单倍行距,而在1980年代末期,创新的Macintosh桌面排版技术为芝加哥大学出版社提供了一个广泛的平台,用于重新引入并宣扬威廉·莫里斯十九世纪未能成功推广的、拒绝接受的早期十五世纪紧凑排版作为规范,但这一次是向没有行业或市场知识的人群推广。“法式空格”在美国(仅限)被重新定义为一个贬义术语,用来描述其相反的含义:指句子之间使用的是em空格而不是单词空格。LaTeX 用户应注意,Donald Knuth 创建 TeX 是为了纠正他所描述的当时(70年代,Macintosh桌面排版前)机器排版的丑陋和难读性,后来他添加了 FrenchSpacing 选项,并没有将其设置为默认,而是作为一个长时间指定的选项,也就是说,原始的 TeX 假设用户想要以读者为中心的排版(句子之间使用 em 空格而不是单词空格),而 Donald Knuth 明确编码了 FrenchSpacing 选项来实现与当前芝加哥大学出版社后来的排版标准相反的效果,尽管他被认为是非常聪明且息极其丰富的。大多数现代排版师将句末的空格与单词之间的空格视为相同。(例如,参见 Bringhurst 的《排版风格要素》)。

句点后面附加的空格可以通过以下命令禁用:

\frenchspacing

该命令告诉 LaTeX 在句点后不插入比普通字符更多的空格。可以通过 \nonfrenchspacing 命令在文档的后面关闭 FrenchSpacing。

如果作者希望使用更宽的句末空格,必须小心,以避免标点符号被误解为句子的结尾。TeX 假设句子以句点、问号或感叹号结尾。尽管如此,如果句点后跟大写字母,TeX 不会将其视为句子的结尾,因为大写字母后的句点通常出现在缩写中。任何与这些假设不符的情况必须由作者指定。在空格前添加反斜杠会生成不会被放大的空格。波浪线 ~ 字符生成不间断空格。句点前的 \@ 命令指定即使它后跟大写字母,这个句点也终结一个句子。(如果你使用了 \frenchspacing,那么不需要指定这些例外情况。)

拉伸空格

你可以在一行中使用 \hfill 插入一个水平拉伸空格,以便将其余部分“推”向右边距。例如,这在页眉中可能很有用:

Author Name \hfill \today

类似地,你可以使用 \vfill 插入垂直拉伸空格,这对于特殊页面可能很有用:

\maketitle
\vfill
\tableofcontents
\clearpage
\section{My first section}
% ...

有关更多细节,请参见“长度”部分。

手动间距

单词和句子之间、段落之间、小节和章节之间的间距由 LaTeX 自动确定。手动插入空格违反了 LaTeX 的哲学,通常会导致格式错误。手动间距通常通过宏编写和包创建来实现。

有关更多详细息,请参见“长度”部分。

连字符

LaTeX 会在必要时自动对单词进行连字符处理。连字符规则会因语言不同而有所变化。默认情况下,LaTeX 只支持英语,因此如果你希望为所需语言设置正确的连字符规则,请参阅“国际化”部分。

如果连字符算法无法找到正确的连字符位置,你可以使用以下命令来告诉 TeX 这个例外情况。命令:

\hyphenation{word list}

使得命令参数中列出的单词(用空格分隔)仅在标有“-”的位置进行连字符处理。命令的参数应仅包含由常规字母构成的单词,或者是 LaTeX 认为是常规字母的字符。众所周知,连字符算法没有找到所有正确的美式英语连字符位置。已知例外的日志会定期在 TUGboat 期刊中发布。(2012 年的列表:链接)。

连字符提示会为激活时的语言存储。这意味着,如果你将 \hyphenation 命令放在文档的前言部分,它将影响英语语言的连字符处理。如果你在 \begin{document} 之后放置命令,并且使用了像 babel 这样的语言支持包,那么连字符提示将根据 babel 激活的语言生效。以下示例将允许将“hyphenation”连字符化为“Hy-phen-a-tion”,并防止“FORTRAN”、“Fortran”和“fortran”进行连字符处理。命令的参数中不允许使用特殊字符或符号。例如:

\hyphenation{FORTRAN Hy-phen-a-tion}

使用 babel 时,设置连字符例外的推荐命令是 \babelhyphenation。当使用 LuaTeX 时,babel 还允许添加新模式并修改现有模式(使用 \babelpatterns),以及定义非标准规则(例如在某些语言中将 'ff' 转换为 'ff-f',或对连字符进行排序)而不需要显式标记(使用 \babelposthyphenation)。

命令 \- 会在单词中插入一个自由连字符。这也成为这个单词中唯一允许连字符的位置。这个命令对于包含特殊字符(例如带有重音符号的字符)的单词尤其有用,因为 LaTeX 不会自动对包含特殊字符的单词进行连字符处理。

\begin{minipage}{2in}
I think this is: su\-per\-cal\-%
i\-frag\-i\-lis\-tic\-ex\-pi\-%
al\-i\-do\-cious
\end{minipage}
I think this is: supercalifragi-
listicexpialidocious
{\displaystyle {\begin{array}{l}{\mbox{I think this is: supercalifragi-}}\\{\mbox{listicexpialidocious}}\end{array}}}

LaTeX 不会自动对包含连字符(-)的复合词进行连字符处理[1]。有两个包可以恢复这种灵活性。hyphenat 包提供了 \hyp 命令。该命令排版连字符,然后对构成的单词进行自动连字符处理。在加载此包后:

\usepackage{hyphenat}

应使用以下语法,而不是 electromagnetic-endioscopy

electromagnetic\hyp{}endioscopy

extdash 包还提供了控制包含连字符的复合词的连字符处理功能——与单词本身的处理不同,后者仍然交给 LaTeX 处理。启用 shortcuts 选项可以简化语法:

\usepackage[shortcuts]{extdash}

典型的用法如下,假设使用简化语法。在这两种情况下,LaTeX 都可以断开并对构成的单词进行连字符处理,但在后一种情况下,它不会在 L 后面断开:

electromagnetic\-/endioscopy
L\=/approximation

可以使用标准的 LaTeX 命令将一个或多个单词保持在同一行上:

\mbox{text}

这可以防止连字符,并确保其参数在所有情况下保持在一起。例如:

My phone number will change soon. It will be \mbox{0116 291 2319}.

\fbox 类似于 \mbox,但除了围绕内容绘制一个可见的框外,效果相同。

为了完全避免连字符,可以将连字符的惩罚值设置为极高值:

\hyphenpenalty=100000

你可以通过改变 \tolerance=1000\hyphenpenalty=1000 的值来改变 LaTeX 的连字符处理程度。你需要通过实验不同的值来达到所需效果。一个低容忍值的文档将导致 LaTeX 不容忍单词间不均匀的空格,从而比高容忍度的文档更频繁地进行单词连字符。还要注意,增加文本宽度将减少出现不当连字符的概率。例如,添加:

\usepackage{geometry}

将会增加文本宽度并减少页边距溢出的数量。

引号

LaTeX 将左引号和右引号视为不同的实体。对于单引号,使用反引号()表示左引号(在美式键盘上,这个符号位于波浪号键上,通常与数字 1 键相邻),而使用撇号(')表示右引号。对于双引号,只需将符号重复两次,LaTeX 会相应地解释它们。(不要使用 " 来表示右双引号:当 babel 包用于某些语言(如德语)时," 被重新定义为产生变音符号;使用 " 来表示右双引号会导致排版问题或被用来产生变音符号)。在英国键盘上,反引号()位于 1 键的左侧,与符号 ¬ 共享这个键,有时也与符号 ¦ 或 | 共享。撇号(')位于冒号/分号键的右侧,与 @ 符号共享。

在 LaTeX 中输入“引用”:

To `quote' in LaTeX

在 LaTeX 中输入“引用”:

To ``quote'' in LaTeX

在 LaTeX 中输入“引用”:

To ``quote" in LaTeX

在 LaTeX 中输入“引用”:

To ,,quote'' in LaTeX
,,German quotation marks``
<<French quotation marks>>
``Please press the `x' key.''
,,Proszę, naciśnij klawisz <<x>>''.

右引号在 LaTeX 中也可以无问题地用作撇号。

对于左下引号和欧洲排版风格,你需要启用 T1 字体编码:

\usepackage[T1]{fontenc}

有关字体编码的更多详细息,请参阅“字体”部分。

csquotes 包为引号提供了多语言解决方案,并与 BibTeX 提供的引用机制集成。此包允许你根据 babel 语言选择自动切换语言和引用样式。

重音符号和变音符号

大多数重音符号和变音符号可以通过正确配置前言部分直接在键盘上输入。对于键盘上不可用的符号,变音符号可以通过在需要变音符号的字母前放置特殊的转义元字符来添加。

有关特殊字符,请参见“特殊字符”部分。

边距错位

一些非常长的单词、数字或 URL 可能无法正确地进行连字符处理,导致它们超出边距。解决此问题的一种方法是使用 sloppypar 环境,它告诉 LaTeX 调整单词间距的严格度。因此,单词之间的一些空格可能会稍微过大,但长单词将会正确排版。

This is a paragraph with
a very long word ABCDEFGHIJKLMNOPRST;
then we have another bad thing
--- a long number 1234567890123456789.
\begin{sloppypar}
This is a paragraph with
a very long word ABCDEFGHIJKLMNOPRST;
then we have another bad thing
--- a long number 1234567890123456789.
\end{sloppypar}

另一种解决方法是编辑文本,避免出现接近边距的长单词、数字或 URL。

连字

某些字母组合不是简单地依次排布不同的字母,而是使用特殊符号(如 "ff"),称为连字。通过插入 {}{ \kern0pt },可以禁止连字,尤其是在两个字母之间。这在由两个单词构成的词中可能是必要的。一个经典的例子是 shelfful

\Large Not shelfful\\
but shelf{}ful

如果你使用 LuaLaTeX,你可以通过 selnolig 包自动化一些工作。

斜杠符号

当斜杠字符 / 紧接着文本且没有空格时,LaTeX 不允许在斜杠和相邻文本之间发生换行。这一行为被实现是因为历史上,文本中的斜杠大多用于将周围的文本保持在同一行。例如:

  • 日期,如 "1/1/2021"。

  • 单位缩写,如 "mm/year"。

这些日期和单位缩写相对较短,因此要求它们保持在同一行上并不会造成问题。然而,斜杠字符也可能出现在较长的表达式中,这可能会在输出中造成“溢出”错误,导致文本超出边距。在这种情况下,斜杠应替换为 \slash,这允许在需要时在斜杠后进行换行。例如:

Words separated by slashes, such as "input/output" which should be typeset as "input\slash output", or Yes/No/Cancel.

对于操作系统中使用斜杠作为分隔符的目录名,如 /home/texlion/Documents,应将其排版为 "/home\slash texlion\slash Documents"。注意,三个斜杠中的第一个不被替换。

斜杠或 \slash 后的单词不会自动进行连字符处理。这与前述的连字符问题类似。要在两个单词之间既实现换行又进行自动连字符,可以使用:

input\slash\hspace{0pt}output

/\slash 可以与零长度\hspace 一起使用。\slash 包含一个惩罚,使得换行后不太可能发生。这个组合如果需要,可以创建一个新的斜杠宏。hyphenat 包包括一个 \fshyp,它会在斜杠后添加连字符,如 "input/- output",如果该行在此处换行。

字体

要更改字体系列、强调文本和其他与字体相关的问题,请参阅“字体”部分。

格式化宏

即使你可以轻松地使用这些命令更改字体输出,最好不要使用像这样显式的命令,因为它们与 LaTeX 的基本理念相悖——即将文档的逻辑和视觉标记分离。这意味着,如果你在多个地方使用相同的字体更改命令来排版一种特殊类型的息,应该使用 \newcommand 来为字体更改命令定义一个“逻辑包装命令”。

\newcommand{\oops}[1]{\textit{#1}}

Do not \oops{enter} this room,
it’s occupied by \oops{machines}
of unknown origin and purpose.

这段代码的输出会是:

Do not enter this room, it’s occupied by machines of unknown origin and purpose.

这种方法的优势在于,你可以在以后决定使用某种不同的视觉表示来表达危险,而无需遍历整个文档,识别所有的 \textit 并逐一判断它们是否用于表示危险,或者用于其他目的。

有关更多详细息,请参阅“宏”部分。

文本模式下的上标和下标

在 LaTeX 中,使用 \textsubscript{}\textsuperscript{} 可以非常容易地添加下标和上标。

\documentclass{article}
\begin{document}
Wombat\textsubscript{walzing}

Michelangelo was born on March 6\textsuperscript{th}, 1475.
\end{document}

注意:需要使用 2015 年或以后的 LaTeX 版本,或 fixltx2e 包,才能在所有上下文中使用文本模式下的下标。

文本数字(“旧式”数字)

息: 当使用支持它们的 OpenType 字体时,文本数字也可以通过 fontspec 包启用和禁用。参见“字体”部分。许多排版师在数字与全大写字母混排时,在表格中以及在公式中使用标题数字(有时称为排版数字),而在其他地方使用文本数字。LaTeX 允许通过 \oldstylenums{} 命令实现这种用法:

\oldstylenums{1234567890}

某些字体不内置文本数字;textcomp 包通过有效地从当前选择的字体生成文本数字来尝试解决这个问题。请在前言部分添加:

\usepackage{textcomp}

textcomp 还允许你在 \oldstylenums{} 中使用十进制点、正确格式的美元符号等。

文本数字的一个常见用途是用于章节、段落和页码。你可以通过在前言部分添加一些代码来设置它们使用文本数字:

\usepackage{textcomp}

% 在 \AtBeginDocument{} 中包含所有内容
\AtBeginDocument{%
  % 使 \section{} 使用文本数字
  \let\myTheSection\thesection
  \renewcommand{\thesection}{ \oldstylenums{\myTheSection} }

  % 使 \paragraph{} 使用文本数字
  \let\myTheParagraph\theparagraph
  \renewcommand{\theparagraph}{ \oldstylenums{\myTheParagraph} }

  % 使页码使用文本数字
  \let\myThePage\thepage
  \renewcommand{\thepage}{ \oldstylenums{\myThePage} }
}

如果你使用了额外的章节或段落命令,你可以根据需要调整之前的代码,以包括它们。

注意:

如果在文档中使用了 \pagenumbering 命令(例如,\pagenumbering{arabic}),它会将 \thepage 命令重置为原始设置。因此,如果你在文档中使用 \pagenumbering 命令,务必重新定义 \myThePage,如下所示:

...
\tableofcontents
\pagenumbering{roman}
\chapter{Preface}
...
\chapter{Introduction}
...
\pagenumbering{arabic}
% 如果没有这一行,\thepage 命令将在目录中不使用旧式数字
\renewcommand{\thepage}{ \oldstylenums{\myThePage} }
\Chapter{Foo}
...

连字符和破折号

LaTeX 知道四种连字符:短横线(-)、中破折号(–)、长破折号(—)和减号(−)。你可以通过连续的破折号数量来访问其中的三种。第四个符号实际上根本不是破折号——它是数学减号:

  • 连字符:daughter-in-law, X-rated

  • 中破折号:pages 13--67

  • 长破折号:yes---or no?

  • 减号:$0$, $1$ 和 $-1$

这些破折号的名称分别是:‘-’(连字符),‘--’(中破折号),‘---’(长破折号)和‘−’(减号)。它们有不同的用途:

输入 输出 用途
- - 单词之间
-- 页码范围,1–10
--- 标点破折号——像这样
$-$ 减号

如果你希望 LaTeX 在行间断开复合词,使用 hyphenat 包中的 \hyp{} 宏来代替连字符。

\textendash\textemdash 命令分别用于生成中破折号(–)和长破折号(—)。

省略号(…)

三个点的序列被称为省略号,通常用来表示省略的文本。在打字机上,逗号或句号占用的空间与其他字母一样。然而,在书籍排版中,这些字符占用的空间很少,并且与前面的字母非常接近。因此,你不能通过简单地输入三个点来输入“省略号”,因为空格会不正确。相反,省略号有一个专门的命令,叫做 \ldots

Not like this ... but like this:\\
New York, Tokyo, Budapest, \ldots

另外,你可以使用 \textellipsis 命令,它允许点之间的空隙变化。

现成的字符串

LaTeX 提供了一些非常简单的命令,用于排版特殊的文本字符串:

剪贴板 待做:描述 microtype 包——悬挂标点符号、字体扩展、附加的字间距调整。

注释和参考文献

本页面使用了 Andy Roberts 的《Getting to grips with LaTeX》中的材料,并得到了作者的许可。


Last modified: Sunday, 20 April 2025, 10:30 AM