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

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

出典: https://sigwait.org/~alex/blog/2025/10/07/3t8acq.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

楽しみにしています!

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士、それって私のことですか?

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

Search