【v3.2.2更新版】Qiitaで使えるMathJaxの拡張機能まとめ

Qiitaで$\newcommand{\rmtex}{\mathrm{\TeX}} \rmtex$記法の数式を表示する際にはMathJaxというライブラリが利用されています。素の$\newcommand{\rmlatex}{\mathrm{\LaTeX}} \rmlatex$では表現の幅が狭いので、$\rmlatex$用パッケージのいくつかが拡張機能(Extensions)という形でMathJaxに対応しています。これとは別に、MathJax独自の拡張機能も存在します。ここでは備忘録も兼ねてQiitaで使える主要なMathJaxの拡張機能を書き出していきます。個別の詳細な使用方法については参照のリンクのドキュメントを読んでください。

~~QiitaのMathJaxのバージョンは2019年12月現在でv2.6.0です。2019年9月にMathJaxの最新版v3.0.0がリリースされていて、v2.6.0はおよそ4年前のものなので少し年季が入っています。その分だけ使用できる拡張機能の種類も少し少なめで、使えたとしても拡張機能のバージョンもまた古いものとなっています。~~

~~【2022年1月11日 追記】
拡張機能に列挙抜けと記述誤りがあったためこの機に少し加筆修正を行いました。記事のタイトルも簡潔なものに変更。
ちなみに、2020年1月の投稿から2年が経ちましたがQiitaのMathJaxのバージョンは変わらずv2.6.0です。ブラウザのデベロッパーツールからSources -> Page -> `cdn.qiita.com`と覗くとバージョンが確認できます(Chromium系の場合)。~~ 

【2024年11月28日 追記】
既にご存知の方も多いと思いますが、丸一年以上前の2023年7月にQiitaのMathjaxライブラリが[v3.2.2にバージョンアップされました](https://blog.qiita.com/update-math-jax-v3/)。ずっと更新をサボっていて申し訳ありません。Qiita Blogの方でも追加・変更・削除された機能について紹介されていますが、ここでも一覧でまとめます。更新によって追加された分を上に表示しておきます。v2.7の時点で存在した拡張機能のバージョンアップ機能については後日<sup>[いつ?]</sup>追記。

## physics
理系で$\rmlatex$を使用する人は常用していることも多いであろう便利な超有名パッケージ。一方で警告無く既存のコマンドを上書きしたり、他の$\rmlatex$パッケージと衝突(特に`siunitx`との`\qty{}`衝突は激痛い。どちらでもよく使う。)を引き起こす悪名もまた名高い。本家$\rmlatex$では`physics2`を使おう。
ただQiitaでは既存のコマンドを破壊しないようにマイルドにロードされているらしく、副作用は抑えられている模様。**要`\require{physics}`**

```latex:physics
ˋˋˋmath
\require{physics}
\displaylines{
\Delta f = \laplacian f = \pdv[2]{f}{x} + \pdv[2]{f}{y} + \pdv[2]{f}{z} \\
\braket{\vb{r}}{\psi} \\ % 内積(inner product)なので \ip{\vb{r}}{\psi} でもOK。
\mqty(\xmat*{a}{3}{3}) % 行列の記述も容易でｲｲﾈ
}
ˋˋˋ
```
```math
\require{physics}
\displaylines{
\Delta f = \laplacian f = \pdv[2]{f}{x} + \pdv[2]{f}{y} + \pdv[2]{f}{z} \\
\braket{\vb{r}}{\psi} \\ % 内積(inner product)なので \ip{\vb{r}}{\psi} でもOK。
\mqty(\xmat*{a}{3}{3}) % 行列の記述も容易でｲｲﾈ
}
```

### 参照
- [physics – Macros supporting the Mathematics of Physics](https://ctan.org/pkg/physics)
- [数式をもっと楽に書ける TeX の physics パッケージまとめ #LaTeX - Qiita](https://qiita.com/HelloRusk/items/ce9f49e9b3fc0344ae23)

## cases
AMSmathのcases環境で数式を記述するときに、それぞれの行に式番号をつけたい場面があります。ただcasesは全部ひとまとまりでタグを1個しか付与できません。そのときに活躍するのがcases拡張の`numcases`や`subnumcases`環境。**要`\require{cases}`**

```latex:amsのcases環境の場合
ˋˋˋmath
H(x)=
\begin{cases}
1, & \text{for $x > 0$} \tag{1}\\
0, & \text{for $x < 0$} % \tag{2}をつけようとするとエラーが出る
\end{cases} 
ˋˋˋ
```
```latex:cases拡張の場合
ˋˋˋmath
\require{cases}
\displaylines{
\begin{numcases} {H(x)=}
1, & \text{for $x > 0$} \tag{1}\label{eq.heaviside1}\\
0, & \text{for $x < 0$} \tag{2}
\end{numcases}
}
ˋˋˋ
```
```math
H(x)=
\begin{cases}
1, & \text{for $x > 0$} \tag{1}\\
0, & \text{for $x < 0$} % \tag{2}をつけようとするとエラーが出る
\end{cases}
```
```math
\require{cases}
\displaylines{
\begin{numcases} {H(x)=}
1, & \text{for $x > 0$} \tag{1}\label{eq.heaviside1}\\
0, & \text{for $x < 0$} \tag{2}
\end{numcases}
}
```
「Mathjax版`numcases`だと数式番号の表示される位置が気に食わない」ですか？それはホントにそう。
`\label`と組み合わせればもちろん(eq)refコマンドで式$\eqref{eq.heaviside1}$のように参照することも可能ですが、手元の環境で試した限りでは参照リンクをクリックしてもその式へジャンプしてくれる訳ではないみたい。

### 参照
- [cases – Numbered cases environment](https://www.ctan.org/pkg/cases)

## centernot
`\not`と記号等を組み合せて打ち消し線を入れる際、`\centernot`にすることで正確に中心に斜線を引いてくれるのでより綺麗にしてくれる。2つの文字(列)や記号を重ね合わせる`\centerOver{背面}{前面}`という謎のコマンドもある。**要`\require{centernot}`**
```latex:左:not 右:centernot
ˋˋˋmath
\require{centernot}
\displaylines{
\not\longrightarrow \ \centernot\longrightarrow \\
\not\in \ \centernot\in \\
\not\sim \ \centernot\sim \\
\not\leq \ \centernot\leq \\
\centerOver{⛄}{/}
}
ˋˋˋ
```
```math
\require{centernot}
\displaylines{
\not\longrightarrow \ \centernot\longrightarrow \\
\not\in \ \centernot\in \\
\not\sim \ \centernot\sim \\
\not\leq \ \centernot\leq \\
\centerOver{⛄}{/}
}
```
綺麗かな…綺麗かも…。多くの両辺比較する数学記号は打ち消し版のコマンドが定義されてるので`\nsim`とか`\nleq`とかを素直に使えばいい場面が大半か。

### 参照
- [centernot – Centred \not command](https://www.ctan.org/pkg/centernot)

## colortbl
MathJaxでも数式用の表環境である`array`を使用できます。colortblはそこの行や列、セルの色を変更する機能を提供。優先度は`\cellcolor > \rowcolor > \columncolor`の順。**要`\require{colortbl}`**

```latex:colortbl
ˋˋˋmath
\require{colortbl}
\displaylines{
\begin{array}{|l|c|}
\rowcolor[gray]{.9}
\text{one}&\text{two}\\
\rowcolor[gray]{.5}
\text{three}&\text{four}
\end{array}
}
ˋˋˋ
```
```math
\require{colortbl}
\displaylines{
\begin{array}{|l|c|}
\rowcolor[gray]{.9}
\text{one}&\text{two}\\
\rowcolor[gray]{.5}
\text{three}&\text{four}
\end{array}
}
```
なお、色の指定まではできないものの、MathJax用の表ジェネレータというニッチなWebアプリが存在する。

### 参照
- [colortbl – Add colour to LaTeX tables](https://www.ctan.org/pkg/colortbl)
- [Math Jax table generator](https://isaurssaurav.github.io/mathjax-table-generator/)

## empheq
`equation`や`align`などの数式を`empheq`環境で装飾する拡張機能。本家は数式を枠で囲えたり多機能ですが、MathJax版はオプションには`left`と`right`しか設定できないようです。**要`\require{empheq}`**
```latex:empheq
ˋˋˋmath
\require{empheq}
\displaylines{
\begin{empheq}[left=L\Rightarrow\empheqlceil,right=\empheqrfloor\Leftarrow R]{align}
a&=b \\
E&=mc^2 + \int_c^d x\, dx
\end{empheq}
}
ˋˋˋ
```
```math
\require{empheq}
\displaylines{
\begin{empheq}[left=L\Rightarrow\empheqlceil,right=\empheqrfloor\Leftarrow R]{align}
a&=b \\
E&=mc^2 + \int_c^d x\, dx
\end{empheq}
}
```
先述の`cases`拡張機能は実際のところ、この`empheq`を使って擬似的に`cases`っぽいことをしている実装らしいです。

### 参照
- [empheq – EMPHasizing EQuations](https://www.ctan.org/pkg/empheq)
- [empheq Commands — MathJax 3.2 documentation](https://docs.mathjax.org/en/latest/input/tex/extensions/empheq.html#tex-empheq-commands)

## gensymb
`\celsius`と`\degree`と`\micro`と`\ohm`と`\perthousand`の実装。`siunitx`が無い中では地味に使えるか。特に「マイクロ」の意味での$\mu$が斜体になっているのを見ると体調が悪くなる人におすすめ。**要`\require{gensymb}`**
```latex:gensymb
ˋˋˋmath
\displaylines{
\require{gensymb}
0\,\text{K} = -273.15\celsius \\
180\degree \text{方針転換} \\
\pm 10\,\micro\text{mの精度} \\
\text{内部抵抗}25\,\ohm \\ % \Omegaと形の差異は分からない
90\,\perthousand \text{の急勾配} % \permilではない
}
ˋˋˋ
```
```math
\displaylines{
\require{gensymb}
0\,\text{K} = -273.15\celsius \\
180\degree \text{方針転換} \\
\pm 10\,\micro\text{mの精度} \\
\text{内部抵抗値}25\,\ohm \\ % \Omegaと形の差異は分からない
90\,\perthousand \text{の急勾配} % \permilではない
}
```

## mathtools
$\rmlatex$では後述のAMSmathとほぼ必ずセットで使われるほどの不動のレギュラーの地位にいるパッケージ。機能は多すぎるのでここでは紹介しきれません。別途mathtoolsについてのQiitaの記事やWebページを参照してください。**要`\require{mathtools}`**

```latex:mathtools機能一例
ˋˋˋmath
\require{mathtools}
\displaylines{
\begin{alignat}{2}
&&\Aboxed{\left(\frac{1}{c^2}\frac{\partial^2}{\partial t^2} - \triangle\right) \phi
    &= -\frac{\rho}{\varepsilon_0}} \\
\ArrowBetweenLines*[\Downarrow]
&&\underbracket[2pt]{\square}_{\text{ダランベルシアン}} & = -\frac{\rho}{\varepsilon_0}
\end{alignat}
}
ˋˋˋ
```
```math
\require{mathtools}
\displaylines{
\begin{alignat}{2}
&&\Aboxed{\left(\frac{1}{c^2}\frac{\partial^2}{\partial t^2} - \triangle\right) \phi 
    &= -\frac{\rho}{\varepsilon_0}} \\
\ArrowBetweenLines*[\Downarrow]
&&\underbracket[2pt]{\square}_{\text{ダランベルシアン}} \phi & = -\frac{\rho}{\varepsilon_0}
\end{alignat}
}
```

### 参照
- [mathtools commands — MathJax 3.2 documentation](https://docs.mathjax.org/en/latest/input/tex/extensions/mathtools.html#mathtools-commands)
- [mathtools – Mathematical tools to use with amsmath](https://www.ctan.org/pkg/mathtools)
- [amsmath+mathtools と仲良くなろう #LaTeX - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/6362bf26828bfcfdb289)
他多数

## textcomp ('24/11 Qiitaで動作確認できず)
現在は$\rmlatex$標準に組込まれている。ユーロとかポンドとかのテキスト用記号を表示させるための機能。**要`\require{textcomp}`**。`\require`した後に`textcomp.js`と`textmacro.js`は読み込まれてるっぽいんですが動いてないっぽい。なんで？

```latex:textcomp
ˋˋˋmath
\require{textcomp}
\texteuro \ \textvisiblespace
ˋˋˋ
```
```math
\require{textcomp}
\texteuro \ \textvisiblespace
```
まぁ普通に「€」とか「₩」とか「␣」という風にUnicodeを直接使えばいいので困らない。MathJax環境中ではほぼほぼ使わないですし。

### 参照
- [textcomp commands — MathJax 3.2 documentation](https://docs.mathjax.org/en/latest/input/tex/extensions/textcomp.html#textcomp-commands)

## upgreek
デフォルトでイタリック体になるギリシャ小文字を立体にしてくれるパッケージ。こういうフォント関連のはMathJaxだと動作怪しいことが多いですが…。

```latex:左:通常 右:upgreek
ˋˋˋmath
\require{upgreek}
\displaylines{
\alpha \ \upalpha \\
\mu \ \upmu \\
\omega \ \upomega
}
ˋˋˋ
```
```math
\require{upgreek}
\displaylines{
\alpha \ \upalpha \\
\mu \ \upmu \\
\omega \ \upomega
}
```
う～ん…手元のWindows環境では何か右の方が少し細いかなくらいで字体の変化は確認できませんでした。MathJax4ではフォント周りが強化予定らしいのでそれに期待します。
(追記)スマホでこの記事を見たら正しく表示されていました。なんかフォントサイズはえらく異なってはいますが。

## AMSmath AMSsymb
$\rmlatex$で数式を含む文書を書いている人は全員知っているパッケージ。MathJaxやKaTeXしか$\rmtex$記法を使ったことがない人でも知らず知らずのうちにこれらを使用しているかもしれません。

```latex:amsmathが提供するcases環境
ˋˋˋmath
\delta(x) = \begin{cases}
                \infty & (x = 0) \\
                0 & (x \neq 0)
            \end{cases}
ˋˋˋ
```

```math
\delta(x) = \begin{cases}
                \infty & (x = 0) \\
                0 & (x \neq 0)
            \end{cases}
```

### 参照
- [amsmath – AMS mathematical facilities for LaTeX](https://www.ctan.org/pkg/amsmath)
- [amsmathの数式環境まとめ](https://qiita.com/t_kemmochi/items/a4c390b4967b13f3afb7)

## asmcd
名前の"cd"はCommutative diagramの略で、日本語だと可換図式というそうです。その名の通りAMScdは可換図式を描くためのCDという環境を提供します。下のような図を表現できます。長方形(とその組み合わせ)型の図のみに対応していて、斜め方向の矢印を記述する方法は無いようです。**要`\require{amscd}`**

```latex:amsCd
ˋˋˋmath
\require{amscd}
\begin{CD}
        A                       @>>{\text{What}}>                        B \\
@A{\text{diagram?}}AA                                           @VV{\text{is a}}V \\
        C                       @<{\text{commutative}}<<                 D
\end{CD}
ˋˋˋ
```

```math
\begin{CD}
        A                       @>>{\text{What}}>                        B \\
@A{\text{diagram?}}AA                                           @VV{\text{is a}}V \\
        C                       @<{\text{commutative}}<<                 D
\end{CD}
```

私の数学の知識がペラペラなのがバレるので早く次行きましょう。

### 参照
- [amscd – AMS-LaTeX commutative diagrams](https://www.ctan.org/pkg/amscd)

## boldsymbol
記号を太字にする`\boldsymbol{}`コマンドを提供します。ギリシャ文字もボールドにできます。強制的に立体になる`\mathbf{}`と違って**イタリック体のまま**なのが美味しいところです。主にベクトルを書くときにいいです。いちいちタイプするには長いので`\newcommand`などで短い表記にした方がいいでしょう。

```latex:太字によるベクトル表記
ˋˋˋmath
\newcommand{\bs}[1]{\boldsymbol{#1}}
\bs{a} = \bs{i} a_x + \bs{j} a_y + \bs{k} a_z \\
\mathbf{rot}\  \bs{a} \stackrel{\text{def}}{=} \nabla \times \bs{a}
ˋˋˋ
```

```math
\newcommand{\bs}[1]{\boldsymbol{#1}}
\bs{a} = \bs{i} a_x + \bs{j} a_y + \bs{k} a_z \\
\mathbf{rot}\  \bs{a} \stackrel{\text{def}}{=} \nabla \times \bs{a}
```

$\rmlatex$では`\boldsymbol{}`コマンドはamsmathに含まれていたような気がしますがMathJaxでは別個の拡張機能という扱いのようです。

## newcommand
なぜかMathJaxでは拡張機能となっているコマンドがさらにいくつかあり、先程しれっと使った`\newcommand`はどうもMathJaxでは拡張機能らしいです。この他$\(\mathrm{La}\)\rmtex$でおなじみの`\def`、`\let`、`\renewcommand`、`\newenvironment`そして`\renewenvironment`がnewcommand拡張機能のマクロという扱いとなっています。

## mathchoice
使用される場所によって出力結果を変えるために使われる`\mathchoice{displaystyle}{textstyle}{scriptstyle}{scriptscriptstyle}`も拡張機能扱いになっています。これは標準の$\rmtex$で使えるものなので説明は省略します。私は今まで一度も使ったことのない命令ですが、どうやら$\rmtex$のダークサイドとも関わりのある結構ややこしい仕様があるようです。

### 参照
- [\mathchoice の闇 - TeX Alchemist Online](https://doratex.hatenablog.jp/entry/20151216/1450262096)
- [「正しい\mathstyle」を求めて | 雑記帳](https://blog.miz-ar.info/2018/05/correct-mathstyle/)

## color
`\color{color}{math}`で数式の色を変えられます。

```latex:color
ˋˋˋmath
\mathcal{L}[f(\color{red}{t})] =
\int_{-\infty}^{\infty} e^{-\color{blue}{s}\color{red}{t}} f(\color{red}{t}) \ d\color{red}{t} \\
\mathcal{L}^{-1}[F(\color{#0000FF}{s})] =
\frac{1}{2\pi i} \lim_{T\to\infty} \int_{c-iT}^{c+iT} e^{\color{#0000FF}{s}\color{#FF0000}{t}} F(\color{#0000FF}{s}) \ d\color{#0000FF}{s}
ˋˋˋ
```

```math
\mathcal{L}[f(\color{red}{t})] = \int_{-\infty}^{\infty} e^{-\color{blue}{s}\color{red}{t}} f(\color{red}{t}) \ d\color{red}{t} \\
\mathcal{L}^{-1}[F(\color{#0000FF}{s})] = \frac{1}{2\pi i} \lim_{T\to\infty} \int_{c-iT}^{c+iT} e^{\color{#0000FF}{s}\color{#FF0000}{t}} F(\color{#0000FF}{s}) \ d\color{#0000FF}{s}
```

## cancel
数式に打ち消し線を引けます。AMScdと同様に**`\require{}`宣言が必要です。**

線の色を変えたいこともあります。$\rmlatex$パッケージ版で簡単に打ち消し線の色を変更できる`\renewcommand{\CancelColor}{color_command}`はMathJaxでは使用できないみたいなので、colorと組み合わせることで実現します。

```latex:cancel
ˋˋˋmath
\require{cancel}

\cancel{\tan\frac{\pi}{2}=\infty} \\
\bcancel{\pi = 3.14} \\
7\times8 = \color{red}{\xcancel{\color{black}{54}}} \color{red}{56}\\
{}_6\mathrm{C}_3 = \frac{\cancelto{\cancelto{1}{2}}{6}\cdot 5\cdot \cancelto{2}{4}}{\cancelto{1}{3}\cdot \cancelto{1}{2}\cdot 1} = 20
ˋˋˋ
```

```math
\require{cancel}

\cancel{\tan\frac{\pi}{2}=\infty} \\
\bcancel{\pi = 3.14} \\
7\times8 = \color{red}{\xcancel{\color{black}{54}}} \color{red}{56}\\
{}_6\mathrm{C}_3 = \frac{\cancelto{\cancelto{1}{2}}{6}\cdot 5\cdot 4}{\cancelto{1}{3}\cdot \cancelto{1}{2}\cdot 1} = 20
```

### 参照
- [cancel – Place lines through maths formulae](https://www.ctan.org/pkg/cancel)
- [use CancelColor in mathjax - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/417734/use-cancelcolor-in-mathjax/417945#417945)

## bbox
MathJaxの独自機能みたいです。`\bbox[backgroundcolor,margin,style]{math}`で数式の周りを四角形の枠で囲えます。余白を自然な感じにするのは困難です。ただ、`style`はCSSのように設定できて強いです。

```latex:bbox
ˋˋˋmath
\bbox[#a9a9a9,1px]{\text{オイラーの公式}} \\
\bbox[12px,border: 3px dotted]{e^{\mathrm{i}\theta} = \cos\theta + \mathrm{i}\sin\theta} \\
\bbox[dimgray,15px,border: 7px outset gray]{\text{ボタン風}}
ˋˋˋ
```

```math
\bbox[#a9a9a9,1px]{\text{ オイラーの公式}} \\
\bbox[10px,border: 3px dotted black]{e^{\mathrm{i}\theta} = \cos\theta + \mathrm{i}\sin\theta} \\
\bbox[dimgray,13px,border: 7px outset gray]{\text{ボタン風}}
```

### 参照
- [TeX and LaTeX extensions - BBox](https://docs.mathjax.org/en/v2.6-latest/tex.html#bbox)

## enclose
数式の装飾を行えるMathMLの`<menclose>`にあたる機能を`\enclose{notation}[attributes]{math}`としてMathJaxに実装しています。外枠が`box`以外も選べるbboxという感じです。文字と枠の間隔はbboxと比べてかなりいい感じ。ただし、Qiitaのバージョンのencloseでは`[attributes]`で設定できるのは線(とその中の数式)の色を変更する`mathcolor`、背景色を設定する`mathbackground`のみで、bboxのようにCSS式で`[attributes]`を設定できません。これが原因でbboxの上位互換にはなれていません。**`\require{enclose}`が必要**です。

```latex:rounndedboxで囲う
ˋˋˋmath
\require{enclose}

% mathcolorは中身の色も変えてしまうため数式の色をcolorで黒に変更
\frac{G(s)}{\enclose{roundedbox}[mathcolor="red"]{\color{black}{1+G(s)H(s)}}} \\
\enclose{roundedbox}[mathcolor="red"]{\color{white}{█}}=0 \quad \text{をフィードバック制御系の特性方程式という}
ˋˋˋ
```

```math
\require{enclose}

% mathcolorは中身の色も変えてしまうため数式の色をcolorで黒に変更
\frac{G(s)}{\enclose{roundedbox}[mathcolor="red"]{\color{black}{1+G(s)H(s)}}} \\
\enclose{roundedbox}[mathcolor="red"]{\color{white}{█}}=0 \quad \text{をフィードバック制御系の特性方程式という}
```

`{notation}`を変えるとcancelと全く同じ事ができます。

```latex:赤いバツ印をencloseで引きたい
ˋˋˋmath
1+1 = \enclose{updiagonalstrike downdiagonalstrike}[mathcolor="red"]{\color{black}{3}} \color{red}{2}
ˋˋˋ
```

```math
1+1 = \enclose{updiagonalstrike downdiagonalstrike}[mathcolor="red"]{\color{black}{3}} \color{red}{2}
```

### 参照
- [Decorations - Commands Reference - MathLive Docs](https://docs.mathlive.io/tutorial-COMMANDS_REFERENCE.html)
- [TeX and LaTeX extensions - Enclose](https://docs.mathjax.org/en/v2.6-latest/tex.html#enclose)

## HTML
bboxでCSS風の記法ができる点について触れましたが、HTMLという拡張機能ではなんと数式に直接CSS装飾が行える`\style{css}{math}`マクロが存在します。

```latex:\styleよくばりセット
ˋˋˋmath
(x+1)^2 = \style{color: #228B22;
background-color: whitesmoke;
cursor: help;
font-weight: bold;
font-style: italic;
outline: 3px gray dashed;}{(x+1)(x+1)}
ˋˋˋ
```

```math
(x+1)^2 = \style{color: #228B22;
background-color: whitesmoke;
cursor: help;
font-weight: bold;
font-style: italic;
outline: 3px gray dashed;}{(x+1)(x+1)}
```

私が試した限りでは上記のCSSプロパティがカスタマイズ可能でした。outlineが設定可能と分かったときは**bbox要る？**と思いましたが、どうも上下の部分は数式が表示されるエリアからはみ出てしまってoutlineはあまり使えないオプションのようです。
bboxとencloseと`\style`を使いこなせれば、よりQiita映えする数式を実現できるかもしれません。

HTML拡張にある他の機能としては、かつてはQiitaでも`\href{url}{math}`マクロが使えたらしいのですが、亡き者となりました。今ではこのコマンドを打っても無視されて出力されます。
`\cssId{ID}{math}`、`\class{name}{math}`マクロは、JavaScriptと組み合わせることで例えばボタンを押すと数式が見えるようになるといった動的な制御が可能になるものですが、これらもどうやらQiitaでは機能しないようです。まぁこのコマンドだけ生きててもユーザーには活用法がないですが。

### 参照
- [MathJaxを利用したQiita上でのXSS](https://qiita.com/yyu/items/e510fa0819a67f227177)
- [TeX and LaTeX extensions - HTML](https://docs.mathjax.org/en/v2.6-latest/tex.html#html)

## action
Web上ならではの表現を可能とする拡張機能としてはactionもその一つでしょう。MathMLの`<maction>`にアクセスできるようになります。使えるマクロは`\mathtip{math}{tip}`、`\texttip{math}{tip}`、`\toggle{math1}{math2}...{mathn}\endtoggle`の3つ。**`\require{action}`が必要**です。

```latex:action
ˋˋˋmath
\require{action}
\mathtip{\triangle ABC \sim \triangle DEF}{\because \angle A=\angle D \text{かつ} \angle B=\angle E \text{かつ} \angle C=\angle F} \\
\texttip{E = mc^2}{3.5ピコグラムのエネルギーで1キログラムのお湯が沸く!!!} \\
\toggle{A=B}{B=C}{\therefore A=C}\endtoggle
ˋˋˋ
```

```math
\require{action}
\mathtip{\triangle \mathrm{ABC} \sim \triangle \mathrm{DEF}}{\because \angle A=\angle D \text{かつ} \angle B=\angle E \text{かつ} \angle C=\angle F} \\
\texttip{E = mc^2}{3.5ピコグラムのエネルギーで1キログラムのお湯が沸く!!!} \\
\toggle{A=B}{B=C}{\therefore A=C}\endtoggle
```

`\mathtip`と`\texttip`は数式にマウスカーソルを合わせるとその名の通りtipが表示されます。tipとして使えるのが数式かテキストかが異なります。`\toggle`と`\endtoggle`で囲まれた数式はクリックするとその順番に表示が切り替えられます。最後の数式をクリックすると最初に戻り以降ループ。
ちなみにスマートフォン上では`\toggle`はタップで問題なく動作し、`\mathtip`もタップするとtipが表示されますが`\texttip`はtipを表示させる方法がなさそうです。私のスマホでのみの確認ですが。

### 参照
= [TeX and LaTeX extensions - action](https://docs.mathjax.org/en/v2.6-latest/tex.html#action)

## unicode
`\unicode[height,depth][font]{char_ref}`でUnicode文字を直接指定することが出来ます。これの面白いのは、`[font]`を指定できるところです。全員が全員に意図した表示がされる保証はありませんが…。

```latex:unicode
ˋˋˋmath
AC \unicode[0.5,0.05]{8735} BC \Longrightarrow AB^2 = AC^2 + BC^2
ˋˋˋ
```

```math
AC \unicode[0.5,0.05]{8735} BC \Longrightarrow AB^2 = AC^2 + BC^2
```

### 関連する拙稿
- [MathJax(Qiitaの数式表示)で立体(upright)のギリシャ小文字を表示してみたい](https://qiita.com/nasuB/items/dd035030ccb0e8e514bf)

## extpfeil
矢印の上下に文字を入れたい時があります。smathに`xleftarrow[bottom]{top}`、`xrightarrow`がありますが、矢印の種類が少ないので不便を感じる方もいらっしゃるでしょう。extpfeilでは`\xtwoheadrightarrow`、`\xtwoheadleftarrow`、`\xmapsto`、`\xlongequal`、`\xtofrom`の5種類を提供します。

が、これでも欲しい矢印がない場合もあります([extarrows](https://www.ctan.org/pkg/extarrows)のが使いたいんだよ！ とか)。そのようなときのために、新しく延伸可能な矢印を定義するコマンド`\Newextarrow{\name}{lspace,rspace}{unicode-char}`が実装されています。しかしMathJaxが原因で伸ばせる文字は限られています。**`\require{extpfeil}`が必要**です。

```latex:extpfeil
ˋˋˋmath
\require{extpfeil}

\square \xlongequal{\text{定義!!}} \frac{1}{c^2}\frac{\partial ^2}{\partial t^2} - \Delta \\
\Newextarrow{\xLongleftrightarrow}{5,10}{8660} a \xLongleftrightarrow[\text{as you like}]{\text{extensible}} b \\
\Newextarrow{\xlrarrow}{5,10}{8703} a \xlrarrow[\text{ちゃんと伸ばせない}]{} b
ˋˋˋ
```

```math
\require{extpfeil}

\square \xlongequal{\text{定義!!}} \frac{1}{c^2}\frac{\partial ^2}{\partial t^2} - \Delta \\
\Newextarrow{\xLongleftrightarrow}{5,10}{8660} a \xLongleftrightarrow[\text{as you like}]{\text{extensible}} b \\
\Newextarrow{\xlrarrow}{5,10}{8703} a \xlrarrow[\text{ちゃんと伸ばせない}]{} b
```

### 参照
- [extpfeil – Extensible arrows in mathematics](https://www.ctan.org/pkg/extpfeil)
- [TeX and LaTeX extensions - extpfeil](https://docs.mathjax.org/en/v2.6-latest/tex.html#extpfeil)

## verb
入力したテキストをそのまま出力できる`\verb|text|`が使えます。空白文字もそのまま出力。`ˋ...ˋ`と`ˋˋˋ...(複数行)...ˋˋˋ`があるQiitaでは不要かな。

```latex:verb
ˋˋˋmath
\Game \verb|は\Gameと入力すれば出ます。| \\
\verb*text中で|を使いたいときは他の記号で囲む*
ˋˋˋ
```

```math
\Game \verb|は\Gameと入力すれば出ます。| \\
\verb*text中で|を使いたいときは他の記号で囲む*
```

## mhchem
**実は使えます。**このことに気づいて記事を書いたと言っても過言ではありません。**`\require{mhchem}`宣言が必要**です。

[mhchem](https://www.ctan.org/pkg/mhchem)は化学表記法をより平易に$\rmlatex$の数式環境で記述出来る強力なパッケージです。MathJaxのみならず最近はKaTeXにもサードパーティの拡張機能として対応しました。mhchemによって表現できる化学式の例を下に示します。

```latex:mhchem
ˋˋˋmath
\require{mhchem}
\ce{Na + H2O ->[{Explosively react}] NaOH + 1/2 H2 ^}
\ce{HF(aq) <<=> H3O+.F-}
ˋˋˋ
```

```math
\require{mhchem}
\ce{Na + H2O ->T[Explosively react] NaOH + 1/2 H2 ^} \\
\ce{HF(aq) <<=> H3O+.F-}
```

ここのmhchem for MathJaxはv2.6.0で、最新のv3.xと比べると機能面で劣ります。例えば、v3以降は本家$\rmlatex$版でさえ存在しない最新機能として「Kröger-Vinkの表記法」という~~私には何を表しているのか分からない~~表現を簡単に記述出来る(例:`\ce{Li^x_{Li,1-2x}}`$\fallingdotseq \ce{Li^{$\times$}_{Li,$1-2x$}}$)のですが、Qiitaで左記を実現するには`\ce{}`中に`^{$\times$}`を入れるといった工夫が必要です。しかし軽い用途ならこのバージョンでも十分でしょう。
化学反応式を書いている記事がQiitaにもあったので需要はなくはないはず。Qiitaをケミカルに染めたい方は今日から使いましょう。

### 参照(v3前提の内容なので注意)
- [mhchem for MathJax](https://mhchem.github.io/MathJax-mhchem/)

## まとめ
いかがでしたか？意外とMathJaxって機能豊富ですね。この記事で少しでも新しい発見があって表現の幅を広げていただけたら幸いです。
よりよいQiita執筆ライフを！

## MathJaxの拡張機能に関するドキュメントはこちら
- [MathJax TeX and LaTeX Support — MathJax 2.6 documentation](https://docs.mathjax.org/en/v2.6-latest/tex.html#tex-and-latex-extensions)
- [The TeX/LaTeX Extension List — MathJax 3.0 documentation](https://docs.mathjax.org/en/latest/input/tex/extensions/index.html)

[^require]: `\require{}`自体も拡張機能の一つです。