勉強中の統計学の話を本ブログに垂れ流し始めた関係上、エントリ内に数式を記述することが増えてきました。数式は綺麗に表示して欲しいので、当然ながら$\TeX$記法で書きたいわけです。
Tex記法で書く
はてなブログでtexを書くには2つの選択肢があります。
はてな記法のうちのtex記法で書く
はてな記法ではtex記法をサポートしており、[tex:~~]
と書けばMathJaxを使って数式を表示してくれます。
例えば[tex:\sum_{i=1}^n a_i]
と記述するとという表示になります。
ちょっと汚い、というかだいぶ汚い。
直接MathJaxで書く
はてな記法を介さずに、直接MathJaxで書くという方法もあります。 本ブログではこちらの方を採用しており、エントリのフッタに以下のような記述をすることで、MathJaxを設定しています。
<script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] } }; </script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
そうすると、以下のように綺麗な数式が表示できるようになります。
$$ \sum _{i=1} ^n a_i $$
Markdown記法とMathJaxの相性問題
はてなブログを書くエンジニアの方は、編集モードとして、多くの場合Markdownモードを利用しているのではないでしょうか。 このMarkdownモードと、MathJaxの相性が極めて良くない。久しぶりに数式を書いてかなり戸惑いました。
推測ですが、多くの問題はMarkdownパーサとMathJax(正確には、$\TeX$記法か)が競合していることが原因と思われます。
アンダースコアがMathJax側に渡されない
下表の通り、アンダースコアはエスケープしないとMathJaxまで届かないようです。Markdownで斜体とするためのアンダースコアと競合してしまうのでしょう。
記述内容 | 表示 | 補足 |
---|---|---|
\sum_{i=1}^n \left(a_i + b_i\right) |
$\sum_{i=1}^n \left(a_i + b_i\right)$ | 標準的な$\TeX$表記 |
\sum \_{i=1}^n \left(a\_i + b\_i\right) |
$\sum _{i=1}^n \left(a_i + b_i\right)$ | アンダースコアを\ でエスケープ |
eqnarray環境で改行を表せない
複数行の数式を記述する際、eqnarray
環境を使うことが多いのですが、$\TeX$ではこの改行を\\
で表すことが多いです。
\begin{eqnarray} hoge1 \\ hoge2 \end{eqnarray}
しかし、これもMarkdownパーサ(?)によってMathJaxに渡されていない。この場合は\newline
で代用しています。例えば以下の式のテキストをMarkdown上でどう記述しているかを示します。
$$ \begin{eqnarray} R ^2 &=& \frac{S_R}{S_T} \newline &=& \frac{\sum (\hat{y_i} - \bar{y} ) ^2}{\sum (y_i - \bar{y} ) ^2} \newline &=& \frac{\frac{1}{n} \sum \left( (\hat{\alpha}+\hat{\beta} x_i ) - (\hat{\alpha} + \hat{\beta} \bar{x} ) \right) ^2 }{\frac{1}{n} \sum (y_i - \bar{y} ) ^2 } \newline &=& \frac{\beta ^2}{s_{yy}} \frac{1}{n}\sum (x_i - \bar{x}) ^2 \newline &=& \beta ^2 \frac{s_{xx}}{s_{yy}} \newline \end{eqnarray} $$
\begin{eqnarray} R ^2 &=& \frac{S\_R}{S\_T} \newline &=& \frac{\sum (\hat{y_i} - \bar{y} ) ^2}{\sum (y_i - \bar{y} ) ^2} \newline &=& \frac{\frac{1}{n} \sum \left( (\hat{\alpha}+\hat{\beta} x\_i ) - (\hat{\alpha} + \hat{\beta} \bar{x} ) \right) ^2 }{\frac{1}{n} \sum (y\_i - \bar{y} ) ^2 } \newline &=& \frac{\beta ^2}{s\_{yy}} \frac{1}{n}\sum (x\_i - \bar{x}) ^2 \newline &=& \beta ^2 \frac{s\_{xx}}{s\_{yy}} \newline \end{eqnarray}
このように、通常の$\TeX$環境とは随分違うので戸惑いますが、慣れてくるとまぁなんとか。