Markdown LaTeX 数学公式完整指南
Markdown LaTeX 数学公式完整指南
写技术博客或者做笔记的时候,遇到数学公式怎么办?纯文本写不出 ∑ 和 ∫,截图又不好维护。好在 Markdown 支持通过 LaTeX 语法来编写数学公式——只要你的编辑器或平台有对应的渲染引擎就行。
这篇文章把 markdown latex 的用法从头到尾讲一遍:从最基本的行内公式和行间公式开始,到常用符号速查,再到不同平台的配置和兼容性差异。不管你是在 Jupyter Notebook 写笔记,还是在 GitHub 写 README,或者用 Obsidian 做知识管理,都能找到对应的部分。
说实话,LaTeX 数学公式的语法本身不算复杂,但坑都在细节里——不同平台对分隔符的支持不一样,有些命令在这个编辑器能用换个就不行。我自己在 GitHub 和 Obsidian 之间切换的时候踩过不少坑,后面会详细说。
LaTeX 在 Markdown 中的基本规则
先说一个很多人搞混的事情:Markdown 本身并不解析 LaTeX。你在 Markdown 文件里写的 $E=mc^2$,是靠 MathJax 或 KaTeX 这样的渲染引擎来识别和渲染的。不同的工具和平台用不同的引擎,所以同样的写法在不同平台上效果可能不一样。
这也是为什么有的人在 Typora 里公式好好的,推到 GitHub 上就变成了纯文本。
两种数学模式
LaTeX 数学公式有两种写法:
| 模式 | 分隔符 | 用途 | 示例 |
|---|---|---|---|
| 行内公式 | $...$ | 嵌在文字中间 | 质能方程 $E=mc^2$ 很著名 |
| 行间公式 | $$...$$ | 独占一行,居中显示 | 见下方示例 |
行内公式用单个美元符号包裹,渲染后和文字在同一行:
勾股定理可以写成 $a^2 + b^2 = c^2$,其中 $a$ 和 $b$ 是直角边。渲染效果:勾股定理可以写成 $a^2 + b^2 = c^2$,其中 $a$ 和 $b$ 是直角边。
行间公式用双美元符号,单独占一行:
$$
\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n
$$渲染效果:
$$ \sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n $$
对了,有些平台(比如纯 MathJax 环境)还支持 \( ... \) 做行内公式、\[ ... \] 做行间公式。但在 GitHub、Obsidian、VS Code 这些主流工具里,统一用 $ 和 $$ 就对了,兼容性最好。
基础语法:从简单到复杂
上下标
上下标是最常用的操作,用 ^ 表示上标、_ 表示下标:
$x^2$ → 上标
$x_i$ → 下标
$x^{10}$ → 多字符上标要加花括号
$x_{i,j}$ → 多字符下标也要加花括号这里有个新手常犯的错误:x^10 渲染出来是 $x^1$ 后面跟个 0,只有 x^{10} 才能正确显示 $x^{10}$。花括号的作用是告诉 LaTeX "这整个是一组"。
分数
用 \frac{分子}{分母} 写分数:
$\frac{1}{2}$
$\frac{a+b}{c+d}$渲染效果:$\frac{1}{2}$ 和 $\frac{a+b}{c+d}$
在行内公式里,分数会被压缩得很小。如果你希望行内公式中的分数也能正常显示大小,可以用 \dfrac(display fraction)代替 \frac:
$\dfrac{1}{2}$ 比 $\frac{1}{2}$ 大根号
\sqrt{} 是平方根,\sqrt[n]{} 是 n 次方根:
$\sqrt{2}$ → √2
$\sqrt[3]{8}$ → ³√8
$\sqrt{a^2+b^2}$ → √(a²+b²)求和与积分
这两个在数学和统计里出现频率很高:
$\sum_{i=1}^{n} x_i$ → 求和
$\prod_{i=1}^{n} x_i$ → 连乘
$\int_{0}^{\infty} f(x)dx$ → 定积分
$\iint$ → 二重积分
$\iiint$ → 三重积分
$\oint$ → 环路积分希腊字母
希腊字母是写公式的基本功,这里列一张最常用的:
| 小写 | 语法 | 大写 | 语法 |
|---|---|---|---|
| $\alpha$ | \alpha | $A$ | A |
| $\beta$ | \beta | $B$ | B |
| $\gamma$ | \gamma | $\Gamma$ | \Gamma |
| $\delta$ | \delta | $\Delta$ | \Delta |
| $\epsilon$ | \epsilon | $E$ | E |
| $\theta$ | \theta | $\Theta$ | \Theta |
| $\lambda$ | \lambda | $\Lambda$ | \Lambda |
| $\mu$ | \mu | $M$ | M |
| $\pi$ | \pi | $\Pi$ | \Pi |
| $\sigma$ | \sigma | $\Sigma$ | \Sigma |
| $\phi$ | \phi | $\Phi$ | \Phi |
| $\omega$ | \omega | $\Omega$ | \Omega |
完整的希腊字母列表很长,实际写公式的时候 $\alpha, \beta, \gamma, \theta, \lambda, \mu, \sigma, \omega$ 这几个用得最多。
括号与定界符
普通小括号 () 和中括号 [] 在公式里不会自动缩放。要想让括号跟着内容变大,用 \left 和 \right:
# 普通括号——大小不变
$(\frac{a}{b})$
# 自适应括号——跟着内容变大
$\left(\frac{a}{b}\right)$除了圆括号,还有方括号 \left[...\right]、花括号 \left\{...\right\}(注意花括号本身要转义)、绝对值 \left|...\right|。
矩阵
矩阵用 \begin{matrix}...\end{matrix} 环境,行之间用 \\ 分隔,列之间用 & 分隔:
$$
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
$$渲染效果(pmatrix 是带圆括号的矩阵):
$$ \begin{pmatrix} a & b \ c & d \end{pmatrix} $$
不同类型的矩阵用不同的环境:
| 环境 | 效果 | 语法 |
|---|---|---|
matrix | 无边框 | \begin{matrix}...\end{matrix} |
pmatrix | 圆括号 | \begin{pmatrix}...\end{pmatrix} |
bmatrix | 方括号 | \begin{bmatrix}...\end{bmatrix} |
Bmatrix | 花括号 | \begin{Bmatrix}...\end{Bmatrix} |
vmatrix | 竖线(行列式) | \begin{vmatrix}...\end{vmatrix} |
省略号用 \cdots(水平)和 \vdots(垂直):
$$
\begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{bmatrix}
$$多行公式对齐
当公式很长需要换行并对齐时,用 align 环境,& 标记对齐位置:
$$
\begin{aligned}
f(x) &= (x+1)^2 \\
&= x^2 + 2x + 1
\end{aligned}
$$顺便提一句,align 在某些平台可能不支持。GitHub 目前就不支持 align 环境,需要用其他方式绕过。在 GitHub 上可以用 & 和换行来勉强实现,但效果不理想。如果需要在 GitHub 上写多行对齐公式,我的建议是把整个推导拆成多个独立公式。
分段函数
用 cases 环境写分段函数:
$$
f(x) = \begin{cases}
x^2, & x \geq 0 \\
-x^2, & x < 0
\end{cases}
$$渲染效果:
$$ f(x) = \begin{cases} x^2, & x \geq 0 \ -x^2, & x < 0 \end{cases} $$
MathJax 和 KaTeX:两个渲染引擎怎么选
前面说过,Markdown 里的 LaTeX 公式是靠渲染引擎来显示的。目前主流有两个:MathJax 和 KaTeX。
| 对比项 | MathJax | KaTeX |
|---|---|---|
| 渲染速度 | 较慢(服务器端处理) | 很快(纯客户端) |
| LaTeX 支持范围 | 非常广泛 | 覆盖常用语法,部分高级功能不支持 |
| 方程编号 | 支持 | 有限支持 |
| 交叉引用 | 支持 | 不支持 |
| 字体 | 更精细 | 也不错 |
| 体积 | 较大 | 很小 |
简单说,如果你只需要写基本的数学公式,KaTeX 更快更轻量。如果需要复杂的 LaTeX 排版功能(比如编号、交叉引用),MathJax 功能更全。
不同平台默认用不同的引擎:
- Jupyter Notebook:MathJax
- GitHub:自研引擎(基于 MathJax,但支持范围有限)
- Obsidian:MathJax
- VS Code(Markdown Preview Enhanced 插件):KaTeX(可切换)
- Typora:MathJax
参考:MathJax 官方文档 和 KaTeX 官方支持列表
各平台 Markdown LaTeX 支持对比
这是很多文章都没讲清楚的部分。我自己在 GitHub、Jupyter、Obsidian、VS Code、Typora 上都实际用过 LaTeX 公式,确实发现了不少差异。
| 功能 | GitHub | Jupyter | Obsidian | VS Code+插件 | Typora |
|---|---|---|---|---|---|
行内 $...$ | ✅ | ✅ | ✅ | ✅ | ✅ |
行间 $$...$$ | ✅ | ✅ | ✅ | ✅ | ✅ |
\begin{align} | ❌ | ✅ | ✅ | ✅ | ✅ |
\begin{cases} | ❌ | ✅ | ✅ | ✅ | ✅ |
\tag{} 编号 | ❌ | ✅ | ✅ | ✅ | ✅ |
| 矩阵环境 | ✅ | ✅ | ✅ | ✅ | ✅ |
\color{} | ❌ | ✅ | ✅ | ✅ | ✅ |
\unicode{} | ❌ | 部分 | ✅ | ✅ | ✅ |
GitHub 的支持范围是最受限的。有一次我在 Obsidian 里写了一篇文章,用 align 环境做了多行公式对齐,效果很好。结果推到 GitHub 后,整个公式块变成了原始代码——GitHub 根本不认 align 环境。后来我不得不把每个公式拆开单独写。
如果你的文章要在 GitHub 上展示,尽量只用基本的 $ 和 $$,加上基础的上下标、分数、求和积分这些。矩阵在 GitHub 上倒是支持的。
如何配置 MathJax / KaTeX
如果你的平台默认不渲染 LaTeX(比如自己搭的博客),需要手动配置。
MathJax 3 配置
在 HTML 的 <head> 里加入:
<script>
MathJax = {
tex: {
inlineMath: [['$', '$']],
displayMath: [['$$', '$$']]
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>这段配置告诉 MathJax:用 $...$ 做行内公式、$$...$$ 做行间公式。不加这个配置的话,MathJax 默认只认 \( ... \) 和 \[ ... \]。
KaTeX 配置
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body, {
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false}
]
});">
</script>Jekyll / Hugo 博客
Jekyll 和 Hugo 都是在模板的 <head> 里加上面的代码就行。Jekyll 的话一般改 _layouts/default.html,Hugo 改 layouts/partials/head.html 或者用短代码(shortcode)。
如果是 Hugo,也可以在 hugo.toml 里配置:
[markup.goldmark.renderer]
unsafe = true
[markup.goldmark.extensions.passthrough]
enable = true
[markup.goldmark.extensions.passthrough.delimiters]
inline = [["$", "$"]]
block = [["$$", "$$"]]常用符号速查表
这部分是按需查阅的,不用刻意背。
运算符
| 符号 | 语法 | 说明 |
|---|---|---|
| $\times$ | \times | 乘号 |
| $\div$ | \div | 除号 |
| $\pm$ | \pm | 正负号 |
| $\mp$ | \mp | 负正号 |
| $\cdot$ | \cdot | 点乘 |
| $\leq$ | \leq | 小于等于 |
| $\geq$ | \geq | 大于等于 |
| $\neq$ | \neq | 不等于 |
| $\approx$ | \approx | 约等于 |
| $\equiv$ | \equiv | 恒等于 |
| $\in$ | \in | 属于 |
| $\notin$ | \notin | 不属于 |
| $\subset$ | \subset | 子集 |
| $\supset$ | \supset | 超集 |
| $\cup$ | \cup | 并集 |
| $\cap$ | \cap | 交集 |
| $\emptyset$ | \emptyset | 空集 |
| $\infty$ | \infty | 无穷 |
| $\partial$ | \partial | 偏导 |
箭头
| 符号 | 语法 |
|---|---|
| $\rightarrow$ | \rightarrow |
| $\leftarrow$ | \leftarrow |
| $\Rightarrow$ | \Rightarrow |
| $\Leftarrow$ | \Leftarrow |
| $\leftrightarrow$ | \leftrightarrow |
| $\mapsto$ | \mapsto |
函数名
LaTeX 里的函数名要用反斜杠开头,否则会变成斜体(变量风格):
# 正确写法(正体)
$\sin(x)$, $\cos(x)$, $\log(x)$, $\lim$, $\max$
# 错误写法(变成斜体变量)
$sin(x)$, $cos(x)$常用的函数名:\sin, \cos, \tan, \log, \ln, \exp, \lim, \max, \min, \sup, \inf, \det。
重音符号
| 效果 | 语法 | 用途 |
|---|---|---|
| $\hat{x}$ | \hat{x} | 估计值 |
| $\bar{x}$ | \bar{x} | 平均值 |
| $\vec{x}$ | \vec{x} | 向量 |
| $\dot{x}$ | \dot{x} | 导数 |
| $\tilde{x}$ | \tilde{x} | 变换 |
| $\overline{x}$ | \overline{x} | 长平均 |
空格控制
LaTeX 数学模式里,空格会被自动忽略。如果需要手动加空格:
| 语法 | 宽度 | 效果 |
|---|---|---|
\, | 小空格 | $a\,b$ |
\; | 中空格 | $a\;b$ |
\quad | 大空格 | $a\quad b$ |
\qquad | 超大空格 | $a\qquad b$ |
\! | 负空格 | $a!b$ |
公式排版的一些心得
写多了以后,我发现有些细节虽然不影响正确性,但会让公式看起来更专业:
不要在指数和积分里滥用 \frac。行内公式里嵌套分数会让整个公式变得很紧凑,不好看。比如 $\frac{d}{dx} \frac{x^2}{x+1}$ 就不如写成 $(d/dx)(x^2/(x+1))$ 或者用行间公式。在行间公式里用 \frac 完全没问题,但在行内公式里要克制。
集合符号里的竖线用 \mid 而不是 |。\{x \mid x > 0\} 的间距比 `{x | x > 0}$ 好看。
多重积分用 \iint 和 \iiint,不要写成三个单独的 \int,间距处理不一样。
复杂公式优先用行间公式。行内公式受限于行高,复杂内容会挤压得很紧。如果你的公式有三个以上的层级(比如分数套分数),直接用 $$ 放到单独的行里。
常见问题排查
公式显示为原始代码
最常见的原因:平台没有启用数学公式渲染。
- GitHub:需要在
$$块的前后各留一个空行 - 自建博客:检查 MathJax/KaTeX 的配置是否正确
- VS Code:需要安装 Markdown Preview Enhanced 或 Markdown Math 插件
$ 符号被当作公式解析
如果你想在文章中显示美元符号本身(不是公式),有几种方法:
1. 用反斜杠转义:\$100
2. 放在代码块里:`$100`
3. 用 HTML 实体:$100公式渲染结果和预期不一样
几个常见的语法错误:
x^10→ 只有1是上标,要写x^{10}\frac ab cd→ 只有a和b是分子分母,要写\frac{ab}{cd}- 花括号不匹配 → 仔细检查每个
{都有对应的}
GitHub 上公式不显示
GitHub 从 2022 年开始原生支持 LaTeX 数学公式,但有几个限制:
- 行间公式
$$前后必须有空行 - 不支持
\begin{align}等高级环境 - 不支持
\color、\tag等格式化命令
实战示例
把上面的语法串起来,看几个完整的例子:
一元二次方程的求根公式
$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$正态分布概率密度函数
$$
f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}
$$欧拉公式(最美公式之一)
$$
e^{i\pi} + 1 = 0
$$矩阵乘法
$$
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
\begin{pmatrix}
x \\
y
\end{pmatrix}
=
\begin{pmatrix}
ax + by \\
cx + dy
\end{pmatrix}
$$你可能还需要
- Markdown 上标和下标 — 不用 LaTeX 也能写简单的上下标
- Markdown 代码块 — 代码高亮语法
- Markdown 表格 — 表格语法速查
说到底,markdown latex 的核心就是两件事:记住 $ 和 $$ 的区别,以及知道你用的平台支持哪些语法。语法本身花个半小时就能上手,真正的功夫在排版细节和平台兼容性上。希望这篇指南能帮你少踩几个坑。
参考来源: