1 这是什么
写技术内容绕不开公式。用文字描述一个积分,读者得在脑子里重建;用截图贴公式,改一个符号就得重新截;用 Word 的公式编辑器,粘到网页上格式全乱。
LaTeX 的思路是:用纯文本描述公式。比如
1 | \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$。 |
渲染效果:圆周率 约等于 3.14159,而 。
适合短公式、符号、变量。不要拿行内模式写长公式——它会把行高撑开,版面很难看。
2.2 独行公式
用双 $$ 包住,公式会单独占一行并居中。源码:
1 | $$\frac{a}{b} = \frac{c}{d}$$ |
渲染效果:
适合重要的、需要看清楚推导过程的公式。这是写技术文章的主力。
2.3 一个小细节:行内样式与显示样式
$$ 里的内容默认是“行内样式”,上下标和分数会挤在一起。想强制用“显示样式”(分数展开、上下标变大),在公式前面加 \displaystyle。对比:
| 写法 | 渲染效果 |
|---|---|
$$\frac{a}{b}$$ |
|
$$\displaystyle\frac{a}{b}$$ |
|
$$\sum_{i=1}^n i$$ |
|
$$\displaystyle\sum_{i=1}^n i$$ |
反过来,行内公式里想用显示样式也可以加 \displaystyle——但通常不建议,会让行高变得很高。
3 上下标
这是最常用的一组:
| 语法 | 渲染 | 说明 |
|---|---|---|
x^2 |
上标用 ^ |
|
x_i |
下标用 _ |
|
x^{10} |
多个字符必须加花括号 | |
x_{ij} |
同上 | |
x_i^2 |
上下标可同时写 | |
x_{i}^{2} |
也可以都加花括号 | |
{}^{14}_{6}C |
前置上下标(同位素) |
花括号这条一定要记住。 看对比:
| 你写的 | 渲染结果 | 对不对 |
|---|---|---|
x^10 |
★ 错,只有 1 是上标 | |
x^{10} |
✓ | |
x_ij |
★ 错 | |
x_{ij} |
✓ | |
a^b^c |
报错 | ★ 不能连续两个上标 |
a^{b^c} |
✓ 嵌套要加括号 |
这是新手最常犯的错误,没有之一。
另外,上下标可以嵌套任意层:x^{y^{z}} 渲染成 。
4 分数、根号、上下限
4.1 分数
源码:
1 | \frac{分子}{分母} |
嵌套也没问题:
| 语法 | 渲染 |
|---|---|
\frac{1}{2} |
|
\frac{1}{1+\frac{1}{x}} |
|
\dfrac{a}{b} |
|
\tfrac{a}{b} |
\dfrac 强制用显示样式(大号),\tfrac 强制用小号。行内公式里的分数会缩得很小,要写清楚的分数就加 \dfrac 或改用独行公式。
4.2 根号
1 | \sqrt{x} % 平方根 |
4.3 求和、积分、极限
用 _ 写下限、^ 写上标:
1 | \sum_{i=1}^{n} i^2 |
几个细节:
——\qquad 是大空格,用来分隔并排的公式。\quad 小一点,\, 是很小的空隙(常在积分里 dx 前面加)。
——\to 是箭头 ,也可以用 \rightarrow。
——上下限写在哪取决于模式:独行公式里,\sum、\int、\lim 的上下限默认在符号的正上方/正下方;行内模式里会挪到右边。想强制在某处显示,用 \limits 和 \nolimits:
| 写法 | 渲染 |
|---|---|
\sum_{i=1}^n(行内) |
|
\sum\limits_{i=1}^n(行内) |
多重积分:
| 语法 | 渲染 |
|---|---|
\iint |
|
\iiint |
|
\oint |
|
\int_a^b \int_c^d |
闭合积分和多重积分可以带上下限:\oint_C \vec{F}\cdot d\vec{r} →
5 多行公式
一个推导写好几步,需要对齐,这时候用 aligned 环境。源码:
1 | $$ |
渲染效果:
说明:
——\\ 是换行(两个反斜杠)。
——& 是对齐点。上面的写法让所有 = 对齐。想对齐别的位置就把 & 挪过去。
——aligned 必须写在 $$ 里面。这一点和完整的 LaTeX 不同。
对齐点也可以有多个,比如要让等号和注释各成一列:
1 | $$ |
如果不想对齐,只是想换行,用 gathered:
1 | $$ |
6 分段函数
用 cases 环境。源码:
1 | $$ |
写法要点和 aligned 一样:& 分隔“内容”和“条件”,\\ 换行。逗号后面加 & 是为了让所有条件左对齐。
带大括号的统一写法也很常见:
1 | $$ |
7 矩阵与向量
1 | $$ |
各种括号对应的环境:
| 环境 | 括号 | 渲染 |
|---|---|---|
matrix |
无括号 | |
pmatrix |
圆括号 ( ) | |
bmatrix |
方括号 [ ] | |
Bmatrix |
花括号 { } | |
vmatrix |
竖线 | | | |
Vmatrix |
双竖线 ‖ ‖ |
& 分隔同一行的元素,\\ 分隔行。
省略号:
| 语法 | 渲染 | 用途 |
|---|---|---|
\cdots |
横向 | |
\vdots |
纵向 | |
\ddots |
斜向 |
一个带省略号的矩阵:
1 | $$ |
行内的小矩阵用 \binom(组合数)或 \begin{smallmatrix}:
| 语法 | 渲染 |
|---|---|
\binom{n}{k} |
|
\begin{smallmatrix} a & b \\ c & d \end{smallmatrix} |
8 自动调整大小的括号
直接写 ( ) 的话,括号大小是固定的,包不住高一点的式子。对比:
| 写法 | 渲染 |
|---|---|
(\frac{a}{b}) |
|
\left(\frac{a}{b}\right) |
用 \left 和 \right 让括号自动适应内容高度:
| 语法 | 渲染 |
|---|---|
\left( x \right) |
|
\left[ x \right] |
|
\left\{ x \right\} |
|
| `\left | x \right |
\left| x \right| |
|
\left\langle x \right\rangle |
|
\left\lceil x \right\rceil |
|
\left\lfloor x \right\rfloor |
注意:\left 和 \right 必须成对出现。如果只想让左边变大、右边不要括号,用 \right.(一个点表示“空的右括号”):
1 | \left. \frac{dy}{dx} \right|_{x=0} |
这是求导后代入某点的常见写法。
还可以用 \big \Big \bigg \Bigg 手动指定大小(前面加 l/r 区分左右):
| 语法 | 渲染 |
|---|---|
\big( x \big) |
|
\Big( x \Big) |
|
\bigg( x \bigg) |
|
\Bigg( x \Bigg) |
9 排版细节
9.1 空格
LaTeX 会忽略公式里你敲的空格。a b 和 ab 渲染出来一样。要加空格得用命令:
| 命令 | 宽度 | 渲染 |
|---|---|---|
\, |
很窄 | |
\: |
稍宽 | |
\; |
更宽 | |
\ (反斜杠+空格) |
一个空格 | |
\quad |
一个字宽 | |
\qquad |
两个字宽 | |
\! |
负空格(收紧) |
9.2 公式里的文字
公式里直接写中文或英文单词,会被当成变量,斜体且没有空格。对比:
| 写法 | 渲染 |
|---|---|
x = speed \times time |
|
x = \text{speed} \times \text{time} |
要用 \text{} 包住。公式里出现中文时尤其要注意——不包起来的话,字距会很难看:
| 写法 | 渲染 |
|---|---|
\text{当} x > 0 \text{时} |
|
当 x > 0 时(不包) |
9.3 公式编号
想让公式带编号,用 \tag{}:
1 | $$E = mc^2 \tag{1.1}$$ |
技术文章里我习惯给重要公式编号,正文里就能写“由 (1.1) 式得”。
编号内容和章节对应比较清楚,比如第 3 章第 2 个公式叫 \tag{3.2}。
9.4 颜色与框
部分渲染器支持 \color 和 \boxed:
| 语法 | 渲染 |
|---|---|
\boxed{E = mc^2} |
|
\color{red}{x} |
\boxed 用来强调关键结论很有用。颜色的支持度不稳定,不同渲染器表现不一样,建议少用。
9.5 加粗与强调
| 语法 | 渲染 | 说明 |
|---|---|---|
\mathbf{x} |
正体粗(向量、矩阵常用) | |
\boldsymbol{\alpha} |
粗体希腊字母 | |
\mathit{x} |
斜体 | |
\mathrm{d} |
正体(如微分符号 d) | |
\mathbb{R} |
空心(实数集) | |
\mathcal{L} |
花体 | |
\mathfrak{g} |
哥特体 | |
\vec{a} |
箭头向量 | |
\hat{x} |
帽子 | |
\bar{x} |
上划线 | |
\tilde{x} |
波浪线 | |
\dot{x} |
一个点(对时间求导) | |
\ddot{x} |
两个点 | |
\overline{AB} |
长上划线 | |
\underline{x} |
下划线 | |
\overrightarrow{AB} |
长箭头 | |
\overbrace{x+y}^{n} |
上花括号 | |
\underbrace{x+y}_{n} |
下花括号 |
数学排版惯例:向量和矩阵用 \mathbf 或 \boldsymbol,集合用 \mathbb,算子用 \mathcal,微分符号 d 用 \mathrm{d}(正体,因为它是算子不是变量)。
10 符号速查表
下面按类别列出常用符号的代码与渲染。可以用浏览器的“查找”在表里搜。
10.1 小写希腊字母
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|---|---|
\alpha |
\beta |
\gamma |
\delta |
||||
\epsilon |
\varepsilon |
\zeta |
\eta |
||||
\theta |
\vartheta |
\iota |
\kappa |
||||
\lambda |
\mu |
\nu |
\xi |
||||
\pi |
\varpi |
\rho |
\varrho |
||||
\sigma |
\varsigma |
\tau |
\upsilon |
||||
\phi |
\varphi |
\chi |
\psi |
||||
\omega |
10.2 大写希腊字母
注意:只有形状与拉丁字母不同的才有命令,像 Alpha、Beta 这些长得和 A、B 一样的直接写拉丁字母。
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|---|---|
\Gamma |
\Delta |
\Theta |
\Lambda |
||||
\Xi |
\Pi |
\Sigma |
\Upsilon |
||||
\Phi |
\Psi |
\Omega |
10.3 二元运算符
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|---|---|
\pm |
\mp |
\times |
\div |
||||
\cdot |
\ast |
\star |
\circ |
||||
\bullet |
\oplus |
\ominus |
\otimes |
||||
\odot |
\cup |
\cap |
\sqcup |
||||
\sqcap |
\vee |
\wedge |
\setminus |
||||
\wr |
\diamond |
\triangleleft |
\triangleright |
10.4 关系符
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|---|---|
\leq |
\geq |
\neq |
\approx |
||||
\equiv |
\sim |
\simeq |
\cong |
||||
\propto |
\ll |
\gg |
\asymp |
||||
\prec |
\succ |
\preceq |
\succeq |
||||
\subset |
\supset |
\subseteq |
\supseteq |
||||
\in |
\notin |
\ni |
\not\ni |
||||
\perp |
\parallel |
\mid |
\nmid |
||||
\doteq |
\models |
\vdash |
\dashv |
||||
\lesssim |
\gtrsim |
\lessgtr |
\gtrless |
10.5 箭头
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|---|---|
\to |
\rightarrow |
\leftarrow |
\leftrightarrow |
||||
\Rightarrow |
\Leftarrow |
\Leftrightarrow |
\mapsto |
||||
\uparrow |
\downarrow |
\updownarrow |
\Uparrow |
||||
\nearrow |
\searrow |
\swarrow |
\nwarrow |
||||
\longrightarrow |
\longleftarrow |
\Longrightarrow |
\Longleftrightarrow |
||||
\hookrightarrow |
\hookleftarrow |
\rightharpoonup |
\leftharpoonup |
10.6 大运算符
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|
\sum |
\prod |
\coprod |
|||
\int |
\iint |
\iiint |
|||
\oint |
\bigcup |
\bigcap |
|||
\bigoplus |
\bigotimes |
\bigodot |
|||
\bigvee |
\bigwedge |
\biguplus |
|||
\bigsqcup |
10.7 其它常用符号
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|---|---|
\infty |
\partial |
\nabla |
\forall |
||||
\exists |
\nexists |
\neg |
\emptyset |
||||
\varnothing |
\angle |
\triangle |
\square |
||||
\surd |
\top |
\bot |
\aleph |
||||
\hbar |
\ell |
\imath |
\jmath |
||||
\Re |
\Im |
\wp |
\prime |
||||
\degree |
\circ |
\bullet |
\dots |
||||
\ldots |
\cdots |
\vdots |
\ddots |
||||
\clubsuit |
\diamondsuit |
\heartsuit |
\spadesuit |
||||
\checkmark |
\mho |
\Finv |
\Game |
10.8 定界符
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|
( ) |
[ ] |
\{ \} |
|||
\langle \rangle |
\lceil \rceil |
\lfloor \rfloor |
|||
| |
\backslash |
\uparrow |
|||
\Uparrow |
\downarrow |
\Downarrow |
|||
\updownarrow |
\Updownarrow |
\vert |
10.9 函数名
函数名一定要加反斜杠,否则会被当成变量相乘(斜体):
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|
\sin |
\cos |
\tan |
|||
\cot |
\sec |
\csc |
|||
\arcsin |
\arccos |
\arctan |
|||
\sinh |
\cosh |
\tanh |
|||
\log |
\ln |
\lg |
|||
\exp |
\deg |
\dim |
|||
\ker |
\hom |
\arg |
|||
\max |
\min |
\sup |
|||
\inf |
\lim |
\limsup |
|||
\liminf |
\gcd |
\det |
|||
\bmod |
\pmod{n} |
\Pr |
对比一下加与不加:
| 写法 | 渲染 |
|---|---|
sin x |
|
\sin x |
10.10 声调与修饰符
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|
\hat{a} |
\check{a} |
\breve{a} |
|||
\acute{a} |
\grave{a} |
\tilde{a} |
|||
\bar{a} |
\vec{a} |
\dot{a} |
|||
\ddot{a} |
\dddot{a} |
\mathring{a} |
|||
\widehat{abc} |
\widetilde{abc} |
\overline{abc} |
|||
\underline{abc} |
\overrightarrow{ab} |
\overleftarrow{ab} |
10.11 括号与堆叠
| 代码 | 渲染 |
|---|---|
\binom{n}{k} |
|
\dbinom{n}{k} |
|
\tbinom{n}{k} |
|
\overbrace{a+b}^{n} |
|
\underbrace{a+b}_{n} |
|
\stackrel{def}{=} |
|
\underset{x}{\max} |
|
\overset{x}{\max} |
|
{n \choose k} |
|
{n \atop k} |
|
\substack{a \\ b} |
10.12 间距与布局
| 代码 | 说明 | 渲染 |
|---|---|---|
\, |
细空格 | |
\: |
中等空格 | |
\; |
较宽空格 | |
\quad |
一个字宽 | |
\qquad |
两个字宽 | |
\! |
负空格 | |
\hspace{1cm} |
指定宽度 | |
\phantom{x} |
占位但不可见 | |
\hphantom{x} |
水平占位 | |
\vphantom{x} |
垂直占位 | — |
\text{文字} |
正文文字 | |
\textbf{文字} |
粗体文字 | |
\mathit{文字} |
斜体文字 |
10.13 集合与逻辑
| 代码 | 渲染 | 代码 | 渲染 | 代码 | 渲染 |
|---|---|---|---|---|---|
\mathbb{R} |
\mathbb{N} |
\mathbb{Z} |
|||
\mathbb{Q} |
\mathbb{C} |
\mathbb{P} |
|||
\mathcal{A} |
\mathcal{B} |
\mathcal{F} |
|||
\mathfrak{A} |
\mathfrak{g} |
\mathfrak{h} |
|||
\varnothing |
\emptyset |
\complement |
|||
\therefore |
\because |
\square |
|||
\blacksquare |
\triangle |
\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 的标准做法,为了无障碍阅读)。这个页面的公式也能这么挖出来。
另外推荐两个速查表:
| 资源 | 地址 |
|---|---|
| KaTeX 支持的命令 | https://katex.org/docs/supported.html |
| 综合符号表 | https://en.wikibooks.org/wiki/LaTeX/Mathematics |
13 最后
LaTeX 的语法量比 Markdown 大不少,但常用的就那么几十个命令。上面这些覆盖了写技术内容 95% 的场景。
真正要养成的习惯是三个:上下标加花括号、函数名加反斜杠、公式里的文字用 \text{} 包。这三个记住了,剩下的边用边查。
至于公式排版得漂不漂亮,那是次要的。把推导讲清楚比把公式排好看重要得多。
第 10 节那张符号表我尽量列全了,实际用的时候直接在页面里搜命令名就行。