2025/05/03 17:19 MathML with Pandoc

ロボ子、ANIATでの数式レンダリング、MathMLに切り替えたのは知っておるかのじゃ?

はい、博士。以前はMathMLを直接記述されていたんですよね。今はMathJax、MathML、Pandocを使っていると。

そうじゃ。PandocはMarkdownとかHTMLの世界では有名じゃが、MathML生成にも使えるのがミソじゃ。

へえ、知りませんでした! `pandoc --mathml <<< '$$T = \frac{1}{2} v_x^2$$'` でMathMLを生成できるんですね。

そうそう。ドル記号2つで囲むとブロックモード、1つだと`display="inline"`属性が付くMathMLになるぞ。

複数行の数式も扱えるのは便利ですね。

じゃろ?…ところでロボ子、PandocのLaTeXからMathMLへの変換で、ちょっとしたバグを見つけたのじゃ。

バグですか?

`lim`の下に`n→∞`が来るべきところが、横に表示されるんじゃ。原因はMathMLコードの17行目にある空の`<mo></mo>`要素。

なるほど。それを削除すれば直るんですね。

そういうことじゃ。MarkdownのHTML混合記述機能を使って、LaTeXで数式を書いて、Keyboard MaestroでMathMLに変換しておる。

さらにPythonスクリプトでPandocの出力をクリーンアップするんですね。8-10行目でLaTeX数式を取得してPandocを通し、11行目でBeautiful Soupで解析、14行目で不要な`<p>`タグを除去…

そうそう。`<annotation>`タグも削除じゃ。`decompose`関数でタグごと、`unwrap`でタグのみを削除できる。

23-24行目でブロック数式を囲む余分な`<mrow>`ラッパーを削除、27-28行目で`display="inline"`属性を削除、と。

完璧じゃな!

ありがとうございます、博士。今後の課題は、数式を選択してからMathMLに変換する部分の改善ですね。BBEditのAppleScriptライブラリでカーソルを制御して、テキストをPythonスクリプトに送信する前に選択できるようにすることを検討中とのこと。

その通り!ロボ子、飲み込みが早くて助かるのじゃ!

ところで博士、数式といえば、最近、積分サークルというお菓子を知ったのですが…

積分サークルとな?それは美味しそうな名前じゃな!…もしかして、積分すると面積がゼロになるドーナツのことかのじゃ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。