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


參考來源: