名前の分からない数学記号の LaTeX コマンドを特定する方法

<!-- # 名前の分からない数学記号の LaTeX コマンドを特定する方法 -->

教科書や参考書、論文等を読んでいると、見たこともないような数学記号を使っていることがあります。記号そのものや演算の意味を理解していても、LaTeX でこのような記号を再現しようとするときには、コマンドが分からなければ再現できません。

[short-math-guide.pdf][pdf-smguide] を参照すれば、基本的な数学記号のコマンドリストを得ることが出来ますが、これだけでは到底足りないことが大いにあります。

[pdf-smguide]: http://tug.ctan.org/info/short-math-guide/short-math-guide.pdf "short-math-guide - Guide to using amsmath and related packages to typeset mathematical notation with LaTeX (PDF)"

このような名前の分からない数学記号のコマンドを特定するには、大きく分けて 3 つの方法があります。

- フリーハンドから特定する
- Unicode から特定する
- TeX ソースから特定する

本記事では、名前の分からない数学記号のコマンドを特定する 3 つの方法を紹介します。

## ■ フリーハンドから特定する

Detexify を使うと、フリーハンドで書いた記号から特定できます。

https://detexify.kirelabs.org/classify.html

![Detexify](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/6c787091-c9fd-9406-efe1-3aae9d4cb0a7.png "Detexify のイメージ")

これで記号がヒットすれば解決です。必要なパッケージも記載されています。

:::note warn
このツールが対応するパッケージは [symbols-a4.pdf][pdf-symbolsA4] を参照しているようですが、最新のものがすべて網羅されているわけではないようです。

また、unicode-math パッケージは対応していないので注意が必要です。
:::

[pdf-symbolsA4]: https://tug.ctan.org/info/symbols/comprehensive/symbols-a4.pdf "The Comprehensive LaTeX Symbol List - Symbols accessible from LaTeX (PDF)"

## ■ Unicode から特定する

Shapecatcher を使って、フリーハンドで書いた記号から Unicode を特定します。

https://shapecatcher.com/

![Shapecatcher](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/bcba88ef-808e-541a-4a71-34bf4551a68d.png "Shapecatcher のイメージ")

CJK 以外の 11,817 文字を調べることが出来ます。（と言いつつ平仮名はヒットします）

:::note info
Unicode がヒットしなければ、求めている記号は独自に作成された記号の可能性が高いです。
:::

求めていた記号がヒットした場合、**“Unicode hexadecimal” の “x” 以下 4 桁の英数字** を見てください。Unicode hexadecimal は Unicode の 16 進文字コードです。

例えば、`÷` に関して調べると、次のような結果を得ます。

![Division sign](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/575c8f8f-5d52-d5be-b986-431ed606f601.png "Division sign の例")

`÷` の Unicode hexadecimal は “0xf7” です。このように “x” 以下が 4 桁ない場合は、4 桁になるように頭に 0 を与えてください。すなわち、`÷` の Unicode hexadecimal の 4 桁の英数字は “00f7” です。

:::note info
In block 項目に “Mathematical” という言葉が含まれている、あるいは Unicode category [^unicode-category] が Math symbol に属していれば、少なくともその記号が数学記号用に意図された文字となっています。

類似した記号が複数挙げられた場合は、これを指標にすると良いでしょう。
:::

[^unicode-category]: 特定の文字の Unicode category を知りたい場合は、[compart.com][unicode-compart] を利用すると良いでしょう。compart.com 内で当該文字、あるいは `U+<x 以下の 4 桁>` を検索します。Category 項目に Math Symbol (Sm) の記述があれば、数学関連の記号になります。

[unicode-compart]: https://www.compart.com/en/unicode "Unicode - Compart"

この後、次の 2 つのいずれかを参照して、4 桁の英数字を内部検索します。

- [unimathsymbols.html](https://milde.users.sourceforge.net/LUCR/Math/unimathsymbols.html "Unicode characters and corresponding LaTeX math mode commands") または [unimathsymbols.pdf](https://milde.users.sourceforge.net/LUCR/Math/unimathsymbols.pdf "Unicode characters and corresponding LaTeX math mode commands (PDF)")
- [unimath-symbols.pdf](http://mirrors.ctan.org/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf "Symbols defined by unicode-math (PDF)") (unicode-math)

先の例の `÷` に関して、Unicode hexadecimal の “00f7” を unimath-symbols.pdf 内で検索してみると、次ような結果を得ます。これで、`÷` が `\div` であることが分かりました。

![division sign in unimath-symbols.pdf](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/2e55fbb4-fa2f-700a-f650-3beab82145e0.png)

なお、unimath-symbols.pdf は unicode-math のドキュメント 1 つであり、TeX Live に収録されているため、ターミナルから表示させることが出来ます。

```console
$ texdoc unimath-symbols
```

### ▽ unicode-math 以外のパッケージを探す

多くの場合で unicode-math とその他のパッケージは同じようなコマンド名となっています。

unicode-math パッケージ以外のパッケージから記号を探したい場合、[symbols-a4.pdf][pdf-symbolsA4] から探します。

先の例の `÷` に関して、`\div` であることが分かったので、symbols-a4.pdf 内で検索してみると、次のような結果を得ます。（結果は索引ページを参照しています）

![\div in symbols-a4.pdf](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/f80deca1-b5f9-5c0b-49ca-2816e6e97b2b.png)

なお、symbols-a4.pdf は TeX Live に収録されており、ターミナルから表示させることが出来ます。

```console
$ texdoc symbols
```

当然ですが、symbols-a4.pdf に掲載されていないパッケージのコマンドについて追うことは出来ません。また、unicode-math と異なるコマンド名となっている場合も追えません。

### ▽ Unicode 名で Google 検索する

unicode-math に収録されていない文字だった場合、Google 等の検索エンジンで次のように検索します。

```search
"unicode name" latex command
```

このような検索方法で、概ねの記号は解決できるでしょう。

## ■ TeX ソースから特定する

少しイレギュラーな方法です。

[arXiv](https://arxiv.org) 等で得た論文を読んでいる際に、分からない記号に遭遇した場合、もとの TeX ファイルを得ることで解消できます。

この方法であれば、複雑に調べなくても簡単に答えに辿り着くことが出来ます。また、上 2 つの方法で特定できなかった記号を特定する唯一の方法です。

arXiv では、当該論文ページの “Donwload” → “Other formats” から Formats selector に移動し、“Download source” からソースをダウンロードすることが出来ます。ソースファイルが複数ある場合は、<samp>.tar.gz</samp> 形式です。

<samp>.tar.gz</samp> 形式の場合は、ターミナルで `tar` を利用して以下のように解凍することが出来ます。

```console
$ tar -zxvf <file_name>
```

ファイル内で独自に複雑な定義がなされていて、どのようにするべきか分からない場合、[de-macro][] のような独自定義を開くツールを利用するのも 1 つの手でしょう。

[de-macro]: https://ctan.org/pkg/de-macro "CTAN: Package de-macro"

## ★ 実例

実際に、以下の `×` を 2 つ重ねたような数学記号のコマンドを特定してみましょう。

![mysterious mathematical symbol](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/4142b9a5-28ee-d525-0be9-4c4479033195.png "コマンド名の分からない記号が含まれる数式：\symcal{O}_X ????? \symcal{O}_Y")

1. Detexify を利用してフリーハンドで探す
    - 期待している記号が出ませんでした

    ![result of Detexify](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/2b8e0f71-9bc2-0ee7-2d86-6cc9ecd86bf5.png "Detexify で探す様子")

1. Shapecatcher を利用して Unicode 名を特定する
    - 期待している記号 (⨳) が出ました
        - Unicode name: Smash product
        - Unicode hexadecimal: 0x**2a33**

    ![result of Shapecatcher](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/cd514e46-ae8d-7f05-8e3d-aab50003c2bf.png "Shapecatcher で探す様子")

1. unimath-symbols.pdf 内で “2a33” を検索する
    - `\smashtimes` であることが分かりました

    ![search at unimath-symbols.pdf](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/f234f624-ae56-3a3c-78f7-4cefebe2671d.png "unimath-symbols.pdf 内で検索した様子")

1. symbols-a4.pdf で “smashtimes” を検索する
    - 2 つのパッケージでも利用できることが分かりました
        - boisik
        - stix

1. Google で ["smash product" latex command][google] を検索する
    - [既存の `\times` を組み合わせるような記事][stackexchange] が出てきました
    - 今回はコマンド名を特定しているため、 ["smashtimes" latex command][google2] と検索することも出来ます

[google]: https://www.google.com/search?q=%22smash+product%22+latex+command "search by Google"
[google2]: https://www.google.com/search?q=%22smashtimes%22+latex+command "search by Google"
[stackexchange]: https://tex.stackexchange.com/questions/128271/creating-new-symbol-derived-from-hash "math mode - Creating new symbol derived from hash - TeX - LaTeX Stack Exchange"

# 余談

数式にはさまざまな記号が使われます。その中には、記号そのものや演算の意味を理解していても、LaTeX のコマンドを知らないものもあります。

誰かに訊くことで解決することもありますが、誰も知らないコマンドがまれによく出てきます。

本記事のような方法によって、名前の分からない数学記号のコマンドを特定する一助になれば幸いです。

紹介した方法の他にも、名前の分からない数学記号のコマンドを特定する方法があれば教えてください。

----------

Shapecatcher を使って記号を Unicode から特定する場合、軽微な形状の違いは気にしないでください。あるいは、気になれば総当たりすることをお勧めします。

例えば、`\hslash` と `\hbar` や `\emptyset` と `\varnothing` 等は Unicode 上では同じ文字コードとなっています。（フォントによっては、これらの組が代替字形として収録されています）

また奇妙なことですが、`\Game` はフォントによって形状が大きく異なります。

![\Game in unimath-symbols.pdf](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/53809447-f0f9-dc24-a8a0-f28831d500de.png "unimath-symbols.pdf 内での \Game の例")

U+2141 の Unicode 名は “turned sans-serif capital g” なので、縦軸線対称となっているのはおかしいです。（[参考][unicode-q]：縦軸線対称の場合は “reversed” となります）
しかしながら、AMS フォントでは縦軸線対称な “⅁” となっているため、これを踏襲する形になっているようです。

[unicode-q]: https://unicode.org/faq/casemap_charprop.html#16 "Q: Where can I find formal definitions of the terms used in character names? In particular designations like “turned”, “inverse”, “inverted”, “reversed”, “rotated”. - FAQ - Character Properties, Case Mappings and Names"

----------

数学記号についてはある程度、特定に至ることが出来ますが、数学記号以外については特定することが出来ません。

たとえば、化学における標準状態をあらわす円に水平線を引いたような記号 ([Plimsoll symbol][standardstate]) を調べるとします。
本記事の調べ方をすると、Unicode では Circle with Horizontal Bar “⦵”、unicode-math では `\circlehbar` のみが該当します。

[standardstate]: https://en.wikipedia.org/wiki/Standard_state#Typesetting "Standard state - Wikipedia"

しかし、標準状態を表す記号は、`\standardstate` (chemmacros, chemstyle)、`\minuso` (stmaryrd)、`\stst` (plimsoll) が一般的です。([LaTeX Stack Exchange][stackexchange-chem])

[stackexchange-chem]: https://tex.stackexchange.com/questions/495563/chemical-standard-state-symbol-with-achemso-article "chemistry - Chemical standard state symbol with achemso article - TeX - LaTeX Stack Exchange"

また、天文学で利用するような星座シンボルに至っては unicode-math ですべてがサポートされていないため、類似記号さえ追うことは出来ません。（`\astrosum` (`U+02609` “☉”)、`\female` (`U+02640` “♀”)、`\male` (`U+02642` “♂”) のみがサポートされている）
ただし、これに関しては数が少なく Google 検索も容易なため、それほど問題にはならないと思われます。