Markdown LaTeX 数学公式完整指南

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。

对比项MathJaxKaTeX
渲染速度较慢(服务器端处理)很快(纯客户端)
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 公式,确实发现了不少差异。

功能GitHubJupyterObsidianVS 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 = [["$$", "$$"]]

参考:Hugo 官方文档 - MathematicsJekyll MathJax 配置

常用符号速查表

这部分是按需查阅的,不用刻意背。

运算符

符号语法说明
$\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 实体:&dollar;100

公式渲染结果和预期不一样

几个常见的语法错误:

  • x^10 → 只有 1 是上标,要写 x^{10}
  • \frac ab cd → 只有 ab 是分子分母,要写 \frac{ab}{cd}
  • 花括号不匹配 → 仔细检查每个 { 都有对应的 }

GitHub 上公式不显示

GitHub 从 2022 年开始原生支持 LaTeX 数学公式,但有几个限制:

  1. 行间公式 $$ 前后必须有空行
  2. 不支持 \begin{align} 等高级环境
  3. 不支持 \color\tag 等格式化命令

参考:GitHub 官方文档 - Writing mathematical expressions

实战示例

把上面的语法串起来,看几个完整的例子:

一元二次方程的求根公式

$$
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 的核心就是两件事:记住 $$$ 的区别,以及知道你用的平台支持哪些语法。语法本身花个半小时就能上手,真正的功夫在排版细节和平台兼容性上。希望这篇指南能帮你少踩几个坑。


参考来源: