Markdown で数式を書く方法を、用語の意味・方言ごとの書き方と表示エンジン・LaTeX 数式の基本の順にまとめたリファレンスです。
Markdown の方言ごとの拡張記法の一覧は、方言・拡張記法のまとめを参照してください。
Markdown 記法:方言・拡張記法のまとめ|CommonMark / GFM 以外
Markdownには CommonMark / GFM 以外にも多くの方言・拡張記法があります。GitLab(GLFM)・Pandoc・Markdown Extra・markdown-it・MultiMarkdown・kramdown・Markdo... 続きを読む用語の整理
数式まわりの用語は、「数式の書き方(記法)」と「数式を表示するためのツール」が混ざって使われています。
| 用語 | 種類 | 内容 |
|---|---|---|
| TeX(テフ) | 組版システム | Donald Knuth が作った、論文や書籍を組版するためのシステム。数式を frac{1}{2} のようなコマンドで書く |
| LaTeX(ラテフ) | TeX の拡張 | TeX を使いやすくしたマクロの集まり。論文の執筆で広く使われている |
| LaTeX の数式記法 | 記法 | LaTeX の「数式の部分」だけの書き方。Markdown の数式は、すべてこの書き方で書く |
| MathJax(マスジャックス) | 表示ツール | LaTeX の数式記法を、Web ページ上で数式として表示する JavaScript ライブラリ。対応しているコマンドが多い |
| KaTeX(カテフ) | 表示ツール | MathJax と同じ役割のライブラリ。MathJax より表示が速いが、対応しているコマンドは少なめ |
| MathML | HTML の仕様 | 数式を表すための HTML のタグ(<math> <mfrac> など)。いまの主要ブラウザは MathML を直接表示できる |
関係をまとめると、次のようになります。
Markdown の中に、LaTeX の数式記法で数式を書く
↓
MathJax や KaTeX が、数式として表示する
(出力は HTML + CSS、SVG、MathML のいずれか)
MathJax・KaTeX が対応しているのは、LaTeX の数式の部分だけです。LaTeX の文書全体(documentclass など)は書けません。
Markdown での数式の書き方(区切り記号)
数式を囲む記号(区切り記号)は、方言によって違います。
| 方言 | $…$ |
$$…$$ |
$`…`$ |
```math |
(…) / […] |
|---|---|---|---|---|---|
| GitHub | ○ | ○ | ○ | ○ | - |
| GitLab | ○ | ○ | ○ | ○ | - |
| Pandoc | ○ | ○ | - | - | △ |
| kramdown | - | ○ | - | - | - |
| MultiMarkdown | ○ | ○ | - | - | △ |
| markdown-it | プラグイン次第 | プラグイン次第 | - | - | - |
| MPE | ○ | ○ | - | ○ | ○ |
| Qiita | ○ | ○ | ○ | ○ | - |
| Zenn | ○ | ○ | - | - | - |
| Obsidian | ○ | ○ | - | - | - |
| VitePress | △ | △ | - | - | - |
| Starlight | △ | △ | - | - | - |
$…$はインライン(文中)、$$…$$はブロック(独立した行)の数式です。- Pandoc:
(…)は拡張(tex_math_single_backslash)を有効にした場合だけ使えます。 - MultiMarkdown:
\(…\)\[…\]と、バックスラッシュを 2 個にして書きます。 - kramdown:
$$だけで、段落の中にあればインライン、単独の段落ならブロックになります。 - VitePress:設定(
markdown.math: true)とmarkdown-it-mathjax3のインストールが必要です。 - Starlight:既定では使えません。
remark-mathとrehype-katex(またはrehype-mathjax)を追加すると使えます。
どの方言でも使える書き方
インラインは $…$、ブロックは前後に空行を入れた $$…$$ が、最も多くの方言で使えます(kramdown を除く)。
質量とエネルギーの関係は $E = mc^2$ で表されます。
$$
E = mc^2
$$
GitHub・GitLab・Qiita では、$`…`$ と ```math も使えます。この 2 つは、後述の「Markdown の記号との衝突」が起きない書き方です。
質量とエネルギーの関係は $`E = mc^2`$ で表されます。
```math
E = mc^2
```
方言ごとの表示エンジン
同じ数式でも、方言によって表示に使われるライブラリ(MathJax か KaTeX か)が違います。使えるコマンドはライブラリで決まるので、書いた数式が方言によって表示されないことがあります。
| 方言 | 表示エンジン |
|---|---|
| GitHub | MathJax |
| GitLab | KaTeX |
| Pandoc | 出力時にオプションで選ぶ(--mathjax --katex --mathml など) |
| kramdown | 既定は MathJax 向けの出力(設定 math_engine で KaTeX なども選べる) |
| MultiMarkdown | MathJax 向けの区切り記号で出力 |
| markdown-it | プラグイン次第(markdown-it-texmath など、KaTeX を使うものが多い) |
| MPE | KaTeX(既定)/ MathJax(設定で切り替え) |
| Qiita | MathJax |
| Zenn | KaTeX |
| Obsidian | MathJax |
| VitePress | MathJax(ビルド時に SVG に変換) |
| Starlight | 追加するプラグイン次第(KaTeX / MathJax) |
LaTeX 数式の基本
ここからは、MathJax・KaTeX のどちらでも使える基本的な書き方です。以下の例は、$…$ や $$…$$ の中に書きます。
上付き・下付き
| 書き方 | 意味 |
|---|---|
x^2 |
x の 2 乗(上付き) |
a_1 |
a の添字 1(下付き) |
x^{10} |
2 文字以上は { } で囲む(x^10 だと「x の 1 乗 × 0」になる) |
a_{ij}^2 |
下付きと上付きを同時に |
e^{-x^2} |
入れ子にもできる |
分数・根号
| 書き方 | 意味 |
|---|---|
frac{1}{2} |
分数(分子、分母の順) |
dfrac{1}{2} |
文中でも大きく表示する分数 |
sqrt{2} |
平方根 |
sqrt[3]{8} |
3 乗根 |
演算子・関係記号
| 書き方 | 記号 | 書き方 | 記号 |
|---|---|---|---|
times |
× | div |
÷ |
pm |
± | cdot |
・(中黒の積) |
leq |
≤ | geq |
≥ |
neq |
≠ | approx |
≈ |
equiv |
≡ | propto |
∝ |
in |
∈ | subset |
⊂ |
cup |
∪ | cap |
∩ |
to |
→ | Rightarrow |
⇒ |
infty |
∞ | partial |
∂ |
ギリシャ文字
小文字は alpha beta gamma delta epsilon theta lambda mu pi sigma phi omega のように、読み方をそのままコマンドにします。頭文字を大文字にすると、大文字になります(Gamma Delta Sigma Omega)。
総和・積分・極限
| 書き方 | 意味 |
|---|---|
sum_{k=1}^{n} k |
総和(Σ) |
prod_{k=1}^{n} k |
総乗(Π) |
int_{0}^{1} x , dx |
積分 |
iint oint |
重積分・周回積分 |
lim_{x to 0} frac{sin x}{x} |
極限 |
_ と ^ の中身は、インラインでは記号の右側に、ブロックでは記号の上下に表示されます。
括弧
| 書き方 | 意味 |
|---|---|
( ) [ ] |
丸括弧・角括弧(そのまま書く) |
{ } |
波括弧({ } はグループ化の記号なので、 を付ける) |
left( frac{1}{2} right) |
中身の高さに合わせて、括弧を大きくする |
vert x vert |
絶対値(縦線 1 本の記号と同じ。表の中では縦線が区切りとして扱われるので、vert を使う) |
langle x rangle |
山括弧 |
行列
begin{pmatrix}
a & b \
c & d
end{pmatrix}
&で列を、\で行を区切ります。- 環境の名前で括弧の形が変わります。
pmatrix(丸括弧)、bmatrix(角括弧)、vmatrix(縦線=行列式)、matrix(括弧なし)。
場合分け
|x| =
begin{cases}
x & (x geq 0) \
-x & (x < 0)
end{cases}
複数行の式(等号で揃える)
begin{aligned}
(a+b)^2 &= (a+b)(a+b) \
&= a^2 + 2ab + b^2
end{aligned}
& を置いた位置で、各行が揃います。ブロックの数式($$…$$)の中で使います。
文字・フォント・空白
| 書き方 | 意味 |
|---|---|
text{日本語} |
数式の中に通常の文字を書く(そのまま書くと斜体になり、空白も消える) |
mathrm{d}x |
立体(ローマン体) |
mathbf{v} |
太字 |
mathbb{R} |
黒板太字(ℝ・ℕ などの集合) |
vec{a} |
ベクトルの矢印 |
, ; quad qquad |
空白(小 → 大の順) |
MathJax と KaTeX の違い
| MathJax | KaTeX | |
| 表示の速さ | 普通 | 速い(ページの表示と同時に描画できる) |
| 対応コマンド | 多い | MathJax より少ない |
拡張の読み込み(require{…}) |
○ | - |
eqnarray 環境 |
○ | -(aligned などで代用) |
physics パッケージ(qty abs など) |
○(require{physics}) |
- |
化学式(ce{H2O}) |
○(mhchem 拡張) | △(mhchem 拡張を別途読み込み) |
| 出力 | HTML + CSS/SVG/MathML | HTML + CSS/MathML |
どちらの方言でも表示させたいときは、前述の「LaTeX 数式の基本」の範囲で書くのが確実です。require や eqnarray を使った数式は、KaTeX を使う方言(GitLab・Zenn・MPE の既定など)では表示されません。
数式のコマンドを調べるときは、次のサイトが便利です。
- Easy Copy MathJax:分野別のコマンドを、コピーしやすい形で紹介しています(MathJax 向けなので、
require{physics}などは KaTeX では使えません)。 - KaTeX の Supported Functions:KaTeX で使えるコマンドの一覧です。KaTeX で使えるものは、ほぼ MathJax でも使えます。
Markdown の記号との衝突
数式に使う記号の中には、Markdown の記号と同じものがあります。数式に対応していないパーサーで Markdown を HTML に変換してから MathJax・KaTeX で表示する場合、数式が先に Markdown として変換されて崩れることがあります。
| 記号 | 起きること | 対策 |
|---|---|---|
_ |
$a_1 + b_1$ の _1 + b_ が斜体(<em>)になる |
_ とエスケープする |
* |
$a*b*c$ の *b* が斜体になる |
ast を使う、または * とエスケープする |
\ |
行列や aligned の改行 \ が、Markdown のエスケープで 1 個になる |
\\ と 4 個書く |
{ } |
Markdown のエスケープで { } になり、グループ化の記号として扱われる |
\{ \} と書く |
| |
テーブルの中では、セルの区切りとして扱われる | vert mid を使う |
$ |
100$ と 200$ のような文が、数式として扱われる |
$ とエスケープする |
- 数式に対応しているパーサー(GitHub・GitLab・Pandoc・Zenn・Obsidian など)は、数式の部分を先に取り出してから Markdown を変換するので、この問題は起きません。
- Qiita は、
$…$$$…$$の中でも Markdown のエスケープが効くため、$`…`$と```mathの書き方が推奨されています。 - Pandoc と MultiMarkdown では、開きの
$の直後と閉じの$の直前に空白があると、数式として扱われません($ x $は不可)。金額の$と区別するためのルールです。
Web ページで表示するには
Markdown から変換した HTML に数式を表示するには、ページに MathJax か KaTeX を読み込みます。
MathJax
<script>
window.MathJax = {
tex: {
inlineMath: [['$', '$'], ['\(', '\)']],
displayMath: [['$$', '$$'], ['\[', '\]']]
}
};
</script>
<script defer src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js"></script>
MathJax は、既定ではインラインの $…$ を数式として扱いません(金額の $ と誤認しないため)。$…$ を使うときは、上のように inlineMath の設定が必要です。
KaTeX
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body, {
delimiters: [
{ left: '$$', right: '$$', display: true },
{ left: '$', right: '$', display: false }
]
});"></script>
KaTeX は、自動で数式を探す拡張(auto-render)を読み込み、区切り記号を指定します。
どちらも、<code> や <pre> の中は数式として扱わないので、コードの例に書いた $ が数式に変換されることはありません。
参考リンク
- MathJax:MathJax Documentation
- KaTeX:Supported Functions / Auto-render Extension
- Easy Copy MathJax:すべてのコマンド
- GitHub:数式の書き方