mathtools パッケージでいつの間にか名前が変更された関係演算子たち！

# mathtools パッケージでいつの間にか名前が変更された関係演算子たち！

2022 年夏、[mathtools][] パッケージから提供される `:` を含むいくつかの関係演算子に関して、コマンド名の変更がなされました。この変更は、txfonts・pxfonts 等との互換を考慮するためです。

[mathtools]: https://www.ctan.org/pkg/mathtools "mathtools - CTAN"

本記事では、この変更について明らかにしてみたいと思います。

## ■ これまでの問題点

これまで、mathtools パッケージで定義されていた以下 4 つのコマンドは、txfonts・pxfonts 等とは異なる結果を得ていました。

- `\coloneq`
- `\Coloneq`
- `\eqcolon`
- `\Eqcolon`

これらのコマンド名を見て、みなさんはどのような関係演算子を想像するでしょうか。

.
.
.
.
.

実は、変更前の mathtools パッケージと txfonts・pxfonts では、コマンドの結果に次のような違いがありました。

|  コマンド  | mathtools | txfonts・pxfonts |
| :--------: | :-------: | :--------------: |
| `\coloneq` |   `:−`    |       `:=`       |
| `\Coloneq` |   `::−`   |      `::=`       |
| `\eqcolon` |   `−:`    |       `=:`       |
| `\Eqcolon` |   `−::`   |      `=::`       |

また、`:−`、`:=` のような `:` と `−`・`=` を組み合わせた記号のコマンド名は、以下の表のような命名パターンに違いがありました。“eq” で衝突が生じることが安易に想像できますね。

| 記号 | mathtools | txfonts・pxfonts |
| :--: | :-------: | :--------------: |
| `:`  |   colon   |      colon       |
| `−`  |    eq     |       dash       |
| `=`  |    eqq    |        eq        |

今回、この違いが無くなり、txfonts・pxfonts 等と同じ命名パターンを踏襲する形になりました。

## ■ 変更された関係演算子

変更された関係演算子について、mathtools のパッケージガイド 31 ページには次のように書かれています。

![Breaking change Summer 2022](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/5b1434a6-5232-f6b2-7d03-4872a9a9431d.png
"p.31 \# 3.7.3 Some extra symbols involving vertically centered colon - The mathtools package - 2022/06/29 ver.1.29")

変更について、より分かりやすくするために、関係演算子それぞれの新旧コマンド名の変更を表にしました。変更されたコマンド名に関しては太字にしています。

| 記号  |       旧       |             新              |
| :---: | :------------: | :-------------------------: |
| `:−`  |   `\coloneq`   |      **`\colondash`**       |
| `::−` |   `\Coloneq`   |      **`\Colondash`**       |
| `−:`  |   `\eqcolon`   |      **`\dashcolon`**       |
| `−::` |   `\Eqcolon`   |      **`\Dashcolon`**       |
| `:=`  |  `\coloneqq`   | **`\coloneq`**、`\coloneqq` |
| `::=` |  `\Coloneqq`   | **`\Coloneq`**、`\Coloneqq` |
| `=:`  |  `\eqqcolon`   | **`\eqcolon`**、`\eqqcolon` |
| `=::` |  `\Eqqcolon`   | **`\Eqcolon`**、`\Eqqcolon` |
| `:∼`  |  `\colonsim`   |         `\colonsim`         |
| `::∼` |  `\Colonsim`   |         `\Colonsim`         |
| `∼:`  |       -        |         `\simcolon`         |
| `∼::` |       -        |         `\Simcolon`         |
| `:≈`  | `\colonapprox` |       `\colonapprox`        |
| `::≈` | `\Colonapprox` |       `\Colonapprox`        |
| `≈:`  |       -        |       `\approxcolon`        |
| `≈::` |       -        |       `\Approxcolon`        |
| `::`  |  `\dblcolon`   |         `\dblcolon`         |

この変更は、次の 3 点にまとめられます。

- `:` と `−` を組み合わせた記号のコマンドは、まったく異なるコマンド名となっている。
- `:` と `=` を組み合わせた記号のコマンドは、旧コマンド名が残されたままとなっている。
- いくつかのコマンドが新しく追加されている。

これまで mathtools パッケージから提供された `:−` 等を利用していた人は、かなり注意が必要になります。

一方で、`:=` を `\coloneqq` で使っていた人は変わらず利用できるため、それほど注意する必要はありません。しかしながら、txfonts・pxfonts 等を利用する機会を考慮すると、`\coloneq` で慣れておいた方が賢明なこともあるかも知れません。

### ▽ `legacycolonsymbols` オプション

もしも、変更以前のコマンド名で利用したい場合には、`legacycolonsymbols` オプションを有効にすれば良いです。

```latex
\mathtoolsset{legacycolonsymbols}
```

このオプションが有効の場合、変更以前のコマンド名が利用できる他に、以下のコマンドも利用可能になります。
- 新しく追加された記号のコマンド
    - `\simcolon` (`∼:`)
    - `\Simcolon` (`∼::`)
    - `\approxcolon` (`≈:`)
    - `\Approxcolon` (`≈::`)
- `:` と `−` を組み合わせた記号のコマンド
    - `\colondash` (`:−`)
    - `\Colondash` (`::−`)
    - `\dashcolon` (`−:`)
    - `\Dashcolon` (`−::`)

`legacycolonsymbols` オプションの有効化によって提供されるコマンドは、ドキュメントの先頭で定義されます。そのため、同一名のコマンドが他のパッケージから提供される場合、上書きされることに注意が必要です。

> Note that the symbol names are added at the start of the document via the `\provide...` mechanism, thus if some font package provide a symbol of the same macro name, we do nothing.

## ■ LaTeX 以外で発生する問題

mathtools パッケージは LaTeX で利用されるパッケージである一方、MathJax や KaTeX でも mathtools に倣った機能があります。これらの機能は、この変更以前の mathtools パッケージに準拠するため、新しいコマンド名に慣れた人にとっては混乱を招く可能性があります。

https://docs.mathjax.org/en/latest/input/tex/extensions/mathtools.html#mathtools-commands

https://katex.org/docs/supported.html#relations

新しい mathtools パッケージと MathJax・KaTeX によるコロン付きの関係演算子について、以下の表にまとめました。（KaTeX は mathtools に倣ったものと [colonequals][] に倣ったものがあります）

[colonequals]: https://www.ctan.org/pkg/colonequals "colonequals - CTAN"

| 記号  |   mathtools<br>（新）   |    MathJax     | KaTeX<br>(mathtools) | KaTeX<br>(colonequals) |
| :---: | :---------------------: | :------------: | :------------------: | :--------------------: |
| `:−`  |      `\colondash`       |   `\coloneq`   |      `\coloneq`      |     `\colonminus`      |
| `::−` |      `\Colondash`       |   `\Coloneq`   |      `\Coloneq`      |   `\coloncolonminus`   |
| `−:`  |      `\dashcolon`       |   `\eqcolon`   |      `\eqcolon`      |     `\minuscolon`      |
| `−::` |      `\Dashcolon`       |   `\Eqcolon`   |      `\Eqcolon`      |   `\minuscoloncolon`   |
| `:=`  | `\coloneq`、`\coloneqq` |  `\eqqcolon`   |     `\eqqcolon`      |     `\equalscolon`     |
| `::=` | `\Coloneq`、`\Coloneqq` |  `\Eqqcolon`   |     `\Eqqcolon`      |  `\equalscoloncolon`   |
| `=:`  | `\eqcolon`、`\eqqcolon` |  `\coloneqq`   |     `\coloneqq`      |     `\colonequals`     |
| `=::` | `\Eqcolon`、`\Eqqcolon` |  `\Coloneqq`   |     `\Coloneqq`      |  `\coloncolonequals`   |
| `:∼`  |       `\colonsim`       |  `\colonsim`   |     `\colonsim`      |      `\colonsim`       |
| `::∼` |       `\Colonsim`       |  `\Colonsim`   |     `\Colonsim`      |    `\coloncolonsim`    |
| `∼:`  |       `\simcolon`       |       -        |          -           |      `\simcolon`       |
| `∼::` |       `\Simcolon`       |       -        |          -           |    `\simcoloncolon`    |
| `:≈`  |     `\colonapprox`      | `\colonapprox` |    `\colonapprox`    |     `\colonapprox`     |
| `::≈` |     `\Colonapprox`      | `\Colonapprox` |    `\Colonapprox`    |  `\coloncolonapprox`   |
| `≈:`  |     `\approxcolon`      |       -        |          -           |     `\approxcolon`     |
| `≈::` |     `\Approxcolon`      |       -        |          -           |  `\approxcoloncolon`   |
| `::`  |       `\dblcolon`       |  `\dblcolon`   |     `\dblcolon`      |     `\coloncolon`      |

MathJax・KaTeX ともに変更前の mathtools パッケージに倣っているため、コマンド名の食い違いや抜けているコマンドがあることが分かります。

どちらのリポジトリ（[MathJax][mathjax-issue]・[KaTeX][katex-issue]）を確認しても、このようなコマンド名の変更が行われたことが Issue として報告されていないようでした。気になる方がいれば、Issue を投げてみては。

[katex-issue]: https://github.com/KaTeX/KaTeX/issues?q=is%3Aissue+mathtools+is%3Aopen "KaTeX issues - GitHub"
[mathjax-issue]: https://github.com/mathjax/MathJax/issues?q=is%3Aissue+mathtools+is%3Aopen "MathJax issues - GitHub"

# 余談

破壊的な変更〜〜〜！！

変更から軽く半年以上は経っているにも関わらず、あまり取り沙汰されている様子ではないですね。あまり困る人が多くなかったのか、更新しても気付かれなかったのか、私が知らなかっただけなのか……。

私がこの変更を知ったのも、KaTeX では mathtools と同じ命名パターンで `:=` が使えないというツイートからでした。この人は新しい mathtools 使いだったようですね。