unicode-math でフォントを使いこなしたい

<!-- # unicode-math でフォントを使いこなしたい -->

unicode-math では OpenType フォントを利用して Unicode な数式を出力することが出来ます。このフォントを簡単に変更できます。

本記事では、unicode-math を利用してフォントを変更したり、フォントの機能を利用する方法を紹介します。

:::note info
本記事における unicode-math のバージョンは 0.8r です。
:::

## フォントを変更する

unicode-math でフォントを変更する場合、`\setmathfont` を利用して OpenType フォントを指定します。

```latex
\setmathfont{<font>}
```

後述しますが、`\setmathfont` はオプション引数から OpenType フォントの機能を利用することが出来ます。

ここで、`<font>` はフォント名あるいはフォントのファイル名を指していますが、一般に一覧化されていません。
そのため、次節では TeX Live に集録されている OpenType フォントの一覧にします。

### unicode-math で使えるフォント

unicode-math で利用できる OpenType フォントを luafindfont で探しました。

```console
$ luafindfont math
  No.                   Filename         Symbolic name                                                                  Path
   1.             asana-math.otf             asanamath          d:/texlive/2023/texmf-dist/fonts/opentype/public/asana-math/
   2.                  asana.ttc             asanamath          d:/texlive/2023/texmf-dist/fonts/truetype/public/asana-math/
   3.                cambria.ttc           cambriamath                                                     c:/windows/fonts/
    ⋮
  29.          xitsmath-bold.otf              xitsmath                d:/texlive/2023/texmf-dist/fonts/opentype/public/xits/
  30.       xitsmath-regular.otf              xitsmath                d:/texlive/2023/texmf-dist/fonts/opentype/public/xits/
```

これによって、TeX ツリー内では以下の 19 のフォントが数式フォントとして利用できることが分かりました。（フォント名はフォントのファミリ名です）

| フォント名                                     | ファイル名                 |
| :--------------------------------------------- | :------------------------- |
| [Asana Math][asana-math]                       | Asana-Math.otf             |
| [Concrete Math][concmath-otf]                  | Concrete-Math.otf          |
| [Erewhon Math][erewhon-math]                   | Erewhon-Math.otf           |
| [Euler Math][euler-math]                       | Euler-Math.otf             |
| [Fira Math][firamath-otf]                      | FiraMath-Regular.otf       |
| [Garamond-Math][garamond-math]                 | Garamond-Math.otf          |
| [GFS Neohellenic Math][GFSNeohellenicMath]     | GFSNeohellenicMath.otf     |
| [KpMath Regular][kpfonts-otf]                  | KpMath-Regular.otf         |
| [Libertinus Math][libertinus-otf]              | LibertinusMath-Regular.otf |
| [Latin Modern Math][lm-math]                   | latinmodern-math.otf       |
| [NewComputerModernMath][NewComputerModern]     | NewCMMath-Regular.otf      |
| [STIX Two Math][sitx2-otf]                     | STIXTwoMath-Regular.otf    |
| [TeX Gyre Bonum Math][tex-gyre-bonum-math]     | texgyrebonum-math.otf      |
| [TeX Gyre DejaVu Math][tex-gyre-math-dejavu]   | texgyredejavu-math.otf     |
| [TeX Gyre Pagella Math][tex-gyre-pagella-math] | texgyrepagella-math.otf    |
| [TeX Gyre Schola Math][tex-gyre-schola-math]   | texgyreschola-math.otf     |
| [TeX Gyre Termes Math][tex-gyre-termes-math]   | texgyretermes-math.otf     |
| [XCharter Math][xcharter-math]                 | XCharter-Math.otf          |
| [XITS Math][xits]                              | XITSMath-Regular.otf       |

[asana-math]: https://www.ctan.org/pkg/asana-math "CTAN: Package asana-math"
[concmath-otf]: https://www.ctan.org/pkg/concmath-otf "CTAN: Package concmath-otf"
[erewhon-math]: https://www.ctan.org/pkg/erewhon-math "CTAN: Package erewhon-math"
[euler-math]: https://www.ctan.org/pkg/euler-math "CTAN: Package euler-math"
[firamath-otf]: https://www.ctan.org/pkg/firamath-otf "CTAN: Package firamath-otf"
[garamond-math]: https://www.ctan.org/pkg/garamond-math "CTAN: Package garamond-math"
[GFSNeohellenicMath]: https://www.ctan.org/pkg/GFSNeohellenicMath "CTAN: Package GFSNeohellenicMath"
[kpfonts-otf]: https://www.ctan.org/pkg/kpfonts-otf "CTAN: Package kpfonts-otf"
[libertinus-otf]: https://www.ctan.org/pkg/libertinus-otf "CTAN: Package libertinus-otf"
[lm-math]: https://www.ctan.org/pkg/lm-math "CTAN: Package lm-math"
[NewComputerModern]: https://www.ctan.org/pkg/NewComputerModern "CTAN: Package NewComputerModern"
[sitx2-otf]: https://www.ctan.org/pkg/sitx2-otf "CTAN: Package sitx2-otf"
[tex-gyre-bonum-math]: https://www.ctan.org/pkg/tex-gyre-bonum-math "CTAN: Package tex-gyre-bonum-math"
[tex-gyre-math-dejavu]: https://www.ctan.org/pkg/tex-gyre-math-dejavu "CTAN: Package tex-gyre-math-dejavu"
[tex-gyre-pagella-math]: https://www.ctan.org/pkg/tex-gyre-pagella-math "CTAN: Package tex-gyre-pagella-math"
[tex-gyre-schola-math]: https://www.ctan.org/pkg/tex-gyre-schola-math "CTAN: Package tex-gyre-schola-math"
[tex-gyre-termes-math]: https://www.ctan.org/pkg/tex-gyre-termes-math "CTAN: Package tex-gyre-termes-math"
[xcharter-math]: https://www.ctan.org/pkg/xcharter-math "CTAN: Package xcharter-math"
[xits]: https://www.ctan.org/pkg/xits "CTAN: Package xits"

<details>
<summary>フォント基本情報（折りたたみ）</summary>

フォント情報は [wakamaifondue.com][] で調べました。

[wakamaifondue.com]: https://wakamaifondue.com/ "Wakamai Fondue, the tool that answers the question “what can my font do?”"

Font features の詳細については、以下を参照してください。

- [Feature tags (OpenType 1.9) - Typography | Microsoft Learn](https://learn.microsoft.com/en-us/typography/opentype/spec/featuretags "Feature tags (OpenType 1.9) - Typography | Microsoft Learn")
- [List of typographic features - Wikipedia](https://en.wikipedia.org/wiki/List_of_typographic_features "List of typographic features - Wikipedia")

|      フォント名       | Characters (Glyphs) | Font features                                                                                                                                                                 |
| :-------------------: | :-----------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|      Asana Math       |     3445 (3447)     | dtls, onum, ssty, salt, kern,                                                                                                                                                 |
|     Concrete Math     |     2234 (2236)     | dtls, onum, ssty, kern, cv01, cv02, cv03, cv04, cv05, cv06, cv07, cv08, cv09, cv10, ss03, ss04, ss05, ss06,                                                                   |
|     Erewhon Math      |     2862 (2864)     | dtls, lnum, onum, pnum, ssty, tnum, kern, cv00, cv01, cv02, cv03, cv04, cv05, cv06, cv07, cv08, cv09, cv10, cv11, cv20, cv21, cv22, ss03, ss04, ss05, ss06, ss07, ss09,       |
|      Euler Math       |     3220 (3222)     | dtls, onum, ssty, salt, kern, cv01, cv02, cv03, cv04, cv05, cv06, cv09, cv10, ss05, ss06,                                                                                     |
|       Fira Math       |     1565 (2094)     | dtls, pnum, ssty, liga, ss01, ss02, ss03,                                                                                                                                     |
|     Garamond-Math     |     2595 (5243)     | dtls, pnum, ssty, kern, ss01, ss02, ss03, ss04, ss05, ss06, ss07, ss08, ss09, ss10, ss11,                                                                                     |
| GFS Neohellenic Math  |     2795 (3546)     | dtls, lnum, ssty, tnum, c2sc, kern, smcp,                                                                                                                                     |
|        KpMath         |     3446 (3448)     | dtls, lnum, onum, ssty, cv00, cv01, cv02, cv03, cv04, cv05, cv06, cv07, cv08, cv09, cv10, ss01, ss02, ss03, ss04, ss05, ss06, ss07,                                           |
|    Libertinus Math    |     3647 (4130)     | ssty, zero, dlig, hlig, liga, locl, kern, mark, mkmk, ss08,                                                                                                                   |
|   Latin Modern Math   |     2044 (4802)     | dtls, ssty, aalt,                                                                                                                                                             |
| NewComputerModernMath |     4007 (7041)     | dtls, ssty, aalt, cv01, ss01, ss02,                                                                                                                                           |
|     STIX Two Math     |     4604 (6760)     | dtls, flac, ssty, aalt, locl, case, ccmp, kern, cv01, cv02, cv03, cv04, ss01, ss02, ss03, ss04, ss05, ss06, ss07, ss08, ss09, ss10, ss11, ss12, ss13, ss14, ss15, ss16, ss20, |
|  TeX Gyre Bonum Math  |     2105 (4246)     | dtls, ssty, aalt,                                                                                                                                                             |
| TeX Gyre DejaVu Math  |     2111 (4280)     | dtls, ssty, aalt,                                                                                                                                                             |
| TeX Gyre Pagella Math |     2105 (4246)     | dtls, ssty, aalt,                                                                                                                                                             |
| TeX Gyre Schola Math  |     2105 (4246)     | dtls, ssty, aalt,                                                                                                                                                             |
| TeX Gyre Termes Math  |     2105 (4246)     | dtls, ssty, aalt,                                                                                                                                                             |
|     XCharter Math     |     2674 (2676)     | dtls, lnum, onum, ssty, cv00, cv01, cv02, cv03, cv04, cv05, cv06, cv07, cv08, cv09, cv10, cv20, cv21, cv22, ss03, ss04, ss05, ss06, ss07,                                     |
|       XITS Math       |     3561 (4559)     | dtls, ssty, kern, rtls, cv01, ss01, ss02, ss03, ss04, ss05, ss06, ss07, ss08, ss09, ss10,                                                                                     |

</details>

----------

数式フォントに関するサンプルを作成しました。以下の記事を参照してください。

https://qiita.com/Yarakashi_Kikohshi/private/07f94ac2810ca5de4b6d

## Character variant と Stylistic set

OpenType フォントには、代替となる字形を選択できる **Character variant** と **Stylistic set** という機能があります。この機能を利用することで、いくつかの数学記号の代替字形をサポートしています。

Character variant は特定の 1 字、Stylistic set は複数文字のセットが対象になっています。
また、Character variant は `cv01`\~`cv99` までの 99、Stylistic set は `ss01`\~`ss20` までの 20 の代替字形組があります。

:::note info
フォントの Character variant・Stylistic set の詳細を知りたい場合は、パッケージガイドまたは [wakamaifondue.com][] を参照してください。具体的な字形の違いを見ることが出来ます。
:::

unicode-math では、`\setmathfont` のオプションから `CharacterVariant`・`StylisticSet` を有効にできます。

```latex
\setmathfont{<font>}[
    CharacterVariant = <cv_number>,
    StylisticSet = <ss_number>,
  ]
```

Stylistic set に関して、特定の字形範囲のみを指定する場合は次のように指定します。

```latex
\setmathfont{<font>}
\setmathfont{<font>}[
    range = { <character> },
    StylisticSet = <ss_number>,
  ]
```

`range` では文字コードまたは字形組を指定します。
字形組は次の 17 を指します。（固有コマンド接頭辞とは異なることに注意してください）

|                                                                                                                                      |
| :----------------------------------------------------------------------------------------------------------------------------------: |
| `up`・`bfup`、`it`・`bfit`、`bb`・`bbit`、`cal`・`bfcal`、`frak`・`bffrak`、`scr`・`bfscr`、`sfup`・`bfsfup`、`sfit`・`bfsfit`、`tt` |

また、字形組の `<character>` の後に `/` に続けて `latin`・`Latin` や `greek`・`Greek` を置くことでラテン文字やギリシャ文字のみにフォーカスすることが出来ます。

```latex
\setmathfont{<font>}[
    range = <character>/{greek, Greek},
    % 小文字ギリシャ文字と大文字ギリシャ文字のみのスタイルにフォーカス
  ]
```

:::note info
Character variant・Stylistic set に割り当てられる機能は、フォントによって大きく異なることに注意してください。

また、`cv`・`ss` 番号と機能もフォントによって異なります。
:::

この節では Character variant・Stylistic set に関する主要な例を紹介します。

### `\hslash` と `\emptyset`

これまでの LaTeX では、“ℏ” はスラッシュが斜めの `\hslash` と水平の `\hbar`、`\emptyset` “∅” は円が ○ の `\varnothing` と 0 の `\emptyset` の 2 つの字形があります。
しかし、これらは Unicode 上で異なる文字として登録されていません。

したがって、unicode-math では同一記号を出力します。

![hslash and emptyset](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e1a18ca8-3a6c-28d3-8cfe-bab86fd52e8d.png "hslash と emptyset の代替字形 - XCharter-Math.pdf から")

これらは Character variant・Stylistic set を利用することで切り替えることが出来ます。

TeX Live に集録されているフォントでは次のようになっていました。

| フォント名    | `\hslash` | `\emptyset` |
| :------------ | :-------: | :---------: |
| Concrete Math |  `cv01`   |   `cv02`    |
| Erewhon Math  |  `cv01`   |   `cv02`    |
| Euler Math    |  `cv01`   |   `cv02`    |
| Garamond-Math |  `ss06`   |      -      |
| KpMath        |  `cv01`   |   `cv02`    |
| STIX Two Math |  `ss03`   |   `cv03`    |
| XCharter Math |  `cv01`   |   `cv02`    |
| XITS Math     |  `ss10`   |      -      |

XCharter Math を利用しているときに `\hslash` を `cv01` の代替字形に変更する場合：

```latex
\usepackage{unicode-math}
\setmathfont{XCharter Math}[
    CharacterVariant = 1,
  ]
```

Character variant は `range` を指定しないため、`\setmathfont` を重複して読み込む必要がありません。

### Calligraphic 体と Script 体

これまでの LaTeX では、`\mathcal`・`\mathscr` のような異なる 2 つの Calligraphic 体と Script 体があります。
しかし Unicode はこの 2 つの字形を区別せず、同じ文字コードとして登録されています。そのため、フォントをそのままを利用する際には、この 2 つの字形を同時に使うことが出来ません。

この問題を Stylistic set から解消することが出来ます。

以下のフォントには、Calligraphic/Script 体を切り替える Stylistic set があります。

- `scr, bfscr`:
    - NewComputerModernMath (`ss01`)
    - STIX Two Math (`ss01`)
- `cal, bfcal`:
    - XITS Math (`ss01`)
    - KpMath (`ss01`)
    - Garamond-Math (`ss03`, `ss08`)

NewComputerModernMath と STIX Two Math は、元の字形が `\mathcal` に相当するため、Stylistic set の有効にする範囲を `scr, bfscr` のみに限定します。

```latex
\setmathfont{STIX Two Math}
\setmathfont{STIX Two Math}[
    range = { scr, bfscr },
    StylisticSet = 1
  ]
```

一方で、XITS Math、KpMath、Garamond-Math は、元の字形が `\mathscr` に相当するため、Stylistic set の有効にする範囲を `cal, bfcal` のみに限定します。

```latex
\setmathfont{XITS Math}
\setmathfont{XITS Math}[
    range = { cal, bfcal },
    StylisticSet = 1
  ]
```

上のように `range` のスタイルをフォントによって変えない場合、`\mathcal`・`\mathscr` と `\symcal`・`\symscr` の対応が逆転します。

STIX Two Math と Garamond-Math (`ss08`) は、小文字も切り替えの対象になっています。また、Garamond-Math (`ss08`) は `bfcal` が `cal` の太字に対応しません。

<details>
<summary> フォントサンプル（折りたたみ）</summary>

![NewComputerModern-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/db3ceb11-ffbc-5483-1d5b-1ccf2fa2ce92.png)

![STIXTwoMath-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/49396318-f66d-2775-3707-dcc7d8da25b8.png)

![XITSMath-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/9b1e0cc8-f5cf-ff12-40c9-6104acf5e870.png)

![KpMath-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/a6047832-5580-dea0-0204-75b4bb0d4c9f.png)

![Garamond-Math-03](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/f6b235ee-506c-3a75-eaae-78a7590687b7.png)

![Garamond-Math-08](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/b1918254-b5f5-9925-0a23-d876d4e8253f.png)

</details>

### 黒板太字のセリフ・サンセリフ体

黒板太字には、セリフ体とサンセリフ体があります。これを切り替える Stylistic set が与えられているフォントがあります。

- Garamond-Math (`ss01`)
- KpMath (`ss02`)

Garamond-Math を利用しているときに黒板太字をセリフ体に変更する場合：

```latex
\setmathfont{Garamond-Math}[
    StylisticSet = 1
  ]
```

<details>
<summary> フォントサンプル（折りたたみ）</summary>

![KpMath-02](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/9a0dfa83-c5a4-7ed6-dfc0-167bc5a37955.png)

![Garamond-Math-02](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/601b3da6-a6e6-5188-a7c4-a4c38c7c0027.png)

</details>

----------

ちなみに、黒板太字の斜体が使いたい場合、`\symbbit` で指定できるシンボルは “ⅅ”・“ⅆ”・“ⅇ”・“ⅈ”・“ⅉ” の 5 つのみです。もしもすべてのラテン文字で斜体黒板太字を利用したい場合は XITS Math の `ss06` を利用すると `\symbb` が斜体黒板太字になります。（`ss07` は太字斜体の黒板太字です）

### その他

Character variant・Stylistic set には上記の他に以下のような代替字形があります。

- Character variant:
    - “0” の代替字形 (e.g. `cv00`)
    - ギリシャ文字の代替字形 (e.g. `cv03`\~`cv10`)
    - `\partial` (𝜕) の代替字形 (e.g. `cv11`)
    - `\symscr` における “E”・“Q”・“T” の代替字形 (e.g. `cv20`\~`cv22`)
- Stylistic set:
    - upint (e.g. `ss03`)
    - leqslant (e.g. `ss04`)
    - smaller (e.g. `ss05`)
    - subsetneq (e.g. `ss06`)
    - parallelslant (e.g. `ss07`)

代替字形の詳細については割愛しますが、簡易的に知りたい場合は、[Erewhon Math][erewhon-math] または [XCharter Math][xcharter-math] のパッケージガイドを参照してください。

[STIX Two Math][sitx2-otf] はより多くの代替字形を有しています。

## 複数のフォントを導入する

:::note warn
別のフォントを含める場合、シンボルのウェイト等の部分で元のフォントとの雰囲気が合致しない可能性があることに注意してください。
:::

`\setmathfont` では、`range` を利用して特定の範囲のシンボルを別のフォントに切り替えることが出来ます。

例えば、Stylistic set で Calligraphic/Script 体を切り替えることのできない Latin Modern Math を利用している場合を考えます。
Latin Modern Math では、`\mathcal` に相当する字形のみが提供されるため、`\mathscr` に相当する字形を別のフォントから導入する必要があります。

以下のようにすると、`\symscr`・`\symbfscr` だけ XITS Math に変更することが出来ます。

```latex
\setmathfont{Latin Modern Math}
\setmathfont{XITS Math}[
    range = { scr, bfscr }
  ]
```

他にも、`StylisticSet = 1` を含めて NewComputerModernMath の Script 体に変更することも出来ます。

```latex
\setmathfont{Latin Modern Math}
\setmathfont{NewComputerModernMath}[
    range = { scr, bfscr },
    StylisticSet = 1
  ]
```

----------

`range` は文字コードの指定もできます。

例えば、NewComputerModernMath を利用しながら、大型演算子だけ Concrete Math に変更する場合を考えます。

unimath-symbols.pdf を参照することで、大型演算子の文字コード (USV) を書き出すと、次のリストのようになることが分かります。
（unimath-symbols.pdf ではまとめられていますが、文字コードはバラバラになっていることに注意してください）

- `U+2140`
- `U+220F`\~`U+2211`
- `U+222B`\~`U+2233`
- `U+22C0`\~`U+22C3`
- `U+27D5`\~`U+27D9`
- `U+29F8`\~`U+29F9`
- `U+2A00`\~`U+2A21`
- `U+2AFC`
- `U+2AFF`
- `U+1EEF0`\~`U+1EEF1`

元の USV では `U+02140` のように 5 桁で表現されていますが、頭が `0` の場合は削っても大丈夫です。
また、実際に指定する際には `U+` を `"` に置き替えます。

以下のように、NewComputerModernMath に加えて Concrete Math を `range` で指定します。

```latex
\setmathfont{NewComputerModernMath}
\setmathfont{Concrete Math}[
    range = {
      "2140,
      "220F-"2211,
      "222B-"2233,
      "22C0-"22C3,
      "27D5-"27D9,
      "29F8-"29F9,
      "2A00-"2A21,
      "2AFC, "2AFF,
      "1EEF0-"1EEF1,
    }
  ]
```

これに加えて、Concrete Math には積分記号を立体にする `ss03` があります。これを有効にしたい場合は以下のようにします。

```latex
\setmathfont{NewComputerModernMath}
\setmathfont{Concrete Math}[
    range = {
      "2140,
      "220F-"2211,
      "222B-"2233,
      "22C0-"22C3,
      "27D5-"27D9,
      "29F8-"29F9,
      "2A00-"2A21,
      "2AFC, "2AFF,
      "1EEF0-"1EEF1,
    },
    StylisticSet = 3,
  ]
```

ただし、あまりにも多くのフォントを利用しようとすると、タイプセットが遅くなり成果物の PDF のサイズが大きなものになります。

## Stylistic set とリテラル入力

Stylistic set で変更した字形は、`\sym~` で変更する字形にのみ影響します。

そのため、TeX ソースへのリテラルな入力や固有コマンドを直接打つ場合には有効になりません。（元の字形が出力されます）

|                       |                      |
| :-------------------: | :------------------: |
| ![scr StylisticSet][] | ![bb StylisticSet][] |

[scr StylisticSet]: https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/918d12b8-9bd8-347f-b37a-05baf198edb1.png "Script 体の例"
[bb StylisticSet]: https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/9904e803-d3b0-76d6-1a6e-c821c7a4367f.png "黒板太字の例"

# 余談

unicode-math を使うために Unicode や OpenType フォントの知識もちょっと必要になるバグ。

TeX Live には otfinfo がありますが、情報がテキストのみなので、あまり有益な情報を得ることが出来ませんでした。
[wakamaifondue.com][] は OpenType フォントファイルをアップロードすることで、フォントに関する情報を視覚的に得ることができ、非常に便利でした。

## ローカル内のフォントの探し方

fontspec パッケージでは、otfinfo を使ってフォント情報を得ろと書いてありました。フォントファイルのあるフルパスが分かる場合はこれで十分です。

```console
$ otfinfo -i `kpsewhich lmroman10-regular.otf`
Family:              LM Roman 10
Subfamily:           Regular
Full name:           LMRoman10-Regular
PostScript name:     LMRoman10-Regular
Preferred family:    Latin Modern Roman
Preferred subfamily: 10 Regular
Mac font menu name:  LM Roman 10 Regular
Version:             Version 2.004;PS 2.004;hotconv 1.0.49;makeotf.lib2.0.14853
Unique ID:           2.004;UKWN;LMRoman10-Regular
Trademark:           Please refer to the Copyright section for the font trademark attribution notices.
Copyright:           Copyright 2003, 2009 B. Jackowski and J. M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License --  see http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt for details.
Vendor ID:           UKWN
```

`-i` を `-f` にするとフォント機能 (font **f**eature) を知ることができます。

任意のフォントを探したい場合は、luafindfont を利用すると良いです。
TeX ツリー外のフォントも探せるため便利です。

```console
$ luafindfont concrete
  No.          Filename Symbolic name                                                            Path
   1.       cmunobi.otf  cmuconcrete    d:/texlive/2023/texmf-dist/fonts/opentype/public/cm-unicode/
   2.       cmunobx.otf  cmuconcrete    d:/texlive/2023/texmf-dist/fonts/opentype/public/cm-unicode/
   3.       cmunorm.otf  cmuconcrete    d:/texlive/2023/texmf-dist/fonts/opentype/public/cm-unicode/
   4.       cmunoti.otf  cmuconcrete    d:/texlive/2023/texmf-dist/fonts/opentype/public/cm-unicode/
   5. concrete-math.otf concretemath  d:/texlive/2023/texmf-dist/fonts/opentype/public/concmath-otf/
```

ちなみに、ややこしいですが OpenType フォントの拡張子は <samp>.otf</samp> の他にも <samp>.ttf</samp>、<samp>.ttc</samp> もあります。拡張子だけで OpenType フォントではない（TrueType フォントだ）と決めつけないように注意してください。（[参考][opentype]）
実際、Windows に標準インストールされている Cambria Math は <samp>.ttc</samp> です。

[opentype]: https://plife.studio/2017/08/10/font-otf-ttf-ttc/ "フォントOpen Type、True Type、.otf .ttf .ttcって何？ - 徳島の広告制作・ブランディング会社+Life Studio（プラスライフスタジオ）"

<!-- ## 新たな OpenType フォントの導入

一部のフォントは CTAN に登録されているにも関わらず、TeX Live の配布条件を満たさないために集録されていないことがあるようです。
[この記事][efonts] では [getnonfreefonts][] を利用することで簡単に導入できると説明されていますが、OpenType フォントに限っては手動で導入しても簡単です。

[getnonfreefonts]: https://www.tug.org/fonts/getnonfreefonts/ "getnonfreefonts"
[efonts]: https://www.nagaoka-ct.ac.jp/ec/labo/visu/usb/tex2/efonts.shtml "USB メモリ活用講座【TeX 欧文フォントパッケージ活用】"

例えば [URW Classico][classico] フォントを導入する場合：

[classico]: https://ctan.org/pkg/classico "CTAN: Package classico"

1. CTAN ページで Zip ファイルをダウンロード
1. Zip ファイルを解凍
1. <samp>.otf</samp> ファイルのみを以下のパスに配置
    ```path
    %TEXMF-LOCAL%\fonts\opentype\urw\classico
    ```
1. URW Classico フォントを利用したドキュメントのタイプセット実行すると luaotfload が勝手に更新してくれます

パッケージガイドは `%TEXMF-LOCAL%\doc\classico` にドキュメントを配置し、mktexlsr を実行すれば良いです。
-->