読者です 読者をやめる 読者になる 読者になる

MathJaxをMarkdownと混在させると正しく描画されない現象

はてなで数式が正しく描画されない ugya-!!!という気持ちになったのでググった。

Issues with Markdown

まず問題点。

markdownではアンスコ_が強調ブロックとして扱われる。latexで下付き文字を使おうとしたとき、これが変に解釈され問題が起きる。というように読める(英語力ぅ…)

One issue that comes up, however, with Markdown is that the underscore character (_) is interpreted by Markdown as a way to wrap text in emph blocks while LaTeX (MathJax) interprets the underscore as a way to create a subscript.

それに対する応急処置的な解決法。_\_に置き換える。デメリットはlatexの数式と相互運用しづらい思われる。いちいち書き換えるのが面倒だ。

もう少しまともな解決方法は、<div></div>タグで数式を囲むことである。これはmarkdownプロセッサが<div>タグ内の数式を無視することを期待するものである。たぶんたいていこれでうまくいく(はてなではうまくいった)。

divはディスプレイ数式を処理するには十分だが、文中に数式を表示するインライン数式を扱うには不十分だ。行中に数式を収めようとしても、divタグがあるとそこで勝手に改行を行われるからである(ブラウザごとに違うのかも知れないが仕様も挙動も知らない)。

インライン数式を表示するには、まず以下の設定を追加する。

MathJax.Hub.Config({
    tex2jax: {
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre']
    }
});

すると、バッククオート記号`で囲んだ数式が表示されるようになる。

このコードの説明はここでなされている。上の設定は`の実体である<code>タグをMathJaxに無視させる設定である。

例:私が表示したかったもの

これにより次のコードが

`$\sum_{i=1}^{\pi(\sqrt(n))} \frac{n}{p_i} \approx  \frac{n}{2} + n \sum_{i=2}^{\frac{2 \sqrt{n}}{\ln{n}}} \frac{1}{i \ln{i} } \approx \frac{n}{2} + n \int_{i=2}^{\frac{2\sqrt{n}}{\ln{n}}} \frac{1}{i \ln i} \approx n \ln{\ln{n}} + O(n)$`

以下のように表示される(はず)。

$\sum_{i=1}^{\pi(\sqrt(n))} \frac{n}{p_i} \approx \frac{n}{2} + n \sum_{i=2}^{\frac{2 \sqrt{n}}{\ln{n}}} \frac{1}{i \ln{i} } \approx \frac{n}{2} + n \int_{i=2}^{\frac{2\sqrt{n}}{\ln{n}}} \frac{1}{i \ln i} \approx n \ln{\ln{n}} + O(n)$