LaTeX
在学术写作中,修改段落格式通常是不必要的。它主要用于排版浮动元素中的文本或处理更为复杂的文档。
段落对齐
LaTeX 中的段落通常是两端对齐的,即与左右边距对齐。如果出于某种原因,你希望修改段落的对齐方式,可以使用三种环境,并且也有相应的 LaTeX 命令。
对齐方式 | 环境 | 命令 |
---|---|---|
左对齐 | flushleft |
\raggedright |
右对齐 | flushright |
\raggedleft |
居中对齐 | center |
\centering |
在指定环境的 \begin
和 \end
之间的所有文本将被适当地对齐。列出的命令适用于其他环境。例如,在 tabular
环境中的段落列中。
在标准的 LaTeX 中,没有显式设置完全对齐的命令。这意味着如果你没有将上述三种命令包围在一个组中,文档的其余部分会受到影响。因此,正确的做法是:
{\raggedleft Some text flushed right.}
然而,如果你真的需要局部禁用上述命令(例如,因为必须使用某些损坏的包),你可以使用来自 ragged2e
包的 \justifying
命令。
段落缩进
默认情况下,标题后的第一个段落不进行缩进,这遵循了标准的英美出版商习惯。后续段落的缩进量由一个名为 \parindent
的参数决定。这个常量的默认长度由你使用的文档类设置。你可以通过使用 \setlength
命令来覆盖它,这将把段落缩进设置为 1cm:
\setlength{\parindent}{1cm} % 默认值是 15pt。
在 LaTeX 中,空白也可以变得灵活(Lamport 称之为“橡胶长度”)。这意味着,像段落前插入的额外垂直空白 \parskip
这样的值可以有一个默认尺寸,再加上一些扩展和收缩的量。这对于复杂文档中的页面非常有用,因为并非每一页都是精确固定高度的,所以垂直空间的增减是有益的。你可以通过以下方式指定这一点:
\setlength{\parskip}{1cm plus 4mm minus 3mm}
如果你想要缩进一个本来不缩进的段落,可以在段落开始时使用:
\indent
显然,这只有在 \parindent
不为零时才有效。如果你想要缩进每个章节的开始,可以使用 indentfirst
包:加载后,任何章节/小节的开始部分都会按照常规段落缩进。
要创建一个不缩进的段落,可以使用:
\noindent
这是当你开始一个文档时不使用章节命令时非常有用。
然而,如果你决定将缩进设置为零,那么你需要在段落之间加入垂直空白,以便使它们清晰可见。段落之间的空白由 \parskip
控制,可以像上面一样进行修改。不过,这个参数在其他地方也会用到,例如在列表中,这意味着修改这个设置可能会导致文档的其他部分看起来很不整齐。如果你希望使用没有缩进并在段落之间加空白的风格,可以使用 parskip
包,它会为你做这些调整,同时调整列表和其他使用段落间距的结构的间距,以防它们之间的间距过大。如果你想要既有缩进又有段落之间的空白,可以使用:
\usepackage{parskip}
\setlength{\parindent}{15pt}
段落的后续行缩进
要缩进段落的后续行,可以使用 TeX 命令 \hangindent
。默认情况下,悬挂缩进应用于第一行之后,但你可以通过 \hangafter
命令来更改这一行为。以下是一个示例:
\hangindent=0.7cm This paragraph has an extra indentation at the left.
TeX 命令 \leftskip
和 \rightskip
可以分别为每一行的左侧和右侧添加额外的空白,使得后续段落的格式与整体文档边距不同。这些空白会加在由 \parindent
和 \hangindent
添加的缩进之外。
改变段落最后一行的缩进
要改变段落最后一行的缩进,可以使用 TeX 命令 \parfillskip
。
段落换行
默认的 \paragraph
样式可能看起来有些奇怪,因为它会把接下来的文本排在标题旁边。如果你不喜欢这种方式,可以使用除了传统的 article
或 book
以外的类,或者使用 ConTeXt 或 PlainTeX。修改正在使用的类并不是 LaTeX 的推荐用法,这可能会导致许多令人沮丧的问题。
无论如何,我们来分析一下这个问题。如果你通过 \\
添加一个手动换行,LaTeX 会抱怨:
There's no line here to end.
只需添加一个空格即可解决问题:
\paragraph{Title} \hspace{0pt} \\
Text...
或者,你可以使用一个更简洁但不完全等价的语法:
\paragraph{Title} ~\\
Text...
在上面的临时方法中,你也可以用 ${}$
(空的内联数学表达式)替换 \hspace{0pt}
或 ~
。
行间距
要改变整个文档的行间距,可以使用 \linespread
命令,详见“文本格式化”部分。
或者,你也可以使用 \usepackage{setspace}
包,这也在“文本格式化”部分有介绍。此包提供了 \doublespacing
、\onehalfspacing
、\singlespacing
和 \setstretch{baselinestretch}
命令,这些命令将设置所有章节和段落的行间距,直到使用另一个命令覆盖它们。此外,包还提供了以下环境,以便仅在文档内的特定位置更改行间距,而不影响整个文档:
-
doublespace
:双倍行距; -
onehalfspace
:1.5倍行距; -
singlespace
:正常行距; -
spacing
:可自定义的行间距,例如:\begin{spacing}{\baselinestretch} ... \end{spacing}
。
有关如何在列表中更改行间距的信息,请参见自定义列表部分。
手动换行
LaTeX 会自动处理格式化和换行。你应该尽量避免手动换行,因为这可能会导致格式问题。
控制换行应留给宏和包的编写者。下面是一个简易参考:
-
\newline
:在命令的位置强制换行; -
\\
:在命令的位置强制换行;通常是前一个命令的简写,但在某些环境下,LaTeX 会重新定义它; -
\\[extra-space]
:命令\\
有一个可选参数,指定在下一行之前插入的额外垂直空白量。这个量可以是负值; -
\\*
:在命令的位置强制换行,并禁止在强制换行后进行分页。这个命令也具有可选的垂直空白参数; -
\linebreak[number]
:在命令的位置强制换行。提供的数字参数表示命令的优先级,范围从 0(允许换行,但不强制)到 4(无论如何强制换行)。LaTeX 会尽量生成最佳的换行。如果不能,它会根据你提供的优先级决定是否包含换行; -
\break (TeX)
:如果在横向模式下使用,这相当于\linebreak
;如果在纵向模式下使用,它相当于\pagebreak
; -
\par (TeX)
:结束当前段落。相当于在输入中留下一个空行。
如果你在章节标题中使用这些命令来进行换行,目录中的该标题也会被换行。为了避免这种拆分,可以使用 \section[]{}
命令,详细信息请参见章节命令部分。
关于页面换行,请参见“页面布局”部分。有关段落之间手动空白(如 \bigskip
)的更多详细信息,请参见“长度”部分。
特殊段落
原样文本
有几种方式可以引入编译器不会解释的文本。如果使用 verbatim
环境,begin
和 end
命令之间的所有输入都会被像打字机一样处理。所有的空格和换行都会按原样复制,且文本会以适当的固定宽度字体显示。任何 LaTeX 命令都会被忽略,并作为普通文本处理。这对于排版程序源代码非常理想。以下是一个示例:
\begin{verbatim}
The verbatim environment
simply reproduces every
character you input,
including all s p a c e s!
\end{verbatim}
注意:进入 verbatim
环境后,唯一被识别的命令是 \end{verbatim}
。其他命令都会被输出。你可以在 \begin{verbatim}
前放置一个字体大小命令来调整 verbatim
环境中的字体大小。如果这造成问题,可以改用 alltt
包,它提供一个具有相同名称的环境:
\begin{alltt}
Verbatim extended with the ability
to use normal commands. Therefore, it
is possible to \emph{emphasize} words in
this environment, for example.
\end{alltt}
但记得在前言部分添加 \usepackage{alltt}
!在 alltt
环境中,你可以使用命令 \normalfont
恢复正常字体。要在 alltt
环境中写数学公式,可以使用 \( \)
来包围它们,而不是通常的 $
。
如果你在 alltt
环境中使用 \textbf{}
,请注意标准字体没有粗体的等宽字体。txtfonts
包提供了粗体字体:只需在 \usepackage{alltt}
后添加:
\renewcommand{\ttdefault}{txtt}
如果你只是想引入一个短的原样文本短语,且不需要使用整个环境,可以使用 \verb
命令:
\verb+my text+
\verb
后跟随的第一个字符是分隔符:在这里我们使用了 +
,但你可以使用任何字符,除了 *
。\verb
会原样输出其后的所有文本,直到找到下一个分隔符。例如,以下代码:
\verb;\textbf{Hi mate!};
将打印 \textbf{Hi mate!}
,忽略 \textbf
对文本的影响。
不过,你可以尝试使用 fancyvrb
包,它提供了一个 Verbatim
环境(注意大写字母),该环境允许你为原样文本添加边框、更改字体大小,甚至在 Verbatim
环境内部进行排版效果的处理。它还可以与 fancybox
包一起使用,添加参考行号(对于数据块或编程非常有用),甚至可以包括整个外部文件。
在 beamer
中使用 verbatim
时,框架需要标记为易碎的:\begin{frame}[fragile]
。
排版 URL
hyperref
或 url
包中的其中一个提供了 \url
命令,它可以正确地排版 URL,例如:
Go to \url{http://www.uni.edu/~myname/best-website-ever.html} for my website.
这将准确显示该 URL(类似于 \verb
命令),但 \url
命令还会在标点符号处执行无连字符换行(仅在 PDFLaTeX 中有效,在纯 LaTeX + dvips 中无效)。它专为 Web URL 设计,因此它理解其语法,并且只会在斜杠和句点处断开,不会在没有标点的单词中途断开。然而,请记住,URL 中不能包含空格,因此在 \url
参数中使用空格将导致失败,同样,使用其他非 URL 有效字符也会失败。
通过 hyperref
包使用此命令时,URL 在 PDF 文档中是“可点击”的,而仅使用 url
包时,它不会链接到 Web。如果使用 hyperref
包,并且想要去除 URL 周围的边框,可以在 \hypersetup{}
内插入 pdfborder = {0 0 0 0}
。(如果四个零不起作用,可以尝试 pdfborder = {0 0 0}
。)
你可以将以下代码放入前言部分来更改 URL 的样式,使其与正常字体相同:
\urlstyle{same}
另请参见“超链接”部分。
列表环境
这是由 moreverb
包提供的 verbatim
环境的扩展。它提供的额外功能是可以在文本旁边添加行号。命令是 \begin{listing}[step]{first line}
。强制的第一个行号参数是指定从哪个行开始编号。可选的 step
参数是设置编号行之间的步长(默认值为 1,这意味着每行都会编号)。
使用此环境时,记得在文档的前言部分添加:
\usepackage{moreverb}
多行注释
正如我们所看到的,LaTeX 唯一允许添加注释的方式是使用特殊字符 %
,它会注释掉该行剩余的部分。如果你想插入长注释或注释掉文档中的某部分内容以便稍后修改,这种方式会非常耗时,除非你使用自动化的编辑器。另一种方法是使用 verbatim
包,按惯例在前言部分加载:
\usepackage{verbatim}
(你也可以使用 comment
包替代)你可以使用一个叫做 comment
的环境,这会注释掉环境内的所有内容。以下是一个示例:
This is another
\begin{comment}
rather stupid,
but helpful
\end{comment}
example for embedding
comments in your document.
这将输出:
This is another example for embedding comments in your document.
请注意,这在复杂的环境中(如数学环境)无法正常工作。你可能会问,为什么要加载一个叫做 verbatim
的包来添加注释?答案很简单:注释文本会像 verbatim
文本一样被编译器处理,唯一的区别是 verbatim
文本被引入文档中,而注释则会被丢弃。
另外,你可以定义一个 \comment{}
命令,在文档的前言部分添加以下内容:
\newcommand{\comment}[1]{}
然后,要注释掉文本,只需像这样做:
\comment{This is a long comment and can extend over multiple lines, etc.} But it won't show.
但是,这种方法可能会在文档中产生不必要的空格,因此可以改用:
\newcommand{\comment}[2]{#2}
然后,如果你只提供一个参数给 \comment{}
,它会产生期望的效果而不会产生额外的空格。
另一个缺点是内容仍会被解析并可能展开,因此不能随意放入其中(例如 LaTeX 命令)。
跳过源代码的部分
一种更稳健的方式来让 TeX 引擎跳过源代码的某部分是使用 TeX 的 \iffalse
条件。典型用法如下:
This we want to keep
\iffalse % ----- START THE CUT ---------
But this part
$$\int_{-\infty}^\infty\mathrm{d}x\,x^{-2}$$
we want to skip
\fi % ---------- END THE CUT -----------
Here it begins again
This we want to keep
\iffalse
条件始终为假。
引用文本
LaTeX 提供了多个环境用于引用文本,它们有小的差别,适用于不同类型的引用。所有这些环境都将文本在两侧缩进,如果你需要,可以手动添加引号。提供的环境有:
-
quote
:用于短的引用或由空行分隔的小段引用; -
quotation
:用于较长的引用,通常超过一个段落,因为它会缩进每个段落的第一行; -
verse
:用于需要换行的重要引用,如诗歌。在此环境中,每个新节由一个空行分隔,新行在一个节内由换行命令\\
指定。如果一行超过一页,所有随后的行会缩进,直到显式用\\
分隔。
摘要
在科学出版物中,通常会从摘要开始,向读者提供对内容的快速概览。有关文档结构的更多信息,请参见“文档结构”部分。
注释和参考文献
本页面使用了 Andy Roberts 的《Getting to grips with LaTeX》中的材料,并得到了作者的许可。