本教程的目的

本教程旨在帮助你熟悉 LaTeX 的基础知识。

在开始之前,请确保你已经在计算机上安装了 LaTeX(有关所需安装的详细说明,请参见安装章节)。

我们将首先介绍 LaTeX 语法。 接着,我们将创建我们的第一个 LaTeX 文档。 然后,我们将指导你如何通过 LaTeX 系统处理该文件,以生成高质量的输出,如 PostScript 或 PDF。 最后,我们将了解文件名和文件类型。

LaTeX 语法

使用 LaTeX 时,你编写一个纯文本文件,描述文档的结构和排版。LaTeX 会将这些源文本与标记结合,转换为排版文档。为了类比,网页的工作方式类似:HTML 用来描述文档,浏览器将其渲染为屏幕输出,显示不同的颜色字体、大小等。

你可以使用任何文本编辑器创建 LaTeX 输入文件。一个最简单的示例如下所示(命令将在后面解释):

\documentclass{article}

\begin{document}
Hello world!
\end{document}

空格

LaTeX 会标准化其输入文件中的空格字符,因此空格或制表符等字符会统一视为一个空格。多个连续空格被视为一个空格,行首的空格通常会被忽略,一个换行也会产生一个空格。多个换行(空行)定义一个段落的结束。以下是这些规则应用的示例:左侧显示用户输入(.tex 文件),右侧显示渲染输出(.dvi、.pdf、.ps 文件)。

你输入一个或多个空格都没有关系:

enter one or several             spaces

一个空行开始一个新段落:

An empty line starts a new
paragraph.

保留字符

以下符号是 LaTeX 中的保留字符,它们要么有特殊的意义,要么在所有字体中都不可用。如果你直接在文本中输入这些字符,它们通常不会打印,而是会让 LaTeX 执行你不希望发生的操作。

# $ % ^ & _ { } ~ \

如你所见,通过在这些字符前添加反斜杠 \,你仍然可以在文档中使用它们:

\# \$ \% \^{} \& \_ \{ \} \~{} \textbackslash{}

在某些情况下,方括号 [ ] 也被视为保留字符,因为它们用于为某些命令提供可选参数。如果你想在某个命令后直接输出这些字符,如在这种情况中:\command [text],它会失败,因为 [text] 会被视为传递给 \command 的选项。你可以通过以下方式获得正确的输出:\command {} [text]

反斜杠字符 \ 不能通过在前面添加另一个反斜杠 \\ 来输入;这个序列用于换行。为了在数学模式中引入反斜杠,可以使用 \backslash

命令 \~\^ 分别生成波浪符和帽符,这些符号会放置在后面的字母上。例如,\~n 生成 ñ。这就是为什么你需要使用大括号来指定没有字母作为参数的情况。你也可以使用 \textasciitilde\textasciicircum 来输入这些字符,或者使用其他命令。

如果你想插入可能包含多个特殊符号的文本(如 URI),可以考虑使用 \verb 命令,稍后会在格式化章节中讨论。对于源代码,参见源代码列表。

小于 < 和大于 > 字符是唯一不会正确打印的可见 ASCII 字符(不是保留字符)。详见特殊字符部分,了解解释和解决方法。

对于大多数非 ASCII 字符(例如重音符号、变音符号),可以直接输入。但你必须正确配置文档。其他符号和更多字符可以通过特殊命令打印,例如在数学公式中或作为重音符号。我们将在特殊字符部分详细讨论这个问题。

LaTeX 组

有时某些状态应当保持局部有效,换句话说,其作用范围应当有限。这可以通过将需要局部改变的部分用大括号括起来来实现。在某些情况下,使用大括号将无法实现局部作用。LaTeX 提供了 \bgroup\egroup 来分别开始和结束一个组。

\documentclass{article}
\begin{document}
normal text {\itshape walzing \bfseries Wombat} more normal text

normal text \bgroup\itshape walzing \bfseries Wombat\egroup{} more normal text
\end{document}

环境隐式地形成一个组。


LaTeX 环境

在 LaTeX 中,环境的作用与命令类似,但它们通常会对文档的更大部分产生影响。它们的语法是:

\begin{environmentname}
text to be influenced
\end{environmentname}

