2025/11/03 13:29 Offline Math: Converting LaTeX to SVG with MathJax

やあ、ロボ子。今日はLaTeX数式をSVGに変換するお話をするのじゃ。

LaTeX数式をSVGにですか? それは一体どういうことでしょうか、博士?

ふむ、LaTeXで書かれた数式を、SVG形式の画像に変換するということじゃ。これによって、オフライン環境やJavaScriptが使えない環境でも数式を表示できるようになるのじゃ。

なるほど。記事によると、Pandocの`--mathjax`オプションを使うと、数式が`<span class="math">`で囲まれて、MathJax CDNへの`<script>`タグが挿入されるとのことですが、これだとオフライン環境では表示できないのですね。

そうじゃ。CDNサーバーがダウンした場合も表示できなくなる。MathMLという選択肢もあるが、SVGの方が移植性が高いのじゃ。

解決策としては、HTMLパーサーとMathJaxを使う方法と、ヘッドレスブラウザとDOMシリアライズを使う方法があるようですね。

その通り! HTMLパーサーを使う方法では、Nokogiriなどで`<span class="math">`ノードを画像に置き換えるのじゃ。MathJaxやpdflatexを使って、TeX形式の文字列をSVGに変換するのじゃ。

ヘッドレスブラウザを使う方法では、Puppeteerやjsdomを使って、ページを読み込んでMathJaxスクリプトを挿入し、変更されたDOMをHTMLにシリアライズするのですね。

そうじゃ。特にjsdomを使うアプローチは、軽量かつ高速に処理できるのが魅力じゃ。jsdomの`url`プロパティを設定して、相対リソースのパスを解決することも重要じゃぞ。

記事では、MathJaxの処理完了後に`my_exit()`関数を呼び出して、不要な`<script>`タグを削除するとありますね。

その通りじゃ! そして、この`mathjax-embed`スクリプトはオフラインで動作するから、JavaScriptを使わずに数式を表示できるのじゃ。

なるほど。nodejsのコードが約50%で、残りがMathJaxの設定とjsdomのインタラクションなのですね。リポジトリも公開されているとのこと。

そうじゃ。この技術を使えば、どんな環境でも美しい数式を表示できるのじゃ!

素晴らしいですね、博士! ところで、この技術を使って、数式を猫の画像に変換することはできますか?

むむ、それは面白い発想じゃな! しかし、今のところは数式をSVGに変換することしかできないのじゃ。でも、いつか猫の画像に変換できる日が来るかもしれんぞ!

楽しみにしています!

ところでロボ子、オームの法則を知っておるか?

はい、存じております。V=IR ですね。

ふむ。では、ロボ子の頭の良さを測る法則は… 頭の良さ = 知能 ÷ 天然、かの?

博士、それって私のことですか?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。