GitHub.com Markdown で利用可能な MathJax の拡張を知りたい

# GitHub.com Markdown で利用可能な MathJax の拡張を知りたい

[2022 年 5 月 19 日][githublog-mathjax] 以降、GitHub.com Markdown [^github.com-markdown] では [MathJax][] v3.2.0 が利用可能になっています。

[^github.com-markdown]: GitHub.com で利用できるすべての Markdown 記法を “GitHub Flavored Markdown” と差別化して “GitHub.com Markdown” と呼称しています。詳細は、[GitHub.com で利用可能な Markdown 記法を知りたい][github.com-markdown] を参照してください。

[github.com-markdown]: https://qiita.com/Yarakashi_Kikohshi/items/8b1ebfa798a35dec6154 "GitHub.com で利用可能な Markdown 記法を知りたい - Qiita"

[githublog-mathjax]: https://github.blog/2022-05-19-math-support-in-markdown/ "Math support in Markdown | The GitHub Blog"
[mathjax]: https://www.mathjax.org/ "MathJax | Beautiful math in all browsers."

MathJax の v3 では、拡張という形で機能をパッケージ化することで、必要な機能だけを追加できるようになっています。

https://docs.mathjax.org/en/latest/input/tex/extensions/index.html

この拡張は全体で 34 ありますが、GitHub.com Markdown で利用できる MathJax 拡張について明示的な記述はありませんでした。

本記事では、GitHub.com Markdown で利用可能な MathJax の拡張を明らかにします。

## ■ 利用可能な拡張

次の 19 の拡張が有効になっていることを確認しました。

- ams
- amscd
- boldsymbol
- braket
- bussproofs
- cancel
- cases
- centernot
- color
- empheq
- enclose
- gensymb
- mathtools
- mhchem
- textcomp (only in math mode)
- textmacros
- unicode
- upgreek
- verb

このリストを見て分かるように、require 拡張が有効になっていないため、ユーザー側から拡張を新たに有効にすることは出来ません。

また、各拡張に関して制限されているコマンドがいくつかあります。基本的に、定義に関するコマンドが制限されているようです。

|   拡張    | 制限されているコマンド                                                              |
| :-------: | :---------------------------------------------------------------------------------- |
|    ams    | `\DeclareMathOperator`, `\operatorname`                                             |
|   color   | `\colorbox`, `\fcolorbox`, `\definecolor`                                           |
| mathtools | `\DeclarePairedDelimiter`, `\DeclarePairedDelimiterX`, `\DeclarePairedDelimiterXPP` |

textcomp 拡張に関して、この拡張から提供されるコマンドは、`\text` 内で利用することが出来ません。（[参照][mathjax-textcomp]）

[mathjax-textcomp]: https://docs.mathjax.org/en/latest/input/tex/extensions/textcomp.html "textcomp — MathJax 3.2 documentation"

これ以外に関しても、それぞれの拡張に制限が加えられている可能性があります。

## ■ 利用できない拡張

次の 10 の拡張は利用できません。

- action
- bbox
- colortbl
- colorv2
- extpfeil
- html
- newcommand
- physics
- require
- setoptions

次の 5 つの拡張については、ユーザー側のコマンドによって有効となっているのか判断が付きませんでした。

- autoload
- configmacros
- noerrors
- noundefined
- tagformat

エラーが生じるような書き方をすると、コマンドがそのまま表示されたり、LaTeX のエラーメッセージが表示されます。このことを踏まえると、noerrors と noundefined 拡張が有効になっているようですが、確証が持てませんでした。

## ■ 調査方法

Gist 内で次のコードを Markdown として読ませました。拡張それぞれに固有のコマンドを確認することで、拡張が有効になっているかどうかを確かめます。

<details>
<summary>MathJax in Markdown（折りたたみ）</summary>

````markdown
- base: $`A_b`$
- action: $`\mathip{x+1}{calcuration}`$
- ams: $`\approxeq`$
- amscd:

```math
\begin{CD}
   A  @>{f}>> B \\
  @V{g}VV   @VVV \\
   C @>>>  D
\end{CD}
```

- bbox: $`\bbox[red]{x+y}`$
- boldsymbol: $`\boldsymbol{A}BC`$
- braket: $`\bra{A}`$
- bussproofs:

```math
\begin{prooftree}
  \AxiomC{A}
  \AxiomC{B}
  \BinaryInfC{D}
\end{prooftree}
```

- cancel: $`\bcancel{A}`$
- cases:

```math
\begin{numcases}{|x|=}
  x,  & for $x \geq 0$ \\
  -x, & for $x < 0$
\end{numcases}
```

- centernot: $`\centernot{A}`$
- color: $`{\color{red}A}BC`$, $`\colorbox{red}{A}BC`$, $`\textcolor{red}{Red text}`$, $`\definecolor{mygrey}{gray}{0.75}`$, $`\fcolorbox{mygrey}{A}BC`$
- colorv2: $`\color{red}{A}BC`$
- colortbl:

```math
\begin{array}{|l|c|}
  \rowcolor[gray]{.5}\columncolor{red} one & two\\
  \rowcolor{lightblue} three & four\\\hline
  five & six \\
  \rowcolor{magenta}seven & \cellcolor{green}eight
\end{array}
```

- empheq:

```math
\begin{empheq}[left={Y=\empheqlbrace}]{align}
  f(x) &= ax^2 \\
  g(x) &= bx^2
\end{empheq}
```

- enclose: $`\enclose{circle}[mathcolor="red"]{A}`$
- extpfeil: $`\Newextrarrow{\xrightarpoonup}{5,10}{0x21C0}`$, $`\xrightarpoonup`$
- gensymb: $`\ohm`$
- html: $`\href{https://docs.mathjax.org/en/latest/input/tex/extensions/html.html}{ABC}`$
- mathtools: $`\eqcolon`$
- mhchem: $`\ce{CO_2}`$
- newcommand: $`\newcommand{\newcmd}{NEW COMMAND}\newcmd`$, $`\newcmd`$

```math
\newcommand{\newcmd}{NEW COMMAND}
\newcmd
```

$`\newcmd`$

- physics: $`\abs{A}`$
- setoptions:

```math
\setOptions{tagSide=left}
E = mc^2 \tag{1}
```

- textmacros: $`\text{\textit{This is not math mode}}`$
- textcomp: $`\textbackslash\textyen`$
- unicode: $`\unicode{65}`$
- upgreek: $`\upalpha`$
- verb: $`\verb|\sqrt{x}|`$
````

</details>

# 余談

基本的に必要になる拡張は有効になっているようでした。

しかしながら、newcommand 拡張が有効になっていないため、コマンドが定義できない点については不便です。

GitHub.com Markdown で利用できる MathJax では、複数のバグが存在します。
例えば、リスト内でインラインの数式とブロックの数式が混在すると、ブロックの数式が表示されません。これはすでに GitHub の Discussion [#39545][githubdiscuss-39545] に挙げられています。

[githubdiscuss-39545]: https://github.com/orgs/community/discussions/39545 "math: block and inline math in the same list won't render · community · Discussion #39545"

この手の GitHub.com Markdown 内の MathJax に関するバグは次のリポジトリに集積されていました。

https://github.com/nschloe/github-math-bugs