LaTeX/文本格式
本节将指导您了解文本格式化技术。格式化指的是大多数与外观相关的操作,包括文本样式和间距。格式化也可能指的是段落和页面布局,在这里我们将重点介绍单词和句子的自定义。
作者使用格式化技术来区分文本元素与其余文本。作者希望区分文本元素的多种方式导致了多种格式化技术。斜体字通常用于强调关键词或短语。脚注有助于提供额外信息或澄清,而不会打断文本的主线。出于这些原因,格式化非常重要。但是,也很容易滥用它,一个过度格式化的文档看起来和读起来可能比一个完全没有格式化的文档更糟糕。
LaTeX 非常灵活,实际上我们只会略作介绍,因为您可以根据需要对文档的呈现方式进行更多控制。话虽如此,LaTeX 的目的之一就是免除您自己处理物理呈现的压力,所以您不必太过在意!
间距
[edit | edit source]行间距
[edit | edit source]如果您想在文档中使用更大的行间距,可以通过将
\linespread{factor}
|
命令放在文档的前言中来更改它的值。使用 \linespread{1.3}
表示“一行半”行间距,使用 \linespread{1.6}
表示“双倍”行间距。通常情况下,行不会扩展,因此默认行扩展因子为 1。这在所有情况下可能并不理想:请参见 http://tex.stackexchange.com/questions/30073/why-is-the-linespread-factor-as-it-is 。
setspace 软件包允许更细粒度地控制行间距。要设置整个文档的“一行半”行间距,但在通常不需要的地方(例如脚注、标题)不设置,
\usepackage{setspace}
%\singlespacing
\onehalfspacing
%\doublespacing
%\setstretch{1.1}
|
要更改文档内的行间距,setspace软件包提供环境singlespace, onehalfspace, doublespace和spacing:
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 长度 中,但不建议更改它的值,因为它会对段落以外的其他类型的内容产生影响,从而导致不希望的结果。 |
不间断空格
[edit | edit source]这个必不可少的功能对于新手来说有点陌生,虽然它在大多数所见即所得的文档处理器中都可以使用。两个标记(例如单词、标点符号)之间的不间断空格会阻止处理器在它们之间插入换行符。此外,不间断空格不能被放大。这对一致的阅读非常重要。
LaTeX 使用“~”符号作为不间断空格。您通常会在某些语言的标点符号之间、在单位和货币之间、在首字母之间等等地方使用不间断空格。在法语排版中,您应该在所有两部分标点符号之前放一个不间断空格。
示例
D.~Knuth
EUR~50
|
句子间距 - 字词和句子之间的空格
[edit | edit source]为了在输出中获得一个直的右边界,LaTeX会在单词之间插入不同数量的空格。默认情况下,它遵循传统的排版实践,并在句末插入更多空格来帮助读者:一个 em-space 而不是一个词空格。这可以在打字机或电脑键盘上通过按两次而不是一次空格键来近似实现。在打字机发明之后,英语习惯是在句子之间按两次空格键(但在各种其他标点符号周围不这样做),而法语习惯是按一次空格键(但随后在各种其他标点符号周围再次按一次)。
在句末添加的额外空格在当前大众市场英语印刷中被认为是老式的排版风格。这种做法是在15世纪发现的,读者更喜欢它,并一直保持了15世纪到20世纪的标准。二战前后排版技术的改变鼓励大众市场出版商为了成本/利润原因越来越多地使用单倍行距,在 20 世纪 80 年代后期,当时创新的 Macintosh DTP 技术为芝加哥大学出版社重新引入和宣扬威廉·莫里斯在 19 世纪失败的尝试而创造了一个突然广阔的平台,该尝试将被拒绝的 15 世纪早期的紧密排版字体作为规范,但这次是针对没有行业或市场知识的人。“法式间距”在此时在美国(仅)被重新定义为一个贬义词,用来描述它的反义词:意思是句子之间的 em 间距而不是词间距。LaTeX 用户应该注意,唐纳德·克努特专门创建 TeX 来纠正他所描述的当时(70 年代,MacintoshDTP 之前)机器排版的丑陋和不可读性,他后来添加了 FrenchSpacing 选项,不是作为默认选项,而是作为一种需要冗长指定的选项,即原始 TeX 假设用户想要以读者为中心的排版(句子之间的 em 间距,而不是词间距),并且唐纳德·克努特明确地对 FrenchSpacing 选项进行了编码,以实现与当前芝加哥大学后排版人员所声明的含义完全相反,尽管他被“其他方面”认为是极其聪明和极其知情的)。大多数现代排版人员将句末空格与词间距相同。(例如,参见布林赫斯特的《排版风格要素》。)
可以使用以下命令禁用句末的额外空格
\frenchspacing
|
它告诉 LaTeX 在句点后不要插入比普通字符后更多的空格。可以在文档后面的其他地方使用 \nonfrenchspacing
命令关闭法式间距。
如果作者希望使用较宽的句子末尾间距,则必须谨慎操作,以防止标点符号被误解为句子的结尾。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 年清单:https://www.tug.org/TUGboat/tb33-1/tb103hyf.pdf)。
连字符提示存储在连字符命令发生时处于活动状态的语言中。这意味着,如果您将连字符命令放在文档的序言中,它将影响英语语言的连字符处理。如果您在\begin{document}
之后放置该命令,并且您正在使用某些用于国家语言支持的软件包(如 babel),则连字符提示将在通过 babel 激活的语言中处于活动状态。以下示例将允许对“hyphenation”进行连字符处理以及“Hyphenation”,并且它将阻止对“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}
|
|
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 中也用于撇号,没有问题。
对于左下引号和欧洲引号风格,您需要使用 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:[2]
\Large Not shelfful\\
but shelf{}ful
|
如果您使用的是 LuaLaTeX,可以使用selnolig 包来自动化其中的一些工作。
当斜杠字符/
紧接在文本之前和/或之后,且没有空格隔开时,LaTeX 不允许在斜杠和相邻文本之间换行。这种行为的实现是由于历史上文本中大多数斜杠出现的情况都是根据惯例将周围文本放在同一行上的情况。例如
- 日期,如“
1/1/2021
”。 - 单位的缩写,如“
mm/year
”。
日期和单位缩写相对较短,因此必须将它们保持在同一行上的约束不会造成问题。但是,/
字符也可能出现在更长的表达式中,这可能会在输出中产生“过满”错误,导致文本超出边距。在这些情况下,应该将/
字符替换为“\slash
”,这样如果需要,可以允许在斜杠标记之后“换行”。例如
- 用斜杠分隔的单词,如“input/output”,应该排版为“
input\slash output
”,或者 Yes/No/Cancel。(较短的例子,如 and/or 可以安全地保留为不允许换行。) - 使用斜杠作为分隔符的操作系统中的目录名称,如 /home/texlion/Documents,应该排版为“
/home\slash texlion\slash Documents
”。请注意,3 个斜杠中的第一个斜杠**不**被替换。
/
或者 \slash
之后的单词不会自动断字。这与断字下描述的带连字符的单词的非断字问题类似。在两个单词中同时实现换行和自动断字的一种方法是
input\slash\hspace{0pt}output
|
/
和 \slash
都可以与一个零宽度\hspace
一起使用,如下所示。\slash
包含一个惩罚,使在该位置换行不太可能。如果需要,这种组合可以被制成一个新的斜杠宏。 hyphenat 包含一个 \fshyp
,它会在斜杠之后添加一个连字符,例如“input/- output”,如果在该位置换行。
要更改字体系列、强调文本和其他与字体相关的问题,请参阅Fonts。
即使您可以轻松地使用这些命令更改字体的输出,您最好不要使用像这样的显式命令,因为它们与 LaTeX 的基本理念背道而驰,即分离文档的逻辑和视觉标记。这意味着,如果您在多个地方使用相同的字体更改命令来排版一种特殊的信息,您应该使用 \newcommand
来定义一个用于字体更改命令的“逻辑包装器命令”。
\newcommand{\oops}[1]{\textit{#1}}
Do not \oops{enter} this room,
it’s occupied by \oops{machines}
of unknown origin and purpose.
|
不要进入这个房间,它被机器占用,这些机器的来源和用途未知。 |
这种方法的优点是,您可以决定在某个稍后的阶段使用除 \textit
以外的其他视觉表示来表示危险,而无需浏览您的文档,识别所有 \textit
的出现,然后确定每个 \textit
是用来指出危险还是其他原因。
有关详细信息,请参阅Macros。
使用 \textsubscript{}
和 \textsuperscript{}
可以非常轻松地完成下标和上标。
\documentclass{article}
\begin{document}
Wombat\textsubscript{walzing}
Michelangelo was born on March 6\textsuperscript{th}, 1475.
\end{document}
|
注意:需要 2015 年或之后的 LaTeX 版本,或者 fixltx2e 包,才能在所有上下文中使用文本模式下标。[3]
许多排版人员更喜欢在数字与大写字母交织在一起时、出现在表格中以及出现在方程式中时使用标题数字,有时也称为排列数字,在其他地方使用文本数字。LaTeX 允许通过 \oldstylenums{}
命令实现这种用法。
\oldstylenums{1234567890}
|
有些字体没有内置文本数字;textcomp 包试图通过有效地从当前选择的字体生成文本数字来解决这个问题。在您的前言中放置 \usepackage{textcomp}
。 textcomp 还允许您在 \oldstylenums{}
中使用小数点、格式正确的美元符号等。
文本数字的一个常见用途是在节号、段落号和页码中。可以通过在前言中放置一些代码来将这些设置为使用文本数字
\usepackage{textcomp}
% Enclose everything in an \AtBeginDocument{}
\AtBeginDocument{%
% Make \section{} use text figures
\let\myTheSection\thesection
\renewcommand{\thesection}{ \oldstylenums{\myTheSection} }
% Make \paragraph{} use text figures
\let\myTheParagraph\theparagraph
\renewcommand{\theparagraph}{ \oldstylenums{\myTheParagraph} }
% Make the page numbers in text figures
\let\myThePage\thepage
\renewcommand{\thepage}{ \oldstylenums{\myThePage} }
}
|
如果您使用额外的分节或分段命令,您可以调整前面的代码列表,将它们也包含在内。
- 注意
后续使用 \pagenumbering
命令,例如 \pagenumbering{arabic}
,会将 \thepage
命令重置为原始值。因此,如果您在文档中使用 \pagenumbering
命令,请确保从上面的代码中重新定义您的 \myThePage definition
...
\tableofcontents
\pagenumbering{roman}
\chapter{Preface}
...
\chapter{Introduction}
...
\pagenumbering{arabic}
% without this, the \thepage command will not be in oldstyle (e.g., in your Table of Contents}
\renewcommand{\thepage}{ \oldstylenums{\myThePage} }
\Chapter{Foo}
...
|
LaTeX 知道四种破折号:连字符 (-),短破折号 (–),长破折号 (—) 或减号 (−)。您可以使用不同数量的连续破折号来访问其中的三种。第四个符号实际上根本不是破折号——它是数学减号
Hyphen: daughter-in-law, X-rated\\
En dash: pages 13--67\\
Em dash: yes---or no? \\
Minus sign: $0$, $1$ and $-1$
|
这些破折号的名称是:‘-’(-) 连字符,‘--’(–) 短破折号,‘---’(—) 长破折号和 ‘’(−) 减号。它们有不同的用途
输入 | 输出 | 用途 |
---|---|---|
- | - | 词间 |
-- | – | 页码范围,1–10 |
--- | — | 标点符号破折号——就像这样 |
$-$ | − | 减号 |
如果您希望 LaTeX 在行之间断开复合词,请使用 hyphenat 包中的 \hyp{}
宏,而不是连字符。
命令 \textendash
和 \textemdash
也分别用于生成短破折号 (–) 和长破折号 (—)。
三个点的序列被称为省略号,通常用于表示省略的文本。在打字机上,逗号或句号与任何其他字母占用相同的空间。在书籍印刷中,这些字符只占用很少的空间,并且与前面的字母非常靠近。因此,您不能通过只输入三个点来输入“省略号”,因为间距会出错。相反,有一个专门的命令用于这些点。它被称为 \ldots
Not like this ... but like this:\\
New York, Tokyo, Budapest, \ldots
|
或者,您可以使用 \textellipsis
命令,它允许点之间的间距变化。
有一些非常简单的 LaTeX 命令用于排版特殊文本字符串
- ↑ hyphenat 包文档,第 3 页
- ↑ 克努斯,唐纳德。 "第 5 章:分组"。 TeXbook。第 19 页。
- ↑ http://tex.stackexchange.com/questions/1013/how-to-typeset-subscript-in-usual-text-mode
此页面使用来自安迪·罗伯茨的 Getting to grips with LaTeX 的材料,经作者许可。