覚え書きのページ。
いろいろな方法があるが、
window.MathJax
にJSONを突っ込んでおくと、MathJaxの初期化時にそれを設定として取り込んでくれるので、
.js
ファイルにして
<script>
で読み込んでしまうのが一番楽だと思われる。
積分など、派手に上下に飛び出す数式で起こる。
縦スクロールバーが出てしまう要素にCSSで
padding
を設定する。
いい方法は見つからなかったが、たとえば、
TeX: { Macros: { eol: '\\\\[0.5em]' } }といったマクロを設定し、
\\
の変わりに\eol
と書けばよい。
\hbox{...}
で一時的に数式モードを抜ける。
MathJax側では
mtextFontInherit
を
true
に設定する。
\hbox
で立体にする。
シフトJISでうまくいくかどうかは知らない。
TeX: extensions: ["cancel.js"]
として、
\cancel{...}
とする。
MJXc-display
か
mjx-chtml
に設定すればよい。
Chromeの開発者モードでエレメントを調べると分かる。
HTML-CSSの場合は
MathJax_Display
クラス、SVGの場合は
MathJax_SVG_Display
クラスになる。
SVGで使っていると起きる現象。 MathJax Output Formats に書いてある。 CommonHTMLかHTML-CSSにすれば直る。 MathJax的にはCommonHTMLがお勧めだそうだ。
これをマジで対策しようとすると、
onresize
で数式番号が付いている部分をすべて再描画させることになる。
iOSなんかでは上端や下端にスクロールしてアドレスバーが出てきたときも、「縦幅が変わった」ことになって
onresize
が発生するので、数式番号が多いとすごくウザいことになる。
SVGを使う場合は数式番号は最低限にしておいた方がいい。
onresize
で再描画しなければいけない要素に対して以下のコードをほどほどに実行する。
MathJax.Callback.Queue(function() { MathJax.Hub.Rerender(elem); });
elem
はエレメントリストにもできるので、リロードが必要な要素には同じクラスを付けておいて(IDは同じものが存在してはいけないのでクラスを使う)、
getElementsByClassName
で一網打尽にすると楽。
ほどほどに、と書いたのは、Chromeとかではマウスでウィンドウのサイズを変えている間中
onresize
が発生するからで、
onresize
のたびに再描画しているとウザいことこの上ない。
また、MathJaxは非同期で動いているので、再描画中に再描画を指示してしまうとにっちもさっちもいかなくなる。
onresize
のときに
setTimeout
かなんかを設定して、タイムアウトしたら再描画するようなコードを書いた方がよい。
リサイズの場合と同じ。
SVGでレンダリングしてるなら実際に表示された時点で再レンダリングすると直る。
ボタンが押されるとコンテンツが表示されるなら、ボタンが押されたときに
onresize
と同じコードを実行すればよい。
この方法だと関係ないところまで再レンダリング起きちゃうけどまぁいいや。
skipStartupTypeset: true
を設定する必要がある。
また、最初から見えてるコンテンツはロード時にタイプセットする必要があるのだが、MathJax本体のロードが終わっていないとタイプセットを指示しても空振りに終わるので、MathJax本体のロードが終わるまで待たなければならない。
結局、onload
時にこんなコードを実行することになる。
MathJax.Hub.Register.StartupHook('End', function () { MathJax.Callback.Queue(function() { MathJax.Hub.Typeset(elem); }); });
MathJaxによる描画を細かく制御する(Islands in the byte stream)
plainTeX入門 / 数式 (1)(山崎正之さんのページ)
ちょこっと MathJax: 初期設定 (しっぽのさきっちょ)
Copyright (C) 2019 akamoz.jp
$Id: mathjax.htm,v 1.5 2019/04/18 16:37:41 you Exp $