返回技术文章

LaTeX 数学公式常用语法

  • LaTeX
  • KaTeX
  • 排版
  • 速查

这个站点用 KaTeX 渲染数学公式。KaTeX 是 LaTeX 的一个子集,覆盖了写技术文章会用到的绝大部分语法,但并非全部——用错命令时公式不会静默失败,而是会显示成一段红色报错,所以值得把边界记清楚。

这篇把常用写法整理成可以直接抄的形式,最后列出几个容易踩的坑。

行内公式与行间公式

行内公式用单个美元符号包裹,跟着文字一起排版:

质能方程 $E = mc^2$ 说明了质量与能量的关系。

效果:质能方程 E=mc2E = mc^2 说明了质量与能量的关系。

行间公式用两个美元符号包裹,公式会独立成行并居中。记得 $$ 前后留空行,否则它可能被当成段落内的一部分:

$$
\int_{0}^{\infty} e^{-x^{2}} \, \mathrm{d}x = \frac{\sqrt{\pi}}{2}
$$

效果:

0ex2dx=π2\int_{0}^{\infty} e^{-x^{2}} \, \mathrm{d}x = \frac{\sqrt{\pi}}{2}

上下标

下标用 _,上标用 ^。内容超过一个字符时要用花括号包起来,否则只有紧跟的那个字符会被当作上下标:

写法效果说明
x_1x1x_1单字符不用括号
x_{10}x10x_{10}多字符必须加括号
x^2x2x^2上标同理
x^{n+1}xn+1x^{n+1}
x_i^2xi2x_i^2同时有上下标
a^{b^{c}}abca^{b^{c}}嵌套要一层层加括号

一个常见的错误是写成 x_10,它会被解析成 x10x_1 0 而不是 x10x_{10}

分数、根号与二项式

\frac{a}{b}          % 普通分数
\dfrac{a}{b}         % 强制显示为大号分数(行内也撑开)
\tfrac{a}{b}         % 强制小号
\sqrt{x}             % 平方根
\sqrt[3]{x}          % n 次方根
\binom{n}{k}         % 组合数

效果分别是 ab\frac{a}{b}ab\dfrac{a}{b}x\sqrt{x}x3\sqrt[3]{x}(nk)\binom{n}{k}

行内公式里的分数默认会被压扁以适配行高,需要它保持大小就用 \dfrac;反过来,行间公式里想收窄就用 \tfrac

希腊字母

小写直接拼名字,大写把首字母大写。少数几个长得不一样的需要单独记:

小写写法大写写法
α\alpha\alphaΓ\Gamma\Gamma
β\beta\betaΔ\Delta\Delta
γ\gamma\gammaΘ\Theta\Theta
θ\theta\thetaΛ\Lambda\Lambda
λ\lambda\lambdaΣ\Sigma\Sigma
μ\mu\muΦ\Phi\Phi
π\pi\piΨ\Psi\Psi
σ\sigma\sigmaΩ\Omega\Omega
ϕ\phi\phi
φ\varphi\varphi

关于 \phi\varphi\epsilon\varepsilon:这两组是两个不同的符号,不是大小号关系,用哪个取决于你所在领域的习惯。

大型运算符

求和、求积、积分、极限的上下限写在 _^ 里:

\sum_{i=1}^{n} i^2
\prod_{i=1}^{n} x_i
\int_{a}^{b} f(x) \, \mathrm{d}x
\oint_{C} \mathbf{F} \cdot \mathrm{d}\mathbf{r}
\lim_{x \to 0} \frac{\sin x}{x}

效果:

i=1ni2i=1nxiabf(x)dxCFdrlimx0sinxx\sum_{i=1}^{n} i^2 \qquad \prod_{i=1}^{n} x_i \qquad \int_{a}^{b} f(x) \, \mathrm{d}x \qquad \oint_{C} \mathbf{F} \cdot \mathrm{d}\mathbf{r} \qquad \lim_{x \to 0} \frac{\sin x}{x}

行内使用时,上下限会挪到符号右侧以节省行高:i=1ni2\sum_{i=1}^{n} i^2。想强制让它待在上方,可以在公式开头加 \displaystyle

积分号后面的 \, 是一段细空格,用来把被积函数和 dx\mathrm{d}x 分开。正体的微分符号写作 \mathrm{d},这样它不会像变量一样变成斜体。

括号的自动缩放

直接写 ( ) 时括号高度固定,包不住高个子的内容。用 \left\right 让它们自动撑开:

\left( \frac{a}{b} \right)          % 圆括号
\left[ \frac{a}{b} \right]          % 方括号
\left\{ \frac{a}{b} \right\}        % 花括号要转义
\left\lvert \frac{a}{b} \right\rvert  % 绝对值
\left\| \mathbf{x} \right\|         % 范数

效果:(ab)\left( \frac{a}{b} \right){ab}\left\{ \frac{a}{b} \right\}ab\left\lvert \frac{a}{b} \right\rvertx\left\| \mathbf{x} \right\|

\left\right 必须成对出现。只想在一边加括号时,另一边用 \right. 占位:

dydxx=0\left. \frac{\mathrm{d}y}{\mathrm{d}x} \right|_{x=0}

花括号在 LaTeX 里是分组符号,所以字面量的花括号必须写成 \{\}

矩阵

矩阵用 \begin{...}\end{...} 包裹,行内用 & 分隔单元格,用 \\ 换行。三种括号对应三种环境:

\begin{pmatrix} a & b \\ c & d \end{pmatrix}   % 圆括号
\begin{bmatrix} a & b \\ c & d \end{bmatrix}   % 方括号
\begin{vmatrix} a & b \\ c & d \end{vmatrix}   % 行列式竖线

效果:

A=(a11a12a21a22)det(A)=a11a12a21a22\mathbf{A} = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \qquad \det(\mathbf{A}) = \begin{vmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{vmatrix}

需要三列以上时,把 matrix 换成 array 并在 \begin{array} 后声明列对齐方式(c 居中、l 左对齐、r 右对齐):

\begin{array}{c|c}
  x & y \\ \hline
  1 & 2
\end{array}
xy12\begin{array}{c|c} x & y \\ \hline 1 & 2 \end{array}

分段函数

cases 环境专门用来写分段定义,每行用 & 分隔「表达式」和「条件」:

f(x) = \begin{cases}
  x^2, & x \geq 0 \\
  -x,  & x < 0
\end{cases}
f(x)={x2,x0x,x<0f(x) = \begin{cases} x^2, & x \geq 0 \\ -x, & x < 0 \end{cases}

多行公式对齐

注意 KaTeX 不支持 align 环境,要用 aligned(少一个 i)并放在行间公式里。用 & 标出对齐位置,用 \\ 换行:

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

对齐位置由 & 决定,所以第二行的 & 前面留空格、第一行不留,让等号在源码里也对齐,改起来更清楚。

推导里常用 \xrightarrow{} 在箭头上下方写条件:

AnBA \xrightarrow{n \to \infty} B

文字、空格与字体

公式里的中文或说明性文字要用 \text{} 包起来,否则会被当成一串变量,字母之间还会被排成斜体:

\{ x \mid x \in \mathbb{R},\ \text{且 } x > 0 \}
{xxR, 且 x>0}\{ x \mid x \in \mathbb{R},\ \text{且 } x > 0 \}

LaTeX 会忽略源码里的普通空格,所以间距要显式写出来:

写法宽度用途
\,微分符号与被积函数之间
\ 中等普通词间空格
\quad一个汉字宽并列几个公式
\qquad两个汉字宽更宽的间隔
\!负的细空格收紧间距

字体方面,常用这几类:

写法效果含义
\mathbb{R}R\mathbb{R}数集(实数集、整数集)
\mathcal{L}L\mathcal{L}花体,常用于损失函数、拉普拉斯变换
\mathbf{x}x\mathbf{x}粗体,向量与矩阵
\mathrm{d}d\mathrm{d}正体,微分算子、单位
\mathit{}ABC\mathit{ABC}斜体文字
\operatorname{softmax}softmax\operatorname{softmax}多字母函数名,自动排成正体

同时处理上下标和装饰:\vec{v}v\vec{v}\hat{y}y^\hat{y}\bar{x}xˉ\bar{x}\dot{x}x˙\dot{x}\overline{AB}AB\overline{AB}\underbrace{a+b}_{n \text{ 项}}a+bn 项\underbrace{a+b}_{n \text{ 项}}

常用符号速查

类别写法效果
乘除\cdot \times \div\cdot ×\times ÷\div
正负\pm \mp±\pm \mp
比较\leq \geq \neq \approx \equiv\leq \geq \neq \approx \equiv
正比\propto \sim\propto \sim
集合\in \notin \subset \subseteq\in \notin \subset \subseteq
集合运算\cup \cap \emptyset\cup \cap \emptyset
箭头\to \rightarrow \Rightarrow \mapsto\to \rightarrow \Rightarrow \mapsto
逻辑\forall \exists \neg \land \lor\forall \exists ¬\neg \land \lor
特殊\infty \partial \nabla \hbar\infty \partial \nabla \hbar
函数\sin \cos \log \ln \exp \detsin\sin cos\cos log\log ln\ln exp\exp det\det

函数名要带反斜杠写(\sin 而不是 sin),否则会被排成三个变量相乘 sins \cdot i \cdot n

容易踩的坑

反斜杠在 Markdown 与 LaTeX 里都是特殊字符。 矩阵和 cases 的换行要写两个反斜杠 \\;花括号、下划线、百分号做字面量时要转义:\{\_\%

下划线在公式外是斜体语法。 $x_1$ 里面的没问题,但正文里想打出字面的下划线要写成 \_,或者用行内代码包起来。

美元符号当货币时容易误判。 行内公式的规则是:开头的 $ 后面不能紧跟空格,结尾的 $ 前面也不能是空格。所以 售价 $5 到 $10 这种写法有风险——如果两个 $ 恰好满足配对条件,中间的文字就会被当成公式。写钱的时候用 \$ 转义,或者放进行内代码。

行间公式前后要有空行。 紧贴在文字后面时,它可能不被识别成独立的公式块。

KaTeX 不是完整的 LaTeX。 下面这些常见写法在本站会渲染成红色报错

不支持的写法替代方案
\begin{align} \begin{equation} \begin{gather}aligned 并放进 $$...$$
\label{} \ref{} \eqref{}不支持公式编号与交叉引用,正文里手工写「式 (1)」
\usepackage \documentclass这是文档级命令,网页里没有对应概念
\begin{tabular}array 环境,或用 Markdown 表格
\hspace{} \vspace{} \hfill\, \ \quad \qquad 控制水平间距
自定义宏(\newcommand本站没有预置任何宏,重复的表达式请直接展开

最后一条实践建议:公式写完先在本地 npm run dev 看一眼。KaTeX 遇到不认识的命令会明确报错而不是悄悄排错,所以只要页面上没有红色文字,就说明语法没问题。