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 的核心就是兩件事:記住 $ 和 $$ 的區別,以及知道你用的平臺支援哪些語法。語法本身花個半小時就能上手,真正的功夫在排版細節和平臺相容性上。希望這篇指南能幫你少踩幾個坑。
參考來源: