LaTeX 數學公式梳理
前言
本文是面向新人(其實是我自己)所寫的 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 環境把幾行公式居中排列,組合為一個整體,如:
