前言
本文是面向新人(其实是我自己)所写的 LaTeX 的公式梳理,有以下特点:
- 不完整。这篇梳理仅仅是节选了参考书籍的第四章的部分内容。
- 不规范。书写并不一定规范。
- 不一定完全正确。因为加入了不少个人的见解,主要是针对于知识的逻辑方面,有的重新安排了讲解的顺序。
下面解释一下何为不完整。
我们都知道,TeX 就是由基本的编译器和各种宏包构成的。很多功能都是由宏包所提供的。但是问题是这些宏包不一定是通用的。比如排版 LaTeX 的最为常用的宏包 amsmath,这是 LaTeX 的必备宏包,基本上所有地方都是支持它的;而 mathtools 宏包的普及程度就非常低。所以,我仅收集了 基于 amsmath 宏包的拓展,而其他的就不予以关注;而且,书中标注“危险”、“谨慎”、“易错”之类字样的部分,亦未收录。
本文的作用不是用于查询公式、符号的写法,而是建立用 LaTeX 输入公式的相关概念,其中公式和符号,仅用作举数例以辅助理解耳。另外,本文受限于本人的知识水平,也仅收录了部分常用的数学结构、符号等。
再来谈一下本文的作用。同上文言,本文意在建立用 LaTeX 输入公式的相关概念而非公式符号大全。须知此类命令环境宏包数不胜数也,岂我一文能涵盖?岂我一人能总结?初学之时,把握框架,识其大体即可。故本文虽然长,但是也许真正有用的只有目录的部分。(当然学习的过程,少不了基础的讲解和用例子来加深印象。)
另外,本文并没有把公式的完整命令放上来,有人会说这样是不是不方便学习?我要说的是,要学习的人大可以查看本文的 Markdown 源码:https://github.com/xuanhao44/LaTeX-,复制到本地去研究。不学的人,看了源码也是多余,反而觉得看着碍眼。
最后,本文仅由我一初学者所整理,如有纰漏谬误,实属正常。此文也会随我学习之程度而更新。
数学模式和文本模式
行内公式 / 正文数学公式
使用单个美元符号 $...$
来表示。
交换律是 $ a+b=b+a $,如 $ 1+2=2+1=3 $
行间公式 / 显示数学公式 / 列表公式
使用 \[ ... \]
或者 $$...$$
来表示。
交换律
如
虽然书上说用 $$...$$
不够严谨,应当避免使用,但是大多数的编译器只能识别 $$...$$
而不能识别 \[ ... \]
,比如博客园和 VS Code 自己的 OpenPreview 都是无法识别的。考虑到本身使用的并不是多么严谨的 LaTeX,就还是使用 $$...$$
了;另外最好把单独占据一行的显示公式放在单独的行内。
数学模式和文本模式混合
数学模式和文本模式不同。数学模式会改变字符字体和间距,还会忽略空格,汉字和西文文本也不能直接输入。
在数学公式中插入汉字:\text{汉字...} 命令
数学结构
上标和下标
上标和下标是常见的数学结构。上标可位于符号的右上方或者正上方;下标可位于符号的右下方或者正下方。
单字符和多字符
上标用特殊字符 ^ 表示,下标用特殊字符 _ 表示。
当上标和下标多于一个字符时,需要使用 {...} 分组确定上下标范围。
式子中的空格(包括单个换行)是没有实际作用的,但是适当的空格可以将代码分隔的好看些。
我建议都使用 {...} 的,毕竟这也很符合编程的规范。
上下标的同时使用和嵌套
同时使用
嵌套
特殊的两种上标
撇号
要注意四点:
- 可用符号 \prime 表示
- 可以与下标混用
- 可以连续使用
- 不能与上标直接混用,要加上 {...}
一般撇号
与下标混用 & 连续使用
不能与上标直接混用
角度
没有直接表示角度的符号,用符号 \circ 的上标表示。
其他
在显示公式中,多数数学算子的上下标在正下方或者正上方;
但对积分号等个别算子,显示公式中的上下标也在右上右下角。
在行内公式中,所有数学算子的上下标都在角标的位置,如将上面一个式子放入行内将得到 $ \max_n f(n) = \sum_{i=0}^n A_i $ 。
上下划线和花括号
上划线:\overline;下划线:\underline
而且这种结构可以任意嵌套或与其他数学结构组合。
在公式上下加箭头的命令,使用方法与 \overline 和 \underline 没有区别。
上左箭头:\overleftarrow
上右箭头:\overrightarrow
下左箭头:\underleftarrow
下右箭头:\underrightarrow
使用 \overbrace 和 \underbrace 带上花括号。
还可以使用上下标在花括号上作标注。
花括号交错暂时不考虑。
分式
分式也是很常见的结构呢。分式用 \frac 分子分母 得到。
在行内公式中,分式的分子分母都会用较小的字号排版,以免超出文本行高度。
通分计算 $ \frac 12 +\frac 1a $ 得 $ \frac{2+a}{2a} $
已经在分子或者分母内的公式,也会按行内公式大小排版。
如果还是需要指定较大或者较小的样式,则使用显示样式命令 \dfrac 和 \tfrac。
连分式使用 \cfrac。还有三个参数 l,c,r表示左中右对齐,并且默认是居中。 并不是所有地方支持,谨慎使用。
注:博客园中可使用,但是 OpenPreview 中无法识别参数。
无参数
有参数
二项式系数
类似分数分成上下两半的数学结构。使用 \binom 来输入二项式系数,其用法和 \frac 相似。
也有指定大小的形式 \tbinom 和 \dbinom。
其余类分式数学结构
略。
根式
使用单参数指令 \sqrt 得到,可带一个参数,表示开方次数。
嵌套使用根式是相当常见的。
开方的次数表示若复杂则应使用等价的指数形式。
矩阵和行列式
矩阵环境
矩阵的括号可以是方括号,也可以是圆括号,还可以是大括号,甚至没有括号等等。括号的不同就是矩阵环境的不同。
matrix环境
bmatrix环境
vmatrix环境
pmatrix环境
Bmatrix环境
Vmatrix环境
常规表示
不同的列用符号 & 分隔,行用 \\ 分隔。
矩阵中常常使用各种省略号,即 \dots,\vdots,\ddots 等。
分块矩阵
分块矩阵可以理解为矩阵的嵌套。
矩阵的其他用法
在行内公式中使用很小的矩阵,用的矩阵环境是 smallmatrix 环境。
矩阵在行内表示 \( \begin{smallmatrix} x & -y \\ y & x \end{smallmatrix} \),但是没有括号。
用 \substack 命令排版列矩阵,用以处理多行内容的插入。
或者是用 \subarray 指令,还必须指定对齐方式为 l(左对齐),c(居中),r(右对齐)。
符号和类型
数学结构是数学公式的骨架,而数学符号是数学公式的骨肉。
数学符号的输入:一小部分符号是可以直接从键盘上输入的,如字母\(a\),\(b\),\(x\),\(+\),\(=\),\(()\);但是大多数符号需要使用 LaTeX 命令来输入。
数学符号总共有 8个类别:普通符号、巨算符、二元运算符、关系符、开符号。闭符号、标点和变量族。
思想准备
虽然我一直在说要避免去涉及到 LaTeX 的粗斜体、字体、字号、间距和行距等细节的问题,但是在符号和类型这一节就不得不去考虑这些问题了。因为这些规定有数学或者物理含义。
字母和普通符号
数学符号的最基本内容就是字母表。
拉丁字母
也就是拉丁字母 \(A\),\(B\),\(C\),\(D\),\(x\),\(y\),\(z\)。它们都可以直接从键盘输入,默认使用意大利形状(注意是形状而不是字体/体)。
数学字母可以使用多种字体。使用命令就可以为字母确定字体。
数学环境的默认字体 \mathnormal
意大利体 \mathit
罗马体 \mathrm
粗体 \mathbf
无衬线体 \mathsf
打字机体 \mathtt
手写体 \mathcal
花体 \mathscr
黑板粗体 \mathbb
哥特体 \mathfrak
再就是要明白为什么要使用不同的字体,以及字体之间细微的差别。
比如只有变量使用默认的意大利体;数学常数通常使用直立的罗马体,如数学常数 \(\mathrm{e}\) ,类似的还有虚数单位 \(\mathrm{i}\)。当然这里也只是举了几个很简单的例子。
默认的数学字母字体 \mathnormal 不仅使用了和正文不同的数学字体,而且字母之间的间距比正文也要大。而其他数学字体字母的间距和正文几乎没有区别。所以使用 $xyz$
通常表示三个字母的乘积(间距较大),而如果要表示一个多字母的长变量名 \(\mathit{xyz}\),则应该使用 $\mathit{xyz}$
等形式。
希腊字母
希腊字母同样有大写/小写,也有直立体/倾斜体的区别。不像拉丁字母有统一的字体命令,每个希腊字母都有自己单独的命令。但是命令是有规律可循的,我们就以 \(\pi\) 为例来讲。
首先是 \pi 命令:\(\pi\),这个是小写的、斜体的,一般用作变量。可以发现命令就是这个希腊字母的读法,是最基础的命令。
再就是 \Pi 命令:\(\Pi\),这个是大写的希腊字母。在基础的命令上把首字母大写就是大写的命令了。
还有 \varpi 命令:\(\varpi\)。这个是小写希腊字母的变体;还有 \varPi 命令:\(\varPi\),这个是大写希腊字母的变体。加上 var 的前缀就是变体的命令。
而 \uppi 命令:\(\uppi\),这个是小写的、直立的,一般用作常数,如圆周率。\uppi 命令需要数学字体宏包 upgreek。可能会有无法显示的情况。
希伯来字母
\aleph 命令:\(\aleph\)
\beth 命令:\(\beth\)
\daleth 命令:\(\daleth\)
\gimel 命令:\(\gimel\)
普通符号
普通符号通常是一些字母的变形、一元运算符或者是单纯的图形符号。这里举几个常见的普通符号。
\infty 命令:\(\infty\)
\angle 命令:\(\angle\)
\bot 命令:\(\bot\)
\triangle 命令:\(\triangle\)
\hbar 命令:\(\hbar\)
\partial 命令:\(\partial\)
\nabla 命令:\(\nabla\)
\forall 命令:\(\forall\)
\exists 命令:\(\exists\)
\varnothing 命令:\(\varnothing\)
\neg 命令:\(\neg\)
数学重音
这里举几个常见的重音。
单字母
\hat a 命令:\(\hat a\)
\bar a 命令:\(\bar a\)
\vec a 命令:\(\vec a\)
\dot a 命令:\(\dot a\)
\hat a 命令:\(\hat a\)
多字母
\widehat{abc} 命令:\(\widehat{abc}\)
数学算子
数学算子分为三种(自定),第一类是巨算子,第二类是单字符算子,第三类是文字名称算子。
巨算子
它们的大小是随显示公式和行内公式变化的,而且通常比一般的数学符号大一些。下面举一些常见的例子。
\sum 命令:\(\sum\)
\int 命令:\(\int\)
\iint 命令:\(\iint\)
\oint 命令:\(\oint\)
\iiint 命令:\(\iiint\)
\prod 命令:\(\prod\)
\bigcup 命令:\(\bigcup\)
\bigcap 命令:\(\bigcap\)
\bigvee 命令:\(\bigvee\)
\bigwedge 命令:\(\bigwedge\)
\bigoplus 命令:\(\bigoplus\)
\bigotimes 命令:\(\bigotimes\)
注意不要把巨算子和形状相似的其他类型符号混淆。典型的例子就是大写希腊字母 \(\Sigma\)(\Sigma)与求和号 \(\sum\)(\sum)。它们在各个方面都有区别。
数学算子通常可以带上下标。在显示公式中,积分号的上下标默认在角标位置,而其他巨算子则在上下方(作为上下限),例如。
单字符算子
积分式的写法。微分算子 \(\mathrm{d}\) 应该使用直立罗马体,后面的变量则仍是使用默认的意大利体,并且用 \, 与前面的被积函数分开。
但是一般不添加单字符算子和变元之间的间距。不过微分与被积函数、多个微分变元之间,仍然需要留有间距。
这类只有一个字符的数学算子,还有 Laplace 算子 \(\triangle\) (大写希腊字母 \Delta,也可用 \triangle)、偏微分算子 \(\partial\) (\partial)、梯度算子 \(\nabla\)(\nabla)等一般都只作为一个普通数学符号排版,没有提供额外的间距,需要自己添加。
文字名称算子
文字名称算子用直立罗马体排印,如 \(\log x\),\(\lim f(t)\) 中的 \(\log\) 和 \(\lim\)。
前者是不带上下限的“纯”算子,一般就是常用的数学函数。其上标是角标形式。
\log 命令:\(\log\)
\lg 命令:\(\lg\)
\ln 命令:\(\ln\)
\sin 命令:\(\sin\)
\cos 命令:\(\cos\)
\tan 命令:\(\tan\)
\csc 命令:\(\csc\)
\sec 命令:\(\sec\)
\cot 命令:\(\cot\)
\arcsin 命令:\(\arcsin\)
\arccos 命令:\(\arccos\)
\arctan 命令:\(\arctan\)
\sinh 命令:\(\sinh\)
\cosh 命令:\(\cosh\)
\tanh 命令:\(\tanh\)
\coth 命令:\(\coth\)
带上下限的数学算子,使用起来和巨算子相似。
\lim 命令:\(\lim\)
\max 命令:\(\max\)
\min 命令:\(\min\)
\inf 命令:\(\inf\)
\gcd 命令:\(\gcd\)
\det 命令:\(\det\)
取模和同余
略。
二元运算符和关系符
首先说一下什么是二元运算符和关系符。常见的,能从键盘上直接输入的二元运算符有加号 \(+\),减号 \(-\),星号 \(*\);二元关系符有等号 \(=\),大于号 \(>\),小于号 \(<\) 和表示集合的关系的符号 \(:\) 。
它们和普通符号是有区别的,在公式使用中会产生间距。比如斜线形式的除号 \(/\) 并不是二元运算符,只是普通符号,即使表示除法也不额外增加间距;表示差集的符号 \setminus 与普通符号 \backslash 是同一个字符,但类型不同,因而会产生不同的间距,见下面的例子。
二元运算符和关系符有不同和相同的地方。它们都用在公式中间,在符号的两边留有一定的间距。运算符的间距小一些,关系符的间距略大一些,例如。
都是一样的符号却产生了不同的间距。原因是左边的是减号,是运算符,而右边的是负号,是关系符。当然在大多数情况下,我们不需要去关注这些 LaTeX 会自动处理的细节。
二元运算符
下面列举常见的二元运算符。
\times 命令:\(\times\)
\div 命令:\(\div\)
\pm 命令:\(\pm\)
\mp 命令:\(\mp\)
\circ 命令:\(\circ\)
\wedge 或 \land 命令:\(\wedge\)
\vee 或 \lor 命令:\(\vee\)
\cup 命令:\(\cup\)
\otimes 命令:\(\otimes\)
\oplus 命令:\(\oplus\)
二元关系符
二元关系符是 LaTeX 中数量最为庞大的一类数学符号:除了有普通的二元关系符及它们的否定形式外,关系符中各种箭头通常也单独列为一类。
一般地,二元关系符的否定可以在关系符前加 \not 得到,如使用 $s\not\in T$ 就得到:
此外,LaTeX 也为很多二元关系符的否定形式单独定义了命令,单独定义的命令有时会使用单独的字体符号,比直接使用 \not 得到的效果更好,如使用 $s \notin T$ 就得到:
斜线的位置更加合理一些。因此在使用否定的二元关系符的时候,应该尽量使用单独的符号命令,在没有单独的符号的时候,才使用 \not 组合符号。
下面列举常见的二元关系符。
\because 命令:\(\because\)
\therefor 命令:\(\therefore\)
\subseteq 命令:\(\subseteq\)
\neq 或 \ne 命令:\(\neq\)
\leq 或 \le 命令:\(\leq\)
\geq 或 \ge 命令:\(\geq\)
\ll 命令:\(\ll\)
\gg 命令:\(\gg\)
\in 命令:\(\in\)
\notin 命令:\(\notin\)
\ni 或 \owns 命令:\(\ni\)
\equiv 命令:\(\equiv\)
\sim 命令:\(\sim\)
\approx 命令:\(\approx\)
\simeq 命令:\(\simeq\)
\cong 命令:\(\cong\)
\subset 命令:\(\subset\)
\supset 命令:\(\supset\)
\subseteq 命令:\(\subseteq\)
\supseteq 命令:\(\supseteq\)
\perp 命令:\(\perp\)
\parallel 命令:\(\parallel\)
下面列举常见的箭头符号。基本上都是 \arrow 的变体。
单、双向箭头
\leftarrow 或 \gets 命令:\(\leftarrow\)
\rightarrow 或 \to 命令:\(\rightarrow\)
\leftrightarrow 命令:\(\leftrightarrow\)
首字母大写
\Leftarrow 命令:\(\Leftarrow\)
\Rightarrow 命令:\(\Rightarrow\)
\Leftrightarrow 命令:\(\Leftrightarrow\)
上面箭头的加长形式:加 long(举出一例)(双杠仍然是首字母 L 大写)
\Longrightarrow 命令:\(\Longrightarrow\)
上面箭头的否定形式:加 n(仅举一例)
\nRightarrow 命令:\(\nRightarrow\)
可逆箭头
\rightleftharpoons 命令:\(\rightleftharpoons\)
上下箭头
\uparrow 命令:\(\uparrow\)
\downarrow 命令:\(\downarrow\)
\updownarrow 命令:\(\updownarrow\)
首字母大写
\Uparrow 命令:\(\Uparrow\)
\Downarrow 命令:\(\Downarrow\)
\Updownarrow 命令:\(\Updownarrow\)
斜向箭头
\nearrow 命令:\(\nearrow\)
\searrow 命令:\(\searrow\)
\swarrow 命令:\(\swarrow\)
\nwarrow 命令:\(\nwarrow\)
这组命令很有规律。
- 东南 -> south-east -> se
- 东北 -> north-east -> ne
- 西北 -> north-west -> nw
- 西南 -> south-west -> sw
添加说明的可延长箭头
使用 \xleftarrow 和 \xrightarrow 命令,可以在上下方添加说明,参数是上方说明,可选参数是下方说明。
逻辑符号命令
使用 \iff,\implies,\impliedby,\And 命令用于逻辑表达式。符号和一般的箭头相同,但是间距比一般的运算符和关系符大一些,意义也更明显。
\iff 命令:\(\iff\)
\implies 命令:\(\implies\)
\impliesby 命令:\(\impliedby\)
\And 命令:\(\And\)
一个例子。
括号和定界符
括号
数学公式离不开括号的使用。括号种类大致有圆括号 \((\,)\)、方括号 \([\,]\)、花括号 \(\{\,\}\)、尖括号 \(\langle\,\rangle\) 等等。在 LaTeX 中,括号被分为开括号和闭括号,显然,开括号是左边的括号,闭括号是右边的括号。
能从键盘上直接输入的符号有圆括号 \((\,)\)、方括号 \([\,]\)、花括号 \(\{\,\}\),其余均有用命令输入。
尖括号:\langle 和 \rangle 命令:\(\langle\, \And \,\rangle\)
向下取整:\lfloor 和 \rfloor 命令:\(\lfloor\, \And \,\rfloor\)
向上取整:\lceil 和 \rceil 命令:\(\lceil\, \And \,\rceil\)
定界符
定界符的概念更为广泛。定界符通常就是公式两侧的括号,但也有时表示其他的符号。定界符有一个特别有用的性质,就是它可以按需要改变大小。
使用 \left 和 \right 命令得到的。它们分别把作为其参数的定界符转换为开符号和闭符号,同使得定界符可以按中间的内容的高度自动调节大小。
\left 和 \right 命令用来配对的定界符可以不是同一种符号,甚至可以用一个句号 \(.\) 表示空的定界符。例如:
还有一个 \middle 命令,它可以在 \left 和 \right 的中间再加一个定界符,如:
手动调整定界符略。
标点
数学标点
数学标点只有 5个。逗号、分号、叹号、问号和冒号,前面四个都可以从键盘上输入,冒号的命令是:\colon,注意它和直接从键盘上输入的二元关系符 \(:\) 的区别(略,因为用的不多)。
键盘上的圆点 \(.\) 在数学公式中是普通符号,通常表示为小数点。不过在显示公式的末尾也常常用它表示句号,在行末无须为后面的间距问题困扰。
数学省略号
省略号并不属于 TeX 的数学标点类型,但确是公式中常用的标点符号。
在数学公式中,水平的省略号有两种:
- 圆点在基线位置的 \ldots (\(\ldots\))
- 圆点在中间位置的 \cdots (\(\cdots\))
位置较低的 \ldots 主要用在逗号之间,如:
位置在中间的 \cdots 则用在二元运算符、关系符之间,如:
或者表示没有乘号的连乘积,如:
或者连接多个积分号,如:
下面给出其他省略号的命令。
首先是不同方向的省略号,多用于排版矩阵。
\vdots 命令:\(\vdots\)
\ddots 命令:\(\ddots\)
再是依照具体情形设定的省略号类型,分别是:
逗号(comma):\dotsc 命令:\(\dotsc\)
二元运算或关系符(binary):\dotsb 命令:\(\dotsb\)
乘法运算(multiplication):\dotsm 命令:\(\dotsm\)
积分(integral):\dotsc 命令:\(\dotsi\)
其他情形(other):\dotso 命令:\(\dotso\)
虽然 \dots 有一定的自动识别功能,但是在 \dots 无法正常识别的时候就可以使用上面的命令,如连乘和积分:
多行公式
我们经常会遇到线性方程组、分段函数、以及非常长的公式。下面来探究如何用显示公式来表示它们。
多个公式
输入多行数学公式最基本的方法是:使用 gather 和 gather* (不编号)环境,使用 \\ 换行,如:
gather 环境:
gather* 环境:
gather 环境得到的公式是每行居中的,align 和 align* 环境则允许公式按等号或者其他关系符对齐,在关系符前加 & 表示对齐。例如:
align 和 align* 环境还允许排列多列对齐的公式,列与列之间仍使用 & 分隔:
需要注意的是,align 环境中的列分隔符 & 一般应该放在二元关系符的前面,但有时候也可以放在后面。如果个别需要在关系符后面或其他地方对齐的,则应该注意使用的符号类型。下面举一个连等公式的例子。
实话说这个例子记住就好了。关系符后对齐,需要使用空的分组代替关系符右侧符号,保证间距。
拆分单个公式
首先是 \multline 环境和 \multline* 环境,可使用 \\ 换行。各行对齐的方式是:第一行左对齐,最后一行右对齐,中间的部分居中。不过左右两边和版心边界都留有一小段间距。这种环境特别适合排版非常长的连续运算,如:
给多行公式只产生一个编号要使用 \split 环境。\split 环境并不开始一个数学公式,它是使用在 equation、gather 等数学环境里的;\split 环境不产生编号,编号仍然由外面的数学环境产生。因此多行公式只产生了一个编号。
将公式组合成块
最为常见的是 \cases 环境,它在几行公式前面用花括号括起来,用来表示几种不同的情况。每行公式使用 & 分隔为两部分,通常表示值和后面的条件,例如:
还有几个常见的组合公式块的环境,它们的环境名通常是在原来的环境名的动词后面加 ed,包括 gathered 环境、aligned 环境和 alignedat 环境等。
gathered 环境把几行公式居中排列,组合为一个整体,如: