[告知] 以前このページで、IEに対応させるためのコード例 <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> を紹介していましたが、polyfillはドメイン名ごと中国企業に売却されました。利用を止めてください(もうIEなんてないでしょうし)。
MathJax は $\mathrm{\LaTeX}$ 並みの数式表示能力をJavaScriptで実現したライブラリです。類似のものにKaTeXがあります。
MathJaxの読み込み方はいろいろ考えられますが、ここではMathJaxのバージョンやブラウザの対応状況に応じて柔軟に変えられるように、別ファイルで読み込んでいます:
<script src="/js/load-mathjax.js" async></script>
load-mathjax.js というファイルは現在次のようになっています:
window.MathJax = {
chtml: {
matchFontHeight: false
},
tex: {
inlineMath: [['$', '$']]
},
svg: {
fontCache: 'global'
}
};
(function () {
const script = document.createElement('script');
if (navigator.userAgent.includes("Chrome") || navigator.userAgent.includes("Firefox"))
script.src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js";
else
script.src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js";
script.async = true;
document.head.appendChild(script);
})();
ChromeやFirefoxではSVG方式、SafariではCommonHTML方式のMathJaxを読み込んでいます。本来はSVG方式のほうが大きい記号も出せて良いのですが、なぜかSafariでは表示がぼやけるようになってしまいました。また、CommonHTML方式の場合、英小文字の高さ(x-height)を本文に自動的に合わせますが、日本語環境ではうまくいかないこともあるので、切っています。インライン数式の書き方はデフォルトでは \( ... \) ですが、ここでは $ ... $ に設定しています。SVG方式の場合のフォントキャッシュをグローバルに設定しています。
数式の書き方はほぼLaTeX + amsmathのスタイル通りです。
インライン数式を $ ... $ に設定しましたが、ただの $ を使いたい場合には <span>$</span> と書きます。なお、<pre> ... </pre> や <code> ... </code> の中の $ はインライン数式になりません。
例:
エネルギーと質量には $E = mc^2$ の関係がある。
エネルギーと質量には $E = mc^2$ の関係がある。
HTMLだけで書いた E = mc2(<span lang="en"><i>E</i> = <i>mc</i><sup>2</sup></span>)と比較してください。
別行の数式は \[ ... \] です。
\[
\frac{\pi}{2} =
\left( \int_{0}^{\infty} \frac{\sin x}{\sqrt{x}} dx \right)^2 =
\sum_{k=0}^{\infty} \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
\prod_{k=1}^{\infty} \frac{4k^2}{4k^2 - 1}
\]
\[
\frac{\pi}{2} =
\left( \int_{0}^{\infty} \frac{\sin x}{\sqrt{x}} dx \right)^2 =
\sum_{k=0}^{\infty} \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
\prod_{k=1}^{\infty} \frac{4k^2}{4k^2 - 1}
\]
注意として、$a<b$ のようにスペースなしで不等号を書くと、ブラウザが < をタグの一部と解釈してしまって、うまくいかないようです。$a < b$ のようにスペースを空ければうまくいくはずです。あるいは、$a < b$ のように書くか、$a \lt b$ のようなマクロを使います。
MathJaxの \lt というマクロは、標準のLaTeXでは定義されていません。\newcommand{\lt}{<} のように定義しておく必要があります。
<meta name="viewport" content="width=device-width"> と書いているところは <meta name="viewport" content="width=device-width, initial-scale=1"> としないとページ幅がおかしくなることがあるようです。
Last modified: