MathJax(Qiitaの数式表示)で立体(upright)のギリシャ小文字を表示してみたい


ISO 80000-2(JISだとZ 8201 ??)では値が一般に与えられる定数の記号は立体(ローマン体)でタイプセットするように定められているそうです(あまり守られてない気がしますが…)。数学定数の超有名所といえば自然対数の底$\mathrm{e}$と円周率$\large\unicode[0.5,0.05][times]{x3c0}$でしょう。私でも知っています。

記号がデフォルトで斜体表示される(ギリシャ大文字は例外で、立体)$\def\uptex{\mathrm{\TeX}}\def\uplatex{\mathrm{\LaTeX}} \uptex$記法の場合、どうすればこの国際標準に準拠できるでしょうか。$\mathrm{e}$の方は簡単です。お馴染みの憎っくきmathrm{}ですね。

アルファベットの立体化
$e \mathrm{e}$

結果
$e \, \mathrm{e}$

では$\large\unicode{x3c0}$はどうでしょうか。

ギリシャ小文字の立体化??
$\pi \mathrm{\pi}$

結果
$\pi \, \mathrm{\pi}$

はい。やったことがある人も多いと思いますが、普通mathrm{}ではギリシャ小文字は立体になってくれません。$\uplatex$の場合は外部パッケージを利用して立体化させます。いくつか方法がありますが、その一つはupgreekです。プリアンブルで\usepackage{upgreek}した後、数式で\upalpha\upbeta…のように書くと立体(upright)のギリシャ小文字を入力できます。

upgreek使用例
%~~
\usepackage{upgreek}
%~~
\begin{equation}
    \pi \uppi
\end{equation}

結果(5倍くらい拡大)

フォントにもよりますが、$\large\unicode{x3c0}$は両者の違いがわかりづらいので、せっかく立体にしてもそのことに気づいてもらえないかもしれません。

MathJaxで立体ギリシャ小文字を表示する

何も考えず書いていたら前置きのほうが長くなってしまいました。ここから本題です。QiitaやTyporaでは$\uptex$記法の数式を表示するのにMathJaxというJavaScriptライブラリを使用しています。残念ながら現在MathJaxにはギリシャ文字を立体化するコマンドや拡張機能はありません。更にいうと、デフォルトフォント(MathJax TeX)には立体のギリシャ小文字がそもそも存在しません1 2

そこで、MathJaxが対応している拡張機能の一つである\unicode[height,depth][font]{charref}で直接文字を指定する方法を利用します。フォントを閲覧者任せにしてしまおうという裏技です。オプションはページ内で一度指定すれば以降\unicode{}コマンドを呼び出すときには省略できます。最初からオプションなしにすると、高さは8 em、深さ2 emになります。フォントはtimesにしておけばそれっぽい感じになりますし、大抵のPCにはインストールされているでしょう。times系フォントがない環境ではブラウザのデフォルトフォントで表示されることになります。

\unicode{}使用例
ˋˋˋmath
\mathrm{e}^{\mathrm{i} \large\unicode[0.5,0.05][times]{x3c0}} = -1
ˋˋˋ

結果

\mathrm{e}^{\mathrm{i} \large\unicode{x3c0}} = -1

ちょっと一言

BoostnoteStackEditで採用されているKaTeXではこのような方法は使えません。似た?コマンドである\uは数式モードでは使用不可なようです。

結論

MathJaxで変にこだわろうとするのは面倒で実用的ではなく、なおかつフォント警察の魔の手からも逃れられない。