Qiitaでは表現しきれない数学記法と、その解決策
【Qiitaで数式を書く】シリーズ: #1 数式の書き方 | #2 標準LaTeXとの違い | #3 定理・証明 | #4 表現の限界と解決策
Qiitaは技術記事プラットフォームとして非常に優れていますし、KaTeXによる数式表示もかなりの範囲をカバーしています。基本的な数式を使う分には、ほとんど困ることはありません。
しかし、数学の専門的な内容を書こうとすると、どうしても壁にぶつかる場面が出てきます。この記事では、「こう書きたいのに、Qiitaではできない」という具体的なケースを整理し、それぞれについて現状の回避策と根本的な解決策を紹介します。
制限1:可換図式(Commutative Diagrams)
代数学や圏論の記事では、可換図式は避けて通れません。
標準LaTeXでの書き方
tikz-cd パッケージを使えば、以下のように簡潔に書けます。
% tikz-cd による可換図式
\begin{tikzcd}
A \arrow[r, "f"] \arrow[d, "g"'] & B \arrow[d, "\phi"] \\
C \arrow[r, "\psi"'] & D
\end{tikzcd}
これだけで、矢印付きのきれいな可換図式が生成されます。準同型定理、蛇の補題、層のコホモロジーなど、可換図式なしでは表現が困難なテーマは数多くあります。
Qiitaでの現状
完全に非対応です。 tikz-cd はもちろん、amscd のような簡易的な可換図式環境もレンダリングされません。
現状の回避策
- 画像として埋め込む:ローカルのLaTeX環境でPDFを生成し、画像に変換してQiitaにアップロード
- ASCII art風に書く:テキストで矢印を模擬する
- 外部ツールで生成:quiver (q.uiverapp.com) 等で作成して画像化
A ---f--→ B
| |
g φ
↓ ↓
C ---ψ--→ D
テキストで書くとこうなりますが、矢印の向きが複雑になると途端に破綻しますし、そもそも数学的な「正しさ」が伝わりにくくなります。
画像埋め込みも手間がかかりますし、数式を修正するたびに画像を再生成する必要があります。
制限2:定理・証明環境(Theorem Environment)
標準LaTeXでの書き方
\begin{theorem}[カントールの対角線論法]
実数の集合 $\mathbb{R}$ は非可算である。
\end{theorem}
\begin{proof}
$\mathbb{R}$ の部分集合 $(0,1)$ が非可算であることを示す。
対角線論法により、$(0,1)$ のいかなる可算部分集合も $(0,1)$ 全体を尽くさないことが示される。
\end{proof}
LaTeXでは自動的に「Theorem 1 (カントールの対角線論法)」のようにフォーマットされ、証明の末尾にはQEDマークが自動挿入されます。通し番号も自動管理されます。
Qiitaでの現状
非対応です。 Markdownの引用ブロックやHTMLタグで見た目を模倣することはできますが、以下の機能は実現できません:
- 定理番号の自動管理
- 定理間の相互参照(「定理2.3より」のようなリンク)
- 一貫したスタイル(フォント、枠線、背景色の統一)
- 証明末尾のQEDマーク自動挿入
Markdownで書くと、「定理の中に数式ブロックが入る」という入れ子構造がうまく表現できない場合もあります。
> **定理 1**
> 主張...
> $$
> 数式
> $$
<!-- ↑ 引用ブロック内の $$ が正しくレンダリングされないケースがある -->
制限3:アルゴリズム擬似コード
標準LaTeXでの書き方
\begin{algorithm}
\caption{ユークリッドの互除法}
\begin{algorithmic}[1]
\Require $a, b \in \mathbb{Z}_{>0}$
\Ensure $\gcd(a, b)$
\While{$b \neq 0$}
\State $r \gets a \bmod b$
\State $a \gets b$
\State $b \gets r$
\EndWhile
\State \Return $a$
\end{algorithmic}
\end{algorithm}
このように書くと、行番号付きで数学的な表記($a \bmod b$、$\gcd(a,b)$)が自然に混在する擬似コードが生成されます。
Qiitaでの現状
非対応です。 コードブロックで代替するしかありませんが、コードブロック内では数式がレンダリングされません。
# Qiitaでの代替(数式が使えない)
Input: a, b ∈ Z (正の整数)
Output: gcd(a, b)
while b ≠ 0 do
r ← a mod b
a ← b
b ← r
end while
return a
プログラミング言語のコードなら問題ありませんが、数学的なアルゴリズム(数式と擬似コードが混在するもの)を正確に表現するのは難しい状況です。
制限4:tikzによるグラフ・図の描画
標準LaTeXでの書き方
\begin{tikzpicture}
\node[circle, draw] (A) at (0,0) {$v_1$};
\node[circle, draw] (B) at (2,0) {$v_2$};
\node[circle, draw] (C) at (1,1.7) {$v_3$};
\draw (A) -- (B) -- (C) -- (A);
\end{tikzpicture}
グラフ理論のグラフ、オートマトン、ニューラルネットワークの構造図など、tikzで描ける図は無数にあります。
Qiitaでの現状
非対応です。 QiitaではMermaid記法によるフローチャートやシーケンス図は書けますが、数学的なグラフ描画には対応していません。
Mermaidの graph で近いものを書くこともできますが、頂点の位置制御ができないため、数学的に意味のある配置(平面グラフの埋め込みなど)を表現することは困難です。
制限5:複雑な数式レイアウト
subequations(副番号付き数式群)
標準LaTeXでは、関連する複数の数式をグループ化して副番号を振れます。
\begin{subequations}
\begin{align}
\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \label{eq:gauss} \\
\nabla \cdot \mathbf{B} &= 0 \label{eq:gauss_mag} \\
\nabla \times \mathbf{E} &= -\frac{\partial \mathbf{B}}{\partial t} \label{eq:faraday} \\
\nabla \times \mathbf{B} &= \mu_0 \mathbf{J} + \mu_0\varepsilon_0\frac{\partial \mathbf{E}}{\partial t} \label{eq:ampere}
\end{align}
\end{subequations}
これにより (1a), (1b), (1c), (1d) のような番号が自動的に振られ、「マクスウェル方程式 (1) のうち、式 (1c) を考える」のような参照が可能になります。
Qiitaでの現状
\tag を使って手動で番号を振ることはできますが、副番号の自動管理はできません。
$$
\nabla \cdot \mathbf{E} = \frac{\rho}{\varepsilon_0} \tag{1a}
$$
$$
\nabla \cdot \mathbf{B} = 0 \tag{1b}
$$
これは書けますが、式が増えたり番号を振り直したりすると管理が大変です。
cases内の整列
cases 環境の中でさらに aligned を使いたい場合など、入れ子になると動作が不安定になることがあります。
% こういう複雑な入れ子は崩れやすい
$$
f(x) = \begin{cases}
\begin{aligned}
&x^2 + 2x + 1 \\
&\quad = (x+1)^2
\end{aligned} & (x \geq 0) \\[8pt]
-x & (x < 0)
\end{cases}
$$
KaTeXのパーサーが対応しきれないケースがあり、意図通りにレンダリングされるかは書いてみないと分からないことが多いです。
制限6:相互参照とハイパーリンク
標準LaTeXでは、定理や式に \label を付け、本文中で \ref や \eqref で参照できます。
\begin{theorem}\label{thm:main}
主定理の内容...
\end{theorem}
定理\ref{thm:main}より、式\eqref{eq:result}が従う。
QiitaではMarkdownのアンカーリンクが使えますが、数式への参照は手動管理になります。記事が長くなるほど、番号のずれや参照切れのリスクが高まります。
これらの制限が問題になる場面
上記の制限は、日常的な技術記事では問題にならないかもしれません。しかし、以下のようなコンテンツを書こうとすると、かなり厳しくなります。
- 圏論:可換図式なしには始まらない
- 代数的トポロジー:完全系列、スペクトル系列の図式
- アルゴリズムの数学的解析:擬似コードと計算量の数式の混在
- 教科書的な体系的解説:定理・証明の連鎖と相互参照
- グラフ理論:グラフの描画と隣接行列の対応
こうしたテーマを扱おうとすると、画像の手動管理、番号の手動管理、スタイルの手動模倣で、執筆のかなりの時間が「本来の内容」以外に費やされてしまいます。
解決策
ここまでの制限を整理すると、根本的には「Web上でLaTeXのフル機能が使えるプラットフォームがあればいい」という話に帰着します。
実は、この課題を解決するために開発された数学記事プラットフォームがあります。Folio というサービスで、LaTeXネイティブの記事執筆・公開に対応しています。
Folioで解決できること
可換図式: tikz-cd がそのまま使えます。
% Folioではこのコードがそのままレンダリングされる
\begin{tikzcd}
G \arrow[r, "\varphi"] \arrow[d, "\pi"'] & H \\
G/\ker\varphi \arrow[ru, "\bar{\varphi}"', "\cong"]
\end{tikzcd}
矢印のラベル、向き、曲線など、tikz-cd の機能がそのまま動作します。
定理・証明環境: LaTeX標準の theorem, proof, lemma 環境が使えます。番号の自動管理もされるので、定理を追加・削除しても番号がずれません。
tikzによるグラフ描画: tikzpicture 環境が動作するため、グラフ理論のグラフやオートマトンの状態遷移図なども直接記述できます。
その他:
-
\newcommandによるマクロ定義 - 数式の相互参照
-
algorithm/algorithmic環境
Qiitaとの使い分け
Folioは「QiitaのかわりにFolioを使え」と言いたいわけではありません。プラットフォームにはそれぞれの強みがあります。
| Qiita | Folio | |
|---|---|---|
| 読者層 | エンジニア全般 | 数学・理論系に特化 |
| 数式 | KaTeX(基本的な数式) | LaTeXフル機能 |
| 可換図式 | 非対応 | 対応 |
| 定理環境 | 非対応 | 対応 |
| tikz描画 | 非対応 | 対応 |
| コミュニティ | 巨大、多ジャンル | 数学特化 |
| SEO・検索性 | 強い | — |
普段の技術記事はQiitaで書きつつ、数学の専門的な内容でLaTeXの表現力が必要になったときにFolioを選択肢に入れる、というのが自然な使い分けだと思います。
Folio の記事は https://interconnectd.app で閲覧できます。実際にtikz-cdの可換図式や定理環境がどう表示されるか、サイト上の記事を見ていただくのが一番分かりやすいかと思います。
まとめ
- Qiitaの数式表示はKaTeXベースで、基本的な数式には十分対応している
- ただし、可換図式・定理環境・tikz描画・アルゴリズム擬似コードなどは非対応
- 画像埋め込みや手動模倣で回避できるが、執筆コストが高い
- 数学の専門的な記事でLaTeXのフル機能が必要な場合は、LaTeXネイティブなプラットフォームも選択肢になる
- Qiitaの強みであるコミュニティとの接点を活かしつつ、内容に応じてプラットフォームを使い分けるのが現実的
Qiitaで数学記事を書いている方の参考になれば幸いです。
【Qiitaで数式を書く】シリーズ: #1 数式の書き方 | #2 標準LaTeXとの違い | #3 定理・証明 | #4 表現の限界と解決策