ええ、Samの要約は的を射ていると思います。メール/印刷ビューでレンダリングされた数式を表示したい場合、メールクライアントはMathJaxを実行しないため、サーバーサイドの数式レンダリング(または少なくともサーバーサイドの「プリレンダリング」)が必要です。
現実的なアプローチは次のようになります。
- クッキング中(またはクッキング後のバックグラウンドジョブで)、数式のスパン(インライン+ディスプレイ)を見つけます。
- MathJaxを使用して、Node環境で各式をSVG(フォールバックとしてMathML)にレンダリングします。
- メール/印刷に使用されるクック済みHTML内の数式を次のいずれかに置き換えます。
- インラインの
<svg ...>(最高の忠実度、外部フェッチなし)、または <img src="data:image/svg+xml;base64,...">(一部のクライアントにより互換性があるが、大きくなる可能性がある)。
- インラインの
- 安定したキー(例:
sha256(latex + display_mode + macros + font_config))でキャッシュし、一意の数式ごとに一度だけレンダリングします。
トリッキーな点(ただし、慎重にスコープを設定すれば管理可能):
- DOMシミュレーション: MathJaxの「ブラウザ」出力はDOMを必要とします。そのため、
mathjax-full+jsdom(または純粋なアダプタールートを使用)が必要になるでしょう。 - パフォーマンス/タイムアウト: ジョブキューで非同期的に実行し、優雅にデグレードします(レンダリングが失敗した場合はLaTeXをそのまま残す)。
- メールクライアントの癖: 一部のクライアントはSVGを削除します。そのため、フォールバックプラン(例:プレーンテキスト/LaTeX、またはサポートされている場合はMathML)を持つことが重要です。
誰かが簡単なテスト(スパイク)をしたい場合、最初に行う実験は次のとおりです。
mathjax-fullを使用して$begin:math:text$E\\=mc\\^2$end:math:text$をSVGにレンダリングする小さなNodeスクリプト- それがどのような仮定をしているかを確認する(DOM対アダプター)
- その後、MiniRacerがデッドエンドであり、これを「Nodeが利用可能である必要がある」こと(または小さなサービス)として扱うべきかどうかを判断します。
そのスパイクが成功した場合、それがどこにプラグインするか(メールパイプライン対クッキング対印刷ビュー)、および何をキャッシュ/保存するかについて話し合うことができます。