LaTeX - (三)使用技巧
本文最后更新于:2025年8月11日 下午
有“强迫症”的浮动体
如何查找文档
在命令行中输入 texdoc <doc name>,比如想找 \(C\TeX\) 宏包的文档:texdoc ctex。
宏包
各种宏包的作用
- beamer: for presentations
- todonotes: comments and TODO management
- tikz: make amazing graphics
- pgfplots: create graphs in $$
- listings: source code printer for \(\LaTeX\)
- spreadtab: create spreadsheets in \(\LaTeX\)
- gchords, guitar: guitar chords and tabulature
- cwpuzzle: crossword puzzles
- geometry: 设置页面参数(页边距、页眉、页脚、纸张大小等)
- multicol: 在一个页面中分多栏
- fancyhdr: 改善页眉页脚样式的定义方式
- AMS-LaTeX: 数学公式amsmath包
- LaTeX公式.pdf (reformship.github.io) - 中文版数学公式速查手册
有关宏包的文档
- Examples - Equations, Formatting, TikZ, Packages and More - Overleaf, Online LaTeX Editor
- The CTAN archive (sustech.edu.cn) 基本上所有的宏包都能在这里和其他镜像站点找到
实用技巧
只查看出错的代码
使用工具宏包 syntonly,加载这个宏包之后,在导言区使用 \syntonly 命令,可以使得 \(\LaTeX\) 编译后不生成 DVI 或者 PDF 文档,只排查错误,编译速度会快不少:
1 | |
如果想生成文档,用 % 注释掉 syntonly 命令就可以。
优化代码环境
\(\LaTeX\) 原生支持代码环境 verbatim,verbatim 宏包优化了 verbatim 环境的内部命令,并提供了 \verbatiminput 命令用来直接读入文件生成代码环境。fancyvrb 宏包提供了可定制格式的 Verbatim 环境;listings 宏包更进一步,可生成关键字高亮的代码环境,支持各种程序设计语言的语法和关键字。
在 \(\LaTeX\) 中如何输出中文
使用 CTeX 宏集(首选)
以 UTF-8 编码保存,使用 XeLaTeX 编译:
1 | |
使用 xeCJK 宏包
使用XeLaTeX编译:
1 | |
此种方式适用于有特定文档类型的情况,如 beamer。
空格
不带花括号的命令后面如果想打印空格,要加上一对内部为空的花括号再键入空格,否则空格会被忽略。例如:
1 | |
引号
英文单引号不是使用两个 ‘ 符号组合,左单引号是重音符 ` (键盘上数字 1 左侧),而右单引号是常用的引号符。英文中,左双引号就是连续两个重音符。英文下的引号嵌套需要借助 \thinspace 命令分隔,比如:
1 | |
中文下的单引号和双引号可以用中文输入法直接输入。
破折号、省略号和短横
英文的短横分三种:
- 连字符:输入一个短横
- - 数字起止符:输入两个短横
– - 破折号:输入三个短横
---
中文的破折号和省略号可以直接使用日常的输入方式,但是英文的省略号使用 \ldots 而不是三个句点。
强调
\(\LaTeX\) 中专门有个叫做 \emph{} 的命令可以强调文本,对于通常的西文文本,上述命令的作用就是斜体,如果对一段已经这样转换成斜体的文本再使用这个命令,就会取消斜体,而成为正体。
西文中一般采用上述的斜体强调方式而不是粗体,例如在说明书名的时候可能就会使用这个命令。
下划线与删除线
不推荐 \(\LaTeX\) 原生提供的 \underline 命令,建议使用 ulem 宏包下的 \uline 命令代替,它还支持换行文本。ulem 宏包还提供了一些实用命令:
\uline{}下划线\uuline{}双下划线\dashuline{}虚下划线\dotuline{}点下划线\uwave{}波浪线\sout{}删除线\xout{}斜删除线
需要注意的是,ulem 宏包重定义了 \emph 命令,使得原来的加斜强调变成了下划线,原来的两次强调就取消强调变成了两次强调就双下划线。通过宏包的 normalem 选项可以取消这个更改:\usepackage[normalem]{ulem}。
数学环境
行间公式和行内公式
首先在导言区导入amsmath宏包,使用$...$插入行内公式,使用\[...\]插入不带编号行间公式,如果需要对行间公式进行编号,可以使用equation环境:
1 | |
虽然也有其他的方式实现上述的需求,但是相比之下,上面所使用的实现方式在语法上更为简洁,故采用。
行内公式也可以使用 \(...\) 或者 \begin{math} ... \end{math} 来插入,但略显麻烦。 无编号的行间公式也可以使用 \begin{displaymath} ... \end{displaymath} 或者 \begin{equation*} ... \end{equation*} 来插入,但略显麻烦。(equation* 中的 * 表示环境不编号),也有 plainTeX 风格的 $$ ... $$ 来插入不编号的行间公式。但是在 LaTeX 中这样做会改变行文的默认行间距,不推荐。
上下标
1 | |
行内公式和行间公式对标点的要求是不同的:行内公式的标点,应该放在数学模式的限定符之外,而行间公式则应该放在数学模式限定符之内。
在数学模式中,需要表示上标,可以使用 ^ 来实现(下标则是 _)。它默认只作用于之后的一个字符,如果想对连续的几个字符起作用,请将这些字符用花括号 {} 括起来,例如:
1 | |
效果展示: \[ z = r\cdot e^{2\pi i} \]
根式与分式
根式用 \sqrt{·} 来表示,分式用 \frac{·}{·} 来表示(第一个参数为分子,第二个为分母)。
1 | |
效果展示: \[ \sqrt{x}, \frac{1}{2} \]
可以发现,在行间公式和行内公式中,分式的输出效果是有差异的。如果要强制行内模式的分式显示为行间模式的大小,可以使用 \dfrac, 反之可以使用 \tfrac。
在行内写分式,你可能会喜欢
xfrac宏包提供的\sfrac命令的效果。
排版繁分式,你应该使用
\cfrac命令。
运算符
一些小的运算符,可以在数学模式下直接输入;另一些需要用控制序列生成,如
1 | |
效果展示: \[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\; \geq\; \leq\; \neq\; \approx \; \equiv \]
连加、连乘、极限、积分等大型运算符分别用 \sum, \prod, \lim, \int 生成。他们的上下标在行内公式中被压缩,以适应行高。我们可以用 \limits 和 \nolimits 来强制显式地指定是否压缩这些上下标。例如:
1 | |
效果展示: \[ \sum_{i=1}^n i\quad \prod_{i=1}^n \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \]
多重积分可以使用 \iint, \iiint, \iiiint, \idotsint 等命令输入。
1 | |
效果展示: \[ \iint\quad \iiint\quad \iiiint\quad \idotsint \]
定界符(括号等)
各种括号用 (), [], \{\}, \langle\rangle 等命令表示;注意花括号通常用来输入命令和环境的参数,所以在数学公式中它们前面要加 \。因为 LaTeX 中 | 和 \| 的应用过于随意,amsmath 宏包推荐用 \lvert\rvert 和 \lVert\rVert 取而代之。
为了调整这些定界符的大小,amsmath 宏包推荐使用 \big, \Big, \bigg, \Bigg 等一系列命令放在上述括号前面调整大小。
有时你可能会觉得 amsmath 宏包提供的定界符放大命令不太够用。通常这意味着你的公式太过复杂。此时你应当首先考虑将公式中的部分提出去,以字母符号代替以简化公式。如果你真的想要排版如此复杂的公式,可以参考这篇博文。
1 | |
效果展示: \[ \Biggl(\biggl(\Bigl(\bigl((x)\bigr)\Bigr)\biggr)\Biggr) \\ \Biggl[\biggl[\Bigl[\bigl[[x]\bigr]\Bigr]\biggr]\Biggr] \\ \Biggl \{\biggl \{\Bigl \{\bigl \{\{x\}\bigr \}\Bigr \}\biggr \}\Biggr\} \\ \Biggl\langle\biggl\langle\Bigl\langle\bigl\langle\langle x \rangle\bigr\rangle\Bigr\rangle\biggr\rangle\Biggr\rangle \\ \Biggl\lvert\biggl\lvert\Bigl\lvert\bigl\lvert\lvert x \rvert\bigr\rvert\Bigr\rvert\biggr\rvert\Biggr\rvert \\ \Biggl\lVert\biggl\lVert\Bigl\lVert\bigl\lVert\lVert x \rVert\bigr\rVert\Bigr\rVert\biggr\rVert\Biggr\rVert \]
省略号
略号用 \dots, \cdots, \vdots, \ddots 等命令表示。\dots 和 \cdots 的纵向位置不同,前者一般用于有下标的序列。
1 | |
效果展示: \[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad \vdots\quad \ddots \]
矩阵
amsmath 的 pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix 等环境可以在矩阵两边加上各种分隔符。
1 | |
效果展示: \[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad \begin{bmatrix} a&b\\c&d \end{bmatrix} \quad \begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad \begin{vmatrix} a&b\\c&d \end{vmatrix} \quad \begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]
使用 smallmatrix 环境,可以生成行内公式的小矩阵。
1 | |
效果展示: \[ \text{Marry has a little matrix } ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) . \]
多行公式
有的公式特别长,我们需要手动为他们换行;有几个公式是一组,我们需要将他们放在一起;还有些类似分段函数,我们需要给它加上一个左边的花括号。
长公式
无须对齐的长公式可以使用 multline 环境。
1 | |
效果展示: \[ \begin{multline} x = a+b+c+{} \\ d+e+f+g \end{multline} \]
如果不需要编号,可以使用 multline* 环境代替。
需要对齐的公式,可以使用 aligned 次环境 来实现,它必须包含在数学环境之内。
1 | |
效果展示: \[ \begin{aligned} x ={}& a+b+c+{} \\ &d+e+f+g \end{aligned} \]
公式组
无需对齐的公式组可以使用 gather 环境,需要对齐的公式组可以使用 align 环境。他们都带有编号,如果不需要编号可以使用带星号的版本。
1 | |
效果展示: \[ \begin{gather} a = b+c+d \\ x = y+z \end{gather} \]
\[ \begin{align} a &= b+c+d \\ x &= y+z \end{align} \]
请注意,不要使用
eqnarray环境。原因可以参考:
分段函数
分段函数可以用cases次环境来实现,它必须包含在数学环境之内。
1 | |
效果展示: \[ y= \begin{cases} -x,\quad x\leq 0 \\ x,\quad x>0 \end{cases} \]
上下大括号
1 | |
\[ \overbrace{a+b+c}^A = \underbrace{a-b-c}_B \]
上下划线
1 | |
\[ \overline {z_{1}+z_{2}} = \overline {z_{1}}+\overline {z_{2}} \]
积分
1 | |
\[ \begin{align*} \int_a^bx\mathrm{d}x \\ \iint \limits_{\Omega}x^2\mathrm{d}x \\ \iiint \limits_{V} x^3\mathrm{d} x \end{align*} \]
FAQ
book, report 和 article 有什么区别:koma script - Regarding the book, report, and article document classes: what are the main differences? - TeX - LaTeX Stack Exchange