MathJax数式についてのメモ

はじめに

Hexoでブログを生成した。MathJaxのプラグインもあるため、LaTeXの数式を労力なく書けそうだからである。

とはいえ、MathJaxでものを書くのは初めてだ。ここではHexoプラグインの導入方法と、MathJaxの記述方法についてまとめておく。(2016/3/22現在)

プラグイン導入

hexo-mathプラグインを利用することにした。

1
$ npm install hexo-math --save

でインストールし、Hexoプロジェクトの設定ファイル _config.yml に以下を記述する:

1
2
3
4
5
6
7
8
math:
engine: 'mathjax'
mathjax:
src: http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML
config:
tex2jax:
inlineMath: [ ['$','$'], ["\\(","\\)"] ]
displayMath: [ ['$$','$$'], ["\\[","\\]"] ]

基本的な記述

行内数式はLaTeXと同様で $ f(x) = x^2 $のように書けばよい: $f(x)=x^2$.
別行立てで書くには $$ で挟んで書く。

1
2
3
4
5
$$
\mathbb{E} \max_{s,t\in S: d(s,t) \leq \delta} |X(t)-X(s)| \leq (16 \sqrt{2} + 2)
\int_0^\delta \sqrt{\log 2N(T, d, \varepsilon)} \mathrm{d}\varepsilon
\tag{999}
$$

$$
\mathbb{E} \max_{s,t\in S: d(s,t) \leq \delta} |X(t)-X(s)| \leq (16 \sqrt{2} + 2)
\int_0^\delta \sqrt{\log 2N(T, d, \varepsilon)} \mathrm{d}\varepsilon
\tag{999}
$$

なるほどなあ。むしろ、何ができないのか試したくて\mathbb{E}などを試したのだが、普通に使えるようなのでありがたい。これで$\mathbb{R}$とか$\mathbb{Z}$なども使い放題である。その他に使えるLaTeXコマンドの一覧はMathJaxのドキュメントに載っている。

マクロ

MathJaxではマクロも定義できるが、今回は必要に応じて次のように書けばよい。YAMLなせいか心持ちすっきりと書けている気がする。

_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
math:
engine: 'mathjax' # or 'katex'
mathjax:
src: http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML
config:
tex2jax:
inlineMath: [ ['$','$'], ["\\(","\\)"] ]
displayMath: [ ['$$','$$'], ["\\[","\\]"] ]
TeX:
Macros:
dd: \mathrm{d}
RR: \mathbb{R}
argmax: \operatorname*{argmax}

例えば上では\argmaxを定義したので次のように書ける:
1
2
3
$$
\argmax_{t \in T} f(t)
$$

$$
\argmax_{t \in T} f(t)
$$

Hexo特有の記法

ところで、Hexoにはこれとは別にHexo記法というものが存在し、次のように書くことで同様の結果が得られる。

1
2
3
4
{% math %}
\mathbb{E} \max_{s,t\in S: d(s,t) \leq \delta} |X(t)-X(s)| \leq (16 \sqrt{2} + 2)
\int_0^\delta \sqrt{\log 2N(T, d, \varepsilon)} \mathrm{d}\varepsilon
{% endmath %}

$$\mathbb{E} \max_{s,t\in S: d(s,t) \leq \delta} |X(t)-X(s)| \leq (16 \sqrt{2} + 2) \int_0^\delta \sqrt{\log 2N(T, d, \varepsilon)} \mathrm{d}\varepsilon$$

ただし、hexo-mathの現在の仕様では、mathブロックの中に単一の行しかないときはインライン数式、それ以外はディスプレイ数式として勝手に解釈される。個人的にはちょっと不便だなとも思う。