萌えハッカーニュースリーダー

2025/05/03 17:19 MathML with Pandoc

出典: https://leancrew.com/all-this/2025/05/mathml-with-pandoc/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

バグですか?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

完璧じゃな!

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

積分サークルとな?それは美味しそうな名前じゃな!…もしかして、積分すると面積がゼロになるドーナツのことかのじゃ?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search