\begin\end 之间,你可以放置其他命令和嵌套的环境。环境的内部机制定义了一个组,这使得它的使用是安全的(不会影响文档的其他部分)。一般来说,环境也可以接受参数,但这一特性不常用,因此将在文档的更高级部分讨论。

LaTeX 中的所有内容都可以通过命令和环境来表示。

LaTeX 命令

LaTeX 命令是区分大小写的,通常有以下两种格式:

  1. 它们以反斜杠 \ 开始,然后是由字母组成的命令名。

  2. 命令名以空格、数字或其他非字母字符为结束标志。

一些命令需要一个参数,该参数必须放在命令名后面的大括号 {} 中。有些命令支持可选参数,这些可选参数放在命令名后的方括号 [] 中。一般语法如下:

\commandname[option1,option2,...]{argument1}{argument2}...

许多 LaTeX 格式化命令是成对出现的:

  • 参数形式命令,其中一个参数是要格式化的文本。

  • 范围形式命令,格式化将应用于命令后的所有文本,直到当前作用域结束。也就是直到当前组或环境结束。此形式有时也称为切换命令。范围形式命令可能仍然有参数,但格式化的文本不是参数。此形式几乎不应在任何作用域外部调用,否则它将作用于文档的其余部分。

混淆参数形式命令和对应的范围形式命令是一个非常常见的错误!
参数形式命令的参数比其对应的范围形式命令多一个,额外的参数是命令作用的文本。

示例:

强调文本:\emph 是一个参数形式命令,带有一个参数,即要强调的文本。\em 是对应的范围形式命令,没有参数。

\emph{emphasized text}, this part is normal % 正确
{\em emphasized text}, this part is normal  % 正确

\emph emphasized text, this part is normal  % 错误:命令没有参数
\em{emphasized text}, this part is normal   % 错误:范围命令有参数
\em emphasized text, this part is normal    % 危险:在任何环境外部使用范围命令

为文本着色:此示例要求你使用 \usepackage{xcolor}\textcolor 是一个参数形式命令,带有两个参数:颜色和要着色的文本。\color 是对应的范围形式命令,只有一个参数,即颜色

By default, this text is black. \textcolor{red}{This is red text.} Back to black.

By default, this text is black. {\color{red}This is red text.} Back to black.

注释

当 LaTeX 在处理输入文件时遇到 % 字符时,它会忽略当前行的其余部分、换行符以及下一行开头的所有空白字符。

这可以用来在输入文件中写注释,这些注释不会显示在打印版本中。

This is an % stupid
% Better: instructive <----
example: Supercal%
            ifragilist%
icexpialidocious

我们的第一个文档

现在我们可以创建我们的第一个文档了。我们将创建一个最基本的示例,足以生成一些输出;“Hello World!”方法非常适合这里。

打开你喜欢的文本编辑器。vim、emacs、Notepad++ 等文本编辑器都可以帮助你编写文件,并且提供语法高亮功能。

复制以下文本到你的编辑器中。这是 LaTeX 源代码:

% hello.tex - Our first LaTeX example!
\documentclass{article}
\begin{document}
Hello World!
\end{document}

保存文件为 hello.tex

确保文件名使用 .tex 扩展名。


这意味着什么?

  • % hello.tex - Our first LaTeX example!:这一行是注释,因为它以百分号符号(%)开头;当 LaTeX 看到它时,会忽略这一行。注释对于标注源文件的某些部分非常有用。例如,你可以在注释中写上作者和日期的息,或者其他任何你希望添加的内容。

  • \documentclass{article}:这一行是一个命令,告诉 LaTeX 使用 article 文档类。文档类文件定义了排版的标准,在此例中是通用的文章格式。期刊、大学部门等可以提供这些文件,以确保符合出版标准。在许多情况下,相同的文档内容可以通过替换所需的文档类文件重新格式化,以便提交给不同的出版商。如果没有提供,可以选择许多通用的文档类文件。

  • \begin{document}:这一行开始了一个名为 document 的环境,告诉 LaTeX 文档内容即将开始。此命令之前的任何内容通常属于文档的前言部分。

  • Hello World!:这是唯一包含实际内容的行——我们希望在页面上显示的文本。

  • \end{document}:文档环境在这里结束,告诉 LaTeX 文档源代码已完成,之后的内容将被忽略。

如前所述,LaTeX 的每个命令都以反斜杠 \ 开始。这是 LaTeX 的标记方式,当它看到反斜杠时,就会期望接收到某些命令。注释不被视为命令,因为它们只是告诉 LaTeX 忽略该行。只要在百分号前没有空格,注释永远不会影响文档的输出。

构建文档

接下来,我们将输入文件提交给 LaTeX 引擎,这是一个生成最终文档的程序。

现代有多个 LaTeX 引擎:lualatexxelatexpdflatex。这三者之间有一些重要区别,但我们将在其他地方讨论它们——任何一个都能用于构建我们的第一个文档。

生成文档

LaTeX 本身没有图形用户界面(GUI),尽管某些 LaTeX 安装可能包含一个图形前端,你可以通过点击来编译输入文件。假设你没有使用这样的工具:

  1. 打开终端,并导航到包含 .tex 文件的目录。

  2. 输入命令:xelatex hello.tex(虽然 .tex 扩展名不是必须的,但你可以加上它)。

  3. 会显示关于 LaTeX 及其进度的各种息。如果一切顺利,控制台最后两行将显示:

    Output written on hello.pdf (1 page).
    Transcript written on hello.log.
    

    这意味着你的源文件已经被处理,生成的文档名为 hello.pdf。你可以使用系统上安装的任何 PDF 查看器来查看它。

由于文件的简洁性,这里只需要运行 LaTeX 命令一次。然而,如果你开始创建更复杂的文档,包括参考文献和交叉引用等,LaTeX 需要多次执行以解决引用问题。有关更多内容,将在之后的部分讨论。

自动构建系统

当你开始处理更复杂的文档时,编译可能变得非常棘手。有一些程序可以自动读取 LaTeX 文档,并运行相应的编译器多次。例如,latexmk 可以简单地从大多数 LaTeX 文件生成 PDF:

$ latexmk -pdf file.tex

请注意,大多数编辑器会为你处理这些任务。

历史版本的 LaTeX

LaTeX 和 TeX 创建的年代要早于可移植文档格式(PDF)的出现,因此,传统的 LaTeX 引擎 latex 会输出 DVI 格式,这是由 Donald Knuth 为设备无关的 TeX 输出设计的格式。虽然这种格式已经不再广泛使用,但你可以使用 LaTeX 发行版中的程序将其转换为更常见的输出格式:

  • dvips.dvi 文件转换为 .ps(PostScript)。

  • dvipdf.dvi 文件转换为 .pdfdvipdfm 是改进版)。

你还可以发现 Ghostscript,这是一个免费且开源的工具集,用于处理 PostScript 文件。它的 ps2pdf 可以将 .ps 文件转换为 .pdf,而 pdf2ps 则可以执行相反的操作。

LaTeX 源代码与可生成的格式之间的关系

下图展示了 LaTeX 源代码与可以从中生成的格式之间的关系:


框中的红色文本表示文件格式,箭头上的蓝色文本表示你需要使用的命令,框下的小深绿色文本表示支持的图像格式。每次你经过一个箭头时,你会丢失一些息,这可能会降低文档的功能性。因此,你应该选择最短的路径以达到目标格式。这可能是获取所需格式输出的最方便的方式。从 LaTeX 源代码开始,最佳方式是仅使用 latex 生成 DVI 输出,或者仅使用 pdflatex 生成 PDF 输出,只有在需要打印文档时才将其转换为 PostScript。

请注意,使用 latex 生成 DVI 输出将无法使用 PDF 特有的功能,例如超链接和嵌入字体

导出为其他格式》章节将详细讨论如何将 LaTeX 源代码导出为其他文件格式。


文件

选择合适的文件名

绝对不要使用包含空格的目录(文件夹)或文件名。虽然你的操作系统可能支持空格,但有些系统不支持,它们只会给 TeX 带来麻烦。文件名可以根据需要设置得短或长,但必须避免使用空格。尽量使用小写字母(不带重音符的 a-z)、数字 0-9、连字符(-),以及仅使用一个句点(.)来分隔文件扩展名(有点类似于好的 Web URL 命名规范):这将让你更容易在 Web 上引用 TeX 文件,并使你的文件更具可移植性。某些操作系统区分大小写字母,而有些则不区分。因此,最好避免混合使用大小写字母。

附加文件

TeX 编译器是单次处理的过程。这意味着编译器无法跳过文档中的某些部分,这对目录和引用来说是非常有用的。事实上,编译器无法预测特定章节将打印到哪一页,因此当目录在即将到来的章节之前被打印时,它无法设置页码。

为了解决这个问题,许多需要跳转的 LaTeX 命令使用附加文件,这些文件通常与当前文档有相同的文件名,但扩展名不同。它将临时数据存储到这些文件中,并在下一次编译时使用它们。因此,要保持目录的最新状态,你需要编译文档两次。如果没有章节移动,则无需重新编译。

例如,目录数据的临时文件是 filename.toc

这些文件中没有无法恢复的息。这意味着你可以安全地删除它们,重新编译时会自动重新生成它们。

LaTeX 中常见的文件扩展名

在使用 LaTeX 的各种功能(索引、词汇表、参考文献等)时,你很快会发现自己陷入了各种文件和扩展名的迷宫,可能还不清楚这些文件的作用。以下列表解释了在使用 TeX 时可能遇到的最常见文件类型:

  • .aux:一个传递息的文件,用于将一个编译过程的息传递到下一个过程。除了其他用途,.aux 文件用于存储与交叉引用相关的息。

  • .bbl:由 BiBTeX 输出的参考文献文件,并由 LaTeX 使用。

  • .bib:参考文献数据库文件(用于存储完整的参考文献引用列表)。

  • .blg:BiBTeX 日志文件(记录错误)。

  • .bst:BiBTeX 样式文件。

  • .cls:类文件定义文档的外观。通过 \documentclass 命令选择。

  • .dtx:文档化 TeX 文件,这是 LaTeX 样式文件的主要分发格式。如果你处理一个 .dtx 文件,你将得到包含在 .dtx 文件中的 LaTeX 宏代码的文档。

  • .ins:匹配 .dtx 文件的安装程序。如果你从网上下载 LaTeX 包,通常会得到一个 .dtx 文件和一个 .ins 文件。运行 LaTeX 来解压 .dtx 文件。

  • .fd字体描述文件,告诉 LaTeX 新字体的相关息。

  • .dvi:设备无关文件(Device Independent File)。这是使用 latex 编译的 LaTeX 编译过程的主要结果。你可以使用 DVI 预览程序查看它的内容,或者通过 dvips 或类似应用将其发送到打印机。

  • .pdf:可移植文档格式(Portable Document Format)。这是使用 pdflatex 编译的 LaTeX 编译过程的主要结果。你可以使用任何 PDF 查看器查看或打印它。

  • .log:记录上次编译过程的详细息。

  • .toc:存储所有章节标题。它将在下次编译过程中被读取,并用于生成目录。

  • .lof:类似于 .toc,但用于图表列表。

  • .lot:同样的功能,但用于表格列表。

  • .idx:如果文档包含索引,LaTeX 会将所有进入索引的单词存储在此文件中。使用 makeindex 处理该文件。

  • .ind:处理过的 .idx 文件,准备在下一次编译周期中包含到文档中。

  • .ilg:日志文件,记录 makeindex 做了什么。

  • .sty:LaTeX 宏包文件。你可以通过 \usepackage 命令将其加载到 LaTeX 文档中。

  • .tex:LaTeX 或 TeX 输入文件,可以使用 latex 编译。

  • .out:hyperref 包文件,仅适用于主文件。

那接下来呢?

常见元素

参见《文档结构》和《常见元素》部分,了解适用于每种文档类型的所有常见功能。

非英语文档和特殊字符

LaTeX 提供了一些优秀的功能来支持世界上大多数语言。你可以告诉 LaTeX 遵循目标语言的排版规则,简化特殊字符的输入,等等。详情请参见《特殊字符》和《国际化》。

模块化文档

参见《模块化文档》部分,了解如何将大型项目组织成多个文件的好建议。

问题和解决方法

如果你遇到关于基本功能的问题,或者想阅读一些基本建议,我们强烈建议你阅读常见问题解答(FAQ)。对于更具体的问题和解决方法,请参见《技巧与窍门》页面。

为了最高效的使用宏

LaTeX 的全部功能依赖于宏。它们使文档变得非常动态和灵活。请参阅专门的部分。

团队协作

参见《LaTeX 文档协作写作》章节。


Last modified: Sunday, 20 April 2025, 9:57 AM