1 这是什么

  写技术内容绕不开公式。用文字描述一个积分,读者得在脑子里重建;用截图贴公式,改一个符号就得重新截;用 Word 的公式编辑器,粘到网页上格式全乱。

  LaTeX 的思路是:用纯文本描述公式。比如

1
\int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}

  渲染出来就是:

∫0∞e−x2 dx=π2\int_0^\infty e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}

  好处是:改公式就是改文本,能版本控制,能复制粘贴,能在任何支持 LaTeX 的地方用。

  先说明范围:这篇文章讲的是一套 LaTeX 的数学公式语法子集,不是完整的 LaTeX 排版系统。要写论文、做书籍排版那是另一回事(涉及文档类、章节、参考文献、浮动体等等)。这里只讲打数学公式够用的部分。

  全文按“基础结构 → 各类符号 → 排版细节 → 符号速查表”组织,最后附一个尽量全的符号对照表,可以当手册用。

2 两种模式

  公式有两种写法,区别只在外层符号。

2.1 行内公式

  用单个 $ 包住。源码:

1
圆周率 $\pi$ 约等于 3.14159,而 $e^{i\pi} + 1 = 0$。

  渲染效果:圆周率 π\pi 约等于 3.14159,而 eiπ+1=0e^{i\pi} + 1 = 0。

  适合短公式、符号、变量。不要拿行内模式写长公式——它会把行高撑开,版面很难看。

2.2 独行公式

  用双 $$ 包住,公式会单独占一行并居中。源码:

1
$$\frac{a}{b} = \frac{c}{d}$$

  渲染效果:

ab=cd\frac{a}{b} = \frac{c}{d}

  适合重要的、需要看清楚推导过程的公式。这是写技术文章的主力。

2.3 一个小细节:行内样式与显示样式

  $$ 里的内容默认是“行内样式”,上下标和分数会挤在一起。想强制用“显示样式”(分数展开、上下标变大),在公式前面加 \displaystyle。对比:

写法 渲染效果
$$\frac{a}{b}$$ ab\frac{a}{b}
$$\displaystyle\frac{a}{b}$$ ab\displaystyle\frac{a}{b}
$$\sum_{i=1}^n i$$ ∑i=1ni\sum_{i=1}^n i
$$\displaystyle\sum_{i=1}^n i$$ ∑i=1ni\displaystyle\sum_{i=1}^n i

  反过来,行内公式里想用显示样式也可以加 \displaystyle——但通常不建议,会让行高变得很高。

3 上下标

  这是最常用的一组:

语法 渲染 说明
x^2 x2x^2 上标用 ^
x_i xix_i 下标用 _
x^{10} x10x^{10} 多个字符必须加花括号
x_{ij} xijx_{ij} 同上
x_i^2 xi2x_i^2 上下标可同时写
x_{i}^{2} xi2x_{i}^{2} 也可以都加花括号
{}^{14}_{6}C 614C{}^{14}_{6}C 前置上下标(同位素)

  花括号这条一定要记住。 看对比:

你写的 渲染结果 对不对
x^10 x10x^10 ★ 错,只有 1 是上标
x^{10} x10x^{10} ✓
x_ij xijx_ij ★ 错
x_{ij} xijx_{ij} ✓
a^b^c 报错 ★ 不能连续两个上标
a^{b^c} abca^{b^c} ✓ 嵌套要加括号

  这是新手最常犯的错误,没有之一。

  另外,上下标可以嵌套任意层:x^{y^{z}} 渲染成 xyzx^{y^{z}}。

4 分数、根号、上下限

4.1 分数

  源码:

1
\frac{分子}{分母}

a+bc+d\frac{a+b}{c+d}

  嵌套也没问题:

语法 渲染
\frac{1}{2} 12\frac{1}{2}
\frac{1}{1+\frac{1}{x}} 11+1x\frac{1}{1+\frac{1}{x}}
\dfrac{a}{b} ab\dfrac{a}{b}
\tfrac{a}{b} ab\tfrac{a}{b}

  \dfrac 强制用显示样式(大号),\tfrac 强制用小号。行内公式里的分数会缩得很小,要写清楚的分数就加 \dfrac 或改用独行公式。

4.2 根号

1
2
3
\sqrt{x}          % 平方根
\sqrt[3]{x} % 三次根
\sqrt[n]{a} % n 次根

xx3a2+b2n\sqrt{x} \qquad \sqrt[3]{x} \qquad \sqrt[n]{a^2+b^2}

4.3 求和、积分、极限

  用 _ 写下限、^ 写上标:

1
2
3
\sum_{i=1}^{n} i^2
\int_0^1 x^2 \, dx
\lim_{x \to 0} \frac{\sin x}{x}

∑i=1ni2∫01x2 dxlim⁡x→0sin⁡xx\sum_{i=1}^{n} i^2 \qquad \int_0^1 x^2 \, dx \qquad \lim_{x \to 0} \frac{\sin x}{x}

  几个细节:

  ——\qquad 是大空格,用来分隔并排的公式。\quad 小一点,\, 是很小的空隙(常在积分里 dx 前面加)。
  ——\to 是箭头 →\to,也可以用 \rightarrow。
  ——上下限写在哪取决于模式:独行公式里,\sum、\int、\lim 的上下限默认在符号的正上方/正下方;行内模式里会挪到右边。想强制在某处显示,用 \limits 和 \nolimits:

写法 渲染
\sum_{i=1}^n(行内) ∑i=1n\sum_{i=1}^n
\sum\limits_{i=1}^n(行内) ∑i=1n\sum\limits_{i=1}^n

  多重积分:

语法 渲染
\iint ∬\iint
\iiint ∭\iiint
\oint ∮\oint
\int_a^b \int_c^d ∫ab∫cd\int_a^b \int_c^d

  闭合积分和多重积分可以带上下限:\oint_C \vec{F}\cdot d\vec{r} → ∮CF⃗⋅dr⃗\oint_C \vec{F}\cdot d\vec{r}

5 多行公式

  一个推导写好几步,需要对齐,这时候用 aligned 环境。源码:

1
2
3
4
5
6
7
$$
\begin{aligned}
(a+b)^2 &= (a+b)(a+b) \\
&= a^2 + ab + ba + b^2 \\
&= a^2 + 2ab + b^2
\end{aligned}
$$

  渲染效果:

(a+b)2=(a+b)(a+b)=a2+ab+ba+b2=a2+2ab+b2\begin{aligned} (a+b)^2 &= (a+b)(a+b) \\ &= a^2 + ab + ba + b^2 \\ &= a^2 + 2ab + b^2 \end{aligned}

  说明:

  ——\\ 是换行(两个反斜杠)。
  ——& 是对齐点。上面的写法让所有 = 对齐。想对齐别的位置就把 & 挪过去。
  ——aligned 必须写在 $$ 里面。这一点和完整的 LaTeX 不同。

  对齐点也可以有多个,比如要让等号和注释各成一列:

1
2
3
4
5
6
$$
\begin{aligned}
x &= 1 && \text{第一个根} \\
y &= 2 && \text{第二个根}
\end{aligned}
$$

x=1第一个根y=2第二个根\begin{aligned} x &= 1 && \text{第一个根} \\ y &= 2 && \text{第二个根} \end{aligned}

  如果不想对齐,只是想换行,用 gathered:

1
2
3
4
5
6
$$
\begin{gathered}
x + y = 3 \\
x - y = 1
\end{gathered}
$$

x+y=3x−y=1\begin{gathered} x + y = 3 \\ x - y = 1 \end{gathered}

6 分段函数

  用 cases 环境。源码:

1
2
3
4
5
6
7
$$
|x| =
\begin{cases}
x, & x \geq 0 \\
-x, & x < 0
\end{cases}
$$

∣x∣={x,x≥0−x,x<0|x| = \begin{cases} x, & x \geq 0 \\ -x, & x < 0 \end{cases}

  写法要点和 aligned 一样:& 分隔“内容”和“条件”,\\ 换行。逗号后面加 & 是为了让所有条件左对齐。

  带大括号的统一写法也很常见:

1
2
3
4
5
6
7
8
$$
f(x) =
\begin{cases}
0, & x < 0 \\
x^2, & 0 \leq x \leq 1 \\
1, & x > 1
\end{cases}
$$

f(x)={0,x<0x2,0≤x≤11,x>1f(x) = \begin{cases} 0, & x < 0 \\ x^2, & 0 \leq x \leq 1 \\ 1, & x > 1 \end{cases}

7 矩阵与向量

1
2
3
4
5
6
7
$$
A = \begin{pmatrix} a & b \\ c & d \end{pmatrix}
\qquad
B = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}
\qquad
C = \begin{vmatrix} a & b \\ c & d \end{vmatrix}
$$

A=(abcd)B=[1001]C=∣abcd∣A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \qquad B = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \qquad C = \begin{vmatrix} a & b \\ c & d \end{vmatrix}

  各种括号对应的环境:

环境 括号 渲染
matrix 无括号 abcd\begin{matrix} a & b \\ c & d \end{matrix}
pmatrix 圆括号 ( ) (abcd)\begin{pmatrix} a & b \\ c & d \end{pmatrix}
bmatrix 方括号 [ ] [abcd]\begin{bmatrix} a & b \\ c & d \end{bmatrix}
Bmatrix 花括号 { } {abcd}\begin{Bmatrix} a & b \\ c & d \end{Bmatrix}
vmatrix 竖线 | | ∣abcd∣\begin{vmatrix} a & b \\ c & d \end{vmatrix}
Vmatrix 双竖线 ‖ ‖ ∥abcd∥\begin{Vmatrix} a & b \\ c & d \end{Vmatrix}

  & 分隔同一行的元素,\\ 分隔行。

  省略号:

语法 渲染 用途
\cdots ⋯\cdots 横向
\vdots ⋮\vdots 纵向
\ddots ⋱\ddots 斜向

  一个带省略号的矩阵:

1
2
3
4
5
6
7
8
$$
A = \begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{pmatrix}
$$

A=(a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮an1an2⋯ann)A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{pmatrix}

  行内的小矩阵用 \binom(组合数)或 \begin{smallmatrix}:

语法 渲染
\binom{n}{k} (nk)\binom{n}{k}
\begin{smallmatrix} a & b \\ c & d \end{smallmatrix} abcd\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}

8 自动调整大小的括号

  直接写 ( ) 的话,括号大小是固定的,包不住高一点的式子。对比:

写法 渲染
(\frac{a}{b}) (ab)(\frac{a}{b})
\left(\frac{a}{b}\right) (ab)\left(\frac{a}{b}\right)

  用 \left 和 \right 让括号自动适应内容高度:

语法 渲染
\left( x \right) (x)\left( x \right)
\left[ x \right] [x]\left[ x \right]
\left\{ x \right\} {x}\left\{ x \right\}
`\left x \right
\left| x \right| ∣x∣\left| x \right|
\left\langle x \right\rangle ⟨x⟩\left\langle x \right\rangle
\left\lceil x \right\rceil ⌈x⌉\left\lceil x \right\rceil
\left\lfloor x \right\rfloor ⌊x⌋\left\lfloor x \right\rfloor

  注意:\left 和 \right 必须成对出现。如果只想让左边变大、右边不要括号,用 \right.(一个点表示“空的右括号”):

1
\left. \frac{dy}{dx} \right|_{x=0}

dydx∣x=0\left. \frac{dy}{dx} \right|_{x=0}

  这是求导后代入某点的常见写法。

  还可以用 \big \Big \bigg \Bigg 手动指定大小(前面加 l/r 区分左右):

语法 渲染
\big( x \big) (x)\big( x \big)
\Big( x \Big) (x)\Big( x \Big)
\bigg( x \bigg) (x)\bigg( x \bigg)
\Bigg( x \Bigg) (x)\Bigg( x \Bigg)

9 排版细节

9.1 空格

  LaTeX 会忽略公式里你敲的空格。a b 和 ab 渲染出来一样。要加空格得用命令:

命令 宽度 渲染
\, 很窄 a ba\,b
\: 稍宽 a ba\:b
\; 更宽 a  ba\;b
\ (反斜杠+空格) 一个空格 a ba\ b
\quad 一个字宽 aba\quad b
\qquad 两个字宽 aba\qquad b
\! 负空格(收紧) a ⁣ba\!b

9.2 公式里的文字

  公式里直接写中文或英文单词,会被当成变量,斜体且没有空格。对比:

写法 渲染
x = speed \times time x=speed×timex = speed \times time
x = \text{speed} \times \text{time} x=speed×timex = \text{speed} \times \text{time}

  要用 \text{} 包住。公式里出现中文时尤其要注意——不包起来的话,字距会很难看:

写法 渲染
\text{当} x > 0 \text{时} 当x>0时\text{当} x > 0 \text{时}
当 x > 0 时(不包) 当x>0时当 x > 0 时

9.3 公式编号

  想让公式带编号,用 \tag{}:

1
$$E = mc^2 \tag{1.1}$$

E=mc2(1.1)E = mc^2 \tag{1.1}

  技术文章里我习惯给重要公式编号,正文里就能写“由 (1.1) 式得”。

  编号内容和章节对应比较清楚,比如第 3 章第 2 个公式叫 \tag{3.2}。

9.4 颜色与框

  部分渲染器支持 \color 和 \boxed:

语法 渲染
\boxed{E = mc^2} E=mc2\boxed{E = mc^2}
\color{red}{x} x\color{red}{x}

  \boxed 用来强调关键结论很有用。颜色的支持度不稳定,不同渲染器表现不一样,建议少用。

9.5 加粗与强调

语法 渲染 说明
\mathbf{x} x\mathbf{x} 正体粗(向量、矩阵常用)
\boldsymbol{\alpha} α\boldsymbol{\alpha} 粗体希腊字母
\mathit{x} x\mathit{x} 斜体
\mathrm{d} d\mathrm{d} 正体(如微分符号 d)
\mathbb{R} R\mathbb{R} 空心(实数集)
\mathcal{L} L\mathcal{L} 花体
\mathfrak{g} g\mathfrak{g} 哥特体
\vec{a} a⃗\vec{a} 箭头向量
\hat{x} x^\hat{x} 帽子
\bar{x} xˉ\bar{x} 上划线
\tilde{x} x~\tilde{x} 波浪线
\dot{x} x˙\dot{x} 一个点(对时间求导)
\ddot{x} x¨\ddot{x} 两个点
\overline{AB} AB‾\overline{AB} 长上划线
\underline{x} x‾\underline{x} 下划线
\overrightarrow{AB} AB→\overrightarrow{AB} 长箭头
\overbrace{x+y}^{n} x+y⏞n\overbrace{x+y}^{n} 上花括号
\underbrace{x+y}_{n} x+y⏟n\underbrace{x+y}_{n} 下花括号

  数学排版惯例:向量和矩阵用 \mathbf 或 \boldsymbol,集合用 \mathbb,算子用 \mathcal,微分符号 d 用 \mathrm{d}(正体,因为它是算子不是变量)。

10 符号速查表

  下面按类别列出常用符号的代码与渲染。可以用浏览器的“查找”在表里搜。

10.1 小写希腊字母

代码 渲染 代码 渲染 代码 渲染 代码 渲染
\alpha α\alpha \beta β\beta \gamma γ\gamma \delta δ\delta
\epsilon ϵ\epsilon \varepsilon ε\varepsilon \zeta ζ\zeta \eta η\eta
\theta θ\theta \vartheta ϑ\vartheta \iota ι\iota \kappa κ\kappa
\lambda λ\lambda \mu μ\mu \nu ν\nu \xi ξ\xi
\pi π\pi \varpi ϖ\varpi \rho ρ\rho \varrho ϱ\varrho
\sigma σ\sigma \varsigma ς\varsigma \tau τ\tau \upsilon υ\upsilon
\phi ϕ\phi \varphi φ\varphi \chi χ\chi \psi ψ\psi
\omega ω\omega

10.2 大写希腊字母

  注意:只有形状与拉丁字母不同的才有命令,像 Alpha、Beta 这些长得和 A、B 一样的直接写拉丁字母。

代码 渲染 代码 渲染 代码 渲染 代码 渲染
\Gamma Γ\Gamma \Delta Δ\Delta \Theta Θ\Theta \Lambda Λ\Lambda
\Xi Ξ\Xi \Pi Π\Pi \Sigma Σ\Sigma \Upsilon Υ\Upsilon
\Phi Φ\Phi \Psi Ψ\Psi \Omega Ω\Omega

10.3 二元运算符

代码 渲染 代码 渲染 代码 渲染 代码 渲染
\pm ±\pm \mp ∓\mp \times ×\times \div ÷\div
\cdot ⋅\cdot \ast ∗\ast \star ⋆\star \circ ∘\circ
\bullet ∙\bullet \oplus ⊕\oplus \ominus ⊖\ominus \otimes ⊗\otimes
\odot ⊙\odot \cup ∪\cup \cap ∩\cap \sqcup ⊔\sqcup
\sqcap ⊓\sqcap \vee ∨\vee \wedge ∧\wedge \setminus ∖\setminus
\wr ≀\wr \diamond ⋄\diamond \triangleleft ◃\triangleleft \triangleright ▹\triangleright

10.4 关系符

代码 渲染 代码 渲染 代码 渲染 代码 渲染
\leq ≤\leq \geq ≥\geq \neq ≠\neq \approx ≈\approx
\equiv ≡\equiv \sim ∼\sim \simeq ≃\simeq \cong ≅\cong
\propto ∝\propto \ll ≪\ll \gg ≫\gg \asymp ≍\asymp
\prec ≺\prec \succ ≻\succ \preceq ⪯\preceq \succeq ⪰\succeq
\subset ⊂\subset \supset ⊃\supset \subseteq ⊆\subseteq \supseteq ⊇\supseteq
\in ∈\in \notin ∉\notin \ni ∋\ni \not\ni ∌\not\ni
\perp ⊥\perp \parallel ∥\parallel \mid ∣\mid \nmid ∤\nmid
\doteq ≐\doteq \models ⊨\models \vdash ⊢\vdash \dashv ⊣\dashv
\lesssim ≲\lesssim \gtrsim ≳\gtrsim \lessgtr ≶\lessgtr \gtrless ≷\gtrless

10.5 箭头

代码 渲染 代码 渲染 代码 渲染 代码 渲染
\to →\to \rightarrow →\rightarrow \leftarrow ←\leftarrow \leftrightarrow ↔\leftrightarrow
\Rightarrow ⇒\Rightarrow \Leftarrow ⇐\Leftarrow \Leftrightarrow ⇔\Leftrightarrow \mapsto ↦\mapsto
\uparrow ↑\uparrow \downarrow ↓\downarrow \updownarrow ↕\updownarrow \Uparrow ⇑\Uparrow
\nearrow ↗\nearrow \searrow ↘\searrow \swarrow ↙\swarrow \nwarrow ↖\nwarrow
\longrightarrow ⟶\longrightarrow \longleftarrow ⟵\longleftarrow \Longrightarrow ⟹\Longrightarrow \Longleftrightarrow ⟺\Longleftrightarrow
\hookrightarrow ↪\hookrightarrow \hookleftarrow ↩\hookleftarrow \rightharpoonup ⇀\rightharpoonup \leftharpoonup ↼\leftharpoonup

10.6 大运算符

代码 渲染 代码 渲染 代码 渲染
\sum ∑\sum \prod ∏\prod \coprod ∐\coprod
\int ∫\int \iint ∬\iint \iiint ∭\iiint
\oint ∮\oint \bigcup ⋃\bigcup \bigcap ⋂\bigcap
\bigoplus ⨁\bigoplus \bigotimes ⨂\bigotimes \bigodot ⨀\bigodot
\bigvee ⋁\bigvee \bigwedge ⋀\bigwedge \biguplus ⨄\biguplus
\bigsqcup ⨆\bigsqcup

10.7 其它常用符号

代码 渲染 代码 渲染 代码 渲染 代码 渲染
\infty ∞\infty \partial ∂\partial \nabla ∇\nabla \forall ∀\forall
\exists ∃\exists \nexists ∄\nexists \neg ¬\neg \emptyset ∅\emptyset
\varnothing ∅\varnothing \angle ∠\angle \triangle △\triangle \square □\square
\surd √\surd \top ⊤\top \bot ⊥\bot \aleph ℵ\aleph
\hbar ℏ\hbar \ell ℓ\ell \imath ı\imath \jmath ȷ\jmath
\Re ℜ\Re \Im ℑ\Im \wp ℘\wp \prime ′\prime
\degree °\degree \circ ∘\circ \bullet ∙\bullet \dots …\dots
\ldots …\ldots \cdots ⋯\cdots \vdots ⋮\vdots \ddots ⋱\ddots
\clubsuit ♣\clubsuit \diamondsuit ♢\diamondsuit \heartsuit ♡\heartsuit \spadesuit ♠\spadesuit
\checkmark ✓\checkmark \mho ℧\mho \Finv Ⅎ\Finv \Game ⅁\Game

10.8 定界符

代码 渲染 代码 渲染 代码 渲染
( ) (( )) [ ] [[ ]] \{ \} {\{ }\}
\langle \rangle ⟨\langle ⟩\rangle \lceil \rceil ⌈\lceil ⌉\rceil \lfloor \rfloor ⌊\lfloor ⌋\rfloor
| ∣| \backslash \\backslash \uparrow ↑\uparrow
\Uparrow ⇑\Uparrow \downarrow ↓\downarrow \Downarrow ⇓\Downarrow
\updownarrow ↕\updownarrow \Updownarrow ⇕\Updownarrow \vert ∣\vert

10.9 函数名

  函数名一定要加反斜杠,否则会被当成变量相乘(斜体):

代码 渲染 代码 渲染 代码 渲染
\sin sin⁡\sin \cos cos⁡\cos \tan tan⁡\tan
\cot cot⁡\cot \sec sec⁡\sec \csc csc⁡\csc
\arcsin arcsin⁡\arcsin \arccos arccos⁡\arccos \arctan arctan⁡\arctan
\sinh sinh⁡\sinh \cosh cosh⁡\cosh \tanh tanh⁡\tanh
\log log⁡\log \ln ln⁡\ln \lg lg⁡\lg
\exp exp⁡\exp \deg deg⁡\deg \dim dim⁡\dim
\ker ker⁡\ker \hom hom⁡\hom \arg arg⁡\arg
\max max⁡\max \min min⁡\min \sup sup⁡\sup
\inf inf⁡\inf \lim lim⁡\lim \limsup lim sup⁡\limsup
\liminf lim inf⁡\liminf \gcd gcd⁡\gcd \det det⁡\det
\bmod  mod \bmod \pmod{n} (modn)\pmod{n} \Pr Pr⁡\Pr

  对比一下加与不加:

写法 渲染
sin x sinxsin x
\sin x sin⁡x\sin x

10.10 声调与修饰符

代码 渲染 代码 渲染 代码 渲染
\hat{a} a^\hat{a} \check{a} aˇ\check{a} \breve{a} a˘\breve{a}
\acute{a} aˊ\acute{a} \grave{a} aˋ\grave{a} \tilde{a} a~\tilde{a}
\bar{a} aˉ\bar{a} \vec{a} a⃗\vec{a} \dot{a} a˙\dot{a}
\ddot{a} a¨\ddot{a} \dddot{a} a...\dddot{a} \mathring{a} a˚\mathring{a}
\widehat{abc} abc^\widehat{abc} \widetilde{abc} abc~\widetilde{abc} \overline{abc} abc‾\overline{abc}
\underline{abc} abc‾\underline{abc} \overrightarrow{ab} ab→\overrightarrow{ab} \overleftarrow{ab} ab←\overleftarrow{ab}

10.11 括号与堆叠

代码 渲染
\binom{n}{k} (nk)\binom{n}{k}
\dbinom{n}{k} (nk)\dbinom{n}{k}
\tbinom{n}{k} (nk)\tbinom{n}{k}
\overbrace{a+b}^{n} a+b⏞n\overbrace{a+b}^{n}
\underbrace{a+b}_{n} a+b⏟n\underbrace{a+b}_{n}
\stackrel{def}{=} =def\stackrel{def}{=}
\underset{x}{\max} max⁡x\underset{x}{\max}
\overset{x}{\max} max⁡x\overset{x}{\max}
{n \choose k} (nk){n \choose k}
{n \atop k} nk{n \atop k}
\substack{a \\ b} ab\substack{a \\ b}

10.12 间距与布局

代码 说明 渲染
\, 细空格 a ba\,b
\: 中等空格 a ba\:b
\; 较宽空格 a  ba\;b
\quad 一个字宽 aba\quad b
\qquad 两个字宽 aba\qquad b
\! 负空格 a ⁣ba\!b
\hspace{1cm} 指定宽度 aba\hspace{1cm}b
\phantom{x} 占位但不可见 axba\phantom{x}b
\hphantom{x} 水平占位 axxxba\hphantom{xxx}b
\vphantom{x} 垂直占位 —
\text{文字} 正文文字 文字\text{文字}
\textbf{文字} 粗体文字 文字\textbf{文字}
\mathit{文字} 斜体文字 文字\mathit{文字}

10.13 集合与逻辑

代码 渲染 代码 渲染 代码 渲染
\mathbb{R} R\mathbb{R} \mathbb{N} N\mathbb{N} \mathbb{Z} Z\mathbb{Z}
\mathbb{Q} Q\mathbb{Q} \mathbb{C} C\mathbb{C} \mathbb{P} P\mathbb{P}
\mathcal{A} A\mathcal{A} \mathcal{B} B\mathcal{B} \mathcal{F} F\mathcal{F}
\mathfrak{A} A\mathfrak{A} \mathfrak{g} g\mathfrak{g} \mathfrak{h} h\mathfrak{h}
\varnothing ∅\varnothing \emptyset ∅\emptyset \complement ∁\complement
\therefore ∴\therefore \because ∵\because \square □\square
\blacksquare ■\blacksquare \triangle △\triangle \blacktriangle ▲\blacktriangle

11 常见错误速查

症状 原因 解决
x^10 只有 1 是上标 没加花括号 写 x^{10}
公式整块不渲染,显示源码 没开公式支持,或分隔符写错 检查开关与 $ 配对
公式渲染成斜体一串 函数名没加反斜杠 写 \sin 而不是 sin
括号包不住分数 用了固定大小括号 改用 \left( \right)
分数太小看不清 在行内公式里 用 \dfrac 或改独行公式
中文和英文挤在一起 没用 \text{} 用 \text{中文} 包起来
一部分公式正常一部分是源码 $ 数量不成对 逐行数 $,确保成对
\left 报错 没有配对的 \right 补上 \right. 或 \right)
空格没生效 LaTeX 忽略公式里的空格 用 \quad、\, 等命令
换行没生效 用了单个反斜杠 用 \\(两个)
数学命令写在 HTML 标签里不生效 HTML 块内不解析 Markdown 把公式移到标签外,或改用文字

12 怎么查不会的符号

  最实用的方法:用 Detexify(http://detexify.kirelabs.org/classify.html)。在网页上画出符号的形状,它会告诉你对应的命令。手写识别,找不常见的符号特别快。

  其次是在线 LaTeX 编辑器(Overleaf 之类),边写边看效果。或者用支持实时预览的 Markdown 编辑器(VS Code 加插件、Typora、Obsidian 都行)。

  还有一招:看到别人的公式不会写,右键“查看页面源代码”,很多网站会把原始 LaTeX 放在 annotation 标签里(这是 KaTeX / MathJax 的标准做法,为了无障碍阅读)。这个页面的公式也能这么挖出来。

  另外推荐两个速查表:

13 最后

  LaTeX 的语法量比 Markdown 大不少,但常用的就那么几十个命令。上面这些覆盖了写技术内容 95% 的场景。

  真正要养成的习惯是三个:上下标加花括号、函数名加反斜杠、公式里的文字用 \text{} 包。这三个记住了,剩下的边用边查。

  至于公式排版得漂不漂亮,那是次要的。把推导讲清楚比把公式排好看重要得多。

  第 10 节那张符号表我尽量列全了,实际用的时候直接在页面里搜命令名就行。