生成AIに技術記事や数理系の資料を書かせると、LaTeX形式の数式を含むMarkdownを生成させる場面がよくあります。
LaTeXとして正しい数式であっても、その数式をMarkdownへ埋め込むと、Markdownパーサーとの競合によって意図した表示にならないことがあります。特に、同じMarkdownファイルをGitで管理し、GitHubでプレビューする運用では、生成AIへ与える記法ルールをあらかじめ決めておくと扱いやすくなります。
この記事では、次の方針を紹介します。
- MarkdownファイルをGitで管理し、GitHub上でも正常にプレビューできることを重視する
- インライン数式は
$...$を基本とする - ブロック数式は
$$...$$を基本とする -
\(...\)と\[...\]は基本的に使わない -
+、-、*、=を数式ソースの行頭へ不用意に置かない - 1行で書ける数式は1行で書き、
alignedは等号を揃えて式変形を複数行で示す場合など、必要なときだけ使う
まず押さえておきたい考え方
生成AIにLaTeX入りMarkdownを書かせる場合、「LaTeXで数式を書いてください」と指示するだけでは、Markdownとして扱いやすい出力にならないことがあります。
生成AIが作る文書は、概ね次の3段階で解釈されます。
大切なのは、 LaTeXとして正しいこと と Markdownとして安全に埋め込めること を分けて考えることです。
この記事では、GitHubで管理するMarkdownを基準とし、次の記法を基本形とします。
| 用途 | 基本形 | 補足 |
|---|---|---|
| インライン数式 | $...$ |
\(...\) は基本形としない |
| ブロック数式 | $$...$$ |
\[...\] は基本形としない |
| 1行で表せる独立数式 |
$$...$$ の中に1行で記載 |
不必要に aligned を使わない |
| 式変形を複数行で示す数式 | 必要に応じて aligned
|
等号などの位置を揃えたい場合に使う |
GitHubプレビューを基準にすると扱いやすい
生成AIが作成したMarkdownをGitで管理する場合、GitHubは保存先だけではなく、Markdownの確認環境としても利用できます。
例えば、次のような運用を考えます。
この運用では、ローカル環境だけで正常に表示されても、GitHub上で表示が崩れると確認作業がしにくくなります。
そのため、この記事では GitHubで正常にレンダリングできるMarkdownを基本形として管理する という考え方を採用します。
GitHubはMarkdown内のLaTeX形式の数式をサポートしており、インライン数式では $...$、ブロック数式では $$...$$ を利用できます。
インライン数式は $...$ を基本とする
文章中へ数式を埋め込む場合は、次のように記載します。
確率変数 $X$ の期待値を $\mathbb{E}[X]$ とする。
表示上は、確率変数 $X$ の期待値を $\mathbb{E}[X]$ とする、という形になります。
生成AIには、次の形式を標準として指定しておくと扱いやすくなります。
$x$
一方、次の形式はLaTeXとして一般的ですが、この記事の運用では基本形としません。
\(x\)
理由は、GitHub上でのMarkdownプレビューを含めて記法を統一し、生成AIが複数の数式区切りを混在させることを避けるためです。
ブロック数式は $$...$$ を基本とする
独立した数式は、次のように記載します。
$$
f(x)=x^2+2x+1
$$
実際の表示は次のようになります。
$$
f(x)=x^2+2x+1
$$
この記事では、次の形式を基本形とします。
$$
...
$$
一方、次の形式は基本形としません。
\[
f(x)=x^2+2x+1
\]
これも、GitHub上での表示を含めて記法を統一するためです。
数式をMarkdown本文へ裸で置かない
生成AIへ数式を書かせる場合、次のような出力は避けます。
x = a
+ b
- c
この形式では、数式とMarkdown本文の境界が曖昧です。
また、Markdownでは -、+、* が条件によって箇条書きのマーカーとして解釈されます。= は箇条書きのマーカーではありませんが、Setext形式の見出しなど、Markdownの別構文と関係する記号です。
そこで、生成AI向けのシンプルな規約として、数式は必ず数式区切りの内側へ入れます。
$$
x=a+b-c
$$
このルールによって、「これはMarkdown本文なのか、数式なのか」という曖昧さを減らせます。
+、-、*、= を行頭へ不用意に置かない
数式を複数行へ分けると、演算子が次の行の先頭へ現れる場合があります。
例えば、次のような書き方は避けます。
$$
y
=
a + b
+ c
- d
$$
Markdownでは -、+、* が、後ろの空白などの条件によって箇条書きのマーカーとして解釈される可能性があります。= は箇条書きのマーカーではありませんが、Setext形式の見出しなど、Markdownの別構文と関係する記号です。
そもそも、この程度の長さの数式であれば、数式を複数行へ分ける必要はありません。次のように1行で記載する方が自然です。
$$
y = a + b + c - d
$$
表示は次のようになります。
$$
y = a + b + c - d
$$
そのため、生成AIには次のような規約を与えると扱いやすくなります。
1行で表せる数式は不必要に改行せず、
+、-、*、=を数式ソースの行頭へ不用意に配置しない。
aligned は必要な場合に使う
aligned は、すべてのブロック数式に使う必要はありません。
例えば、次の数式は1行で十分に読みやすいため、単純に $$...$$ の中へ記載できます。
$$
f(x) = x^2 + 2x + 1
$$
一方、式変形の過程を複数行で示し、各行の等号位置を揃えたい場合には aligned が役立ちます。
例えば、次のように記載できます。
$$
\begin{aligned}
f(x) &= x^2 + 2x + 1 \\
&= (x + 1)^2
\end{aligned}
$$
表示は次のようになります。
$$
\begin{aligned}
f(x) &= x^2 + 2x + 1 \\
&= (x + 1)^2
\end{aligned}
$$
この例では、式変形の各段階を等号ごとに改行しています。& は揃える位置を指定し、この例では各行の = の位置を揃えています。
つまり、aligned は「数式を改行したいから常に使う」ためのものではなく、 式変形や連立的な記述などで、複数行の対応関係を見やすくしたい場合に使う と考えると分かりやすくなります。
Markdownの予約記号とLaTeXの記号は重複する
MarkdownとLaTeXでは、同じ記号が異なる意味を持つ場合があります。
代表例を整理すると次のようになります。
| 記号 | Markdownでの代表的な役割 | 数式での代表的な役割 |
|---|---|---|
# |
見出し | 記号やマクロ引数など |
- |
箇条書き、水平線、Setext見出し | 減算、負号 |
+ |
箇条書き | 加算 |
* |
箇条書き、強調 | 乗算記号として使う場合がある |
_ |
強調に関係する場合がある | 下付き添字 |
> |
引用 | 大小比較 |
| ` | ` | 表 |
= |
Setext見出しに関係する | 等号 |
$ |
数式区切り | 通貨記号としても使われる |
したがって、生成AIに数式を作らせる場合には、LaTeXの文法だけではなく、Markdown側の解釈も考慮する必要があります。
生成AIへ与えるプロンプト例
生成AIには、例えば次のような規約を与えられます。
LaTeX形式の数式を含むMarkdownを作成してください。
数式について、次の規約に従ってください。
- インライン数式は $...$ を使用する。
- ブロック数式は $$...$$ を使用する。
- \(...\) は使用しない。
- \[...\] は使用しない。
- 数式をMarkdown本文へ裸で記載しない。
- 1行で表せる数式は、不必要に複数行へ分割しない。
- aligned は常用せず、式変形などで等号位置を揃えながら複数行表示する場合に使用する。
- aligned を使用する場合、関係演算子を揃える位置には & を使用する。
- LaTeXの改行命令には \\ を使用する。
- +、-、*、= を各行の最初の有意な文字として配置しない。
- Markdown構文と衝突しやすい記号を使用するときは、Markdown側での解釈も考慮する。
- GitHubで正常にレンダリングできる記法を優先する。
このように、禁止事項だけでなく、 どの記法を基本形として採用するのか まで指定すると、生成結果を揃えやすくなります。
生成AIに「\( ... \) を使わない」とだけ指示すると、別の予期しない表記へ置き換える可能性があります。
一方、
インライン数式は $...$ に統一する。
と基本形を明示すると、生成結果が安定しやすくなります。
まとめ
生成AIはLaTeXそのものをかなり正確に生成できます。
一方、LaTeX入りMarkdownを安定して運用するには、LaTeXだけではなく、Markdownパーサーとの境界も考える必要があります。
特に、GitHubでMarkdownを管理・プレビューする場合には、次のような基本形を決めておくと扱いやすくなります。
インライン数式
$...$
ブロック数式
$$...$$
通常の独立数式
1行で表せる場合は $$...$$ の中に1行で記載
式変形を複数行で示す場合
必要に応じて aligned を使用
& で等号などの位置を揃える
LaTeXの改行命令は \\
行頭
+、-、*、= を不用意に置かない
ポイントは、「LaTeXとして正しい数式を書かせる」ことだけではありません。
生成AI、Markdownパーサー、数式レンダラーの3者が同じ文書をどのように解釈するかを考え、その境界を分かりやすくしておくこと が、LaTeX入りMarkdownを安定して扱ううえで役立ちます。