unicode-math で扱うラテン文字とギリシャ文字の字形は数多くあります。(本記事では、ラテン文字とギリシャ文字をまとめて “シンボルアルファベット” と呼称します)
シンボルアルファベットの字形を利用する方法は、これまでの LaTeX とは異なります。また、一部の字形はパッケージオプションの影響を受けます。
本記事では、シンボルアルファベットの字形とその入力方法、パッケージオプションについて紹介します。
本記事における unicode-math のバージョンは 0.8r です。
シンボルアルファベットの基本
unicode-math が扱う Unicode な数学記号の内、シンボルアルファベットには数多くの字形があります。
シンボルアルファベットの字形には 3 つのパラメタがあります。また、それぞれのパラメタには複数の要素があります。
それぞれの字形は、これらのパラメタを組み合わせます。(すべてのパターンがあるわけではありません)
-
Series:
- 中字(ふつうの太さ)
- 太字
-
Shape:
- 立体
- 斜体
-
Style:
- セリフ体
- サンセリフ体
- 等幅
- 黒板太字
- Script 体(カリグラフィー体)
- フラクトゥール
例えば、これまでにおける x は中字斜体のセリフ体、\mathsf{A} は中字立体のサンセリフ体です。
これに加えて Unicode には、これまでの LaTeX で表現しえなかった太字立体のサンセリフ体や太字立体の Script 体などが含まれており、unicode-math でも扱うことが出来ます。
unicode-math におけるシンボルアルファベットは 4 つの入力方法があります。
- 基本シンボルアルファベット
- 固有コマンド
- リテラル
- スイッチコマンド
本記事では、以下 108 の記号を “基本シンボルアルファベット” と呼称します。
- ラテン文字 (26×2)
-
a~z -
A~Z
-
- ギリシャ文字 (24×2)
-
\alpha~\omega -
\Alpha~\Omega
-
- ギリシャ文字のバリアント (8)
-
\varepsilon,\vartheta,\varkappa,\varpi,\varrho,\varsigma,\varphi \varTheta
-
これ以外の 3 つの入力方法は次節以降で解説します。
固有コマンド
unicode-math を利用していても、これまで通り x や \alpha 等の基本シンボルアルファベットを入力することで、シンボルアルファベットを入力することが出来ます。
しかし、unimath-symbols.pdf を見れば明らかなように、それぞれの字形のシンボルアルファベットにはそれぞれにコマンド名が与えられています。(本記事では、これを “固有コマンド” と呼称します)
この固有コマンド名は難解ではなく、基本シンボルアルファベットのコマンド名に m または Bbb から始まる接頭辞が与えられているだけのものです。(ただし、立体セリフ体のラテン文字には接頭辞が与えられず A 等、コマンドにはありません)
このような接頭辞を本記事では “固有コマンド接頭辞” と呼称することとします。
mup, mbf, mit, mbfit, msans, mbfsans, mitsans, mbfitsans, mtt, Bbb, mitBbb, mscr, mbfscr, mfrak, mbffrak
|
例えば、Script 体には接頭辞として mscr が与えられています。そのため、\mscrA とすれば Script 体 “𝒜” が出力されます。
また、固有コマンドによる入力は リテラル入力 (e.g. 𝒜) と同じ効果を得ます。
このような接頭辞を与えた固有コマンド入力とリテラル入力は、ともにパッケージオプションの影響を受けるシンボルアルファベットがあります。
そのため、期待した記号が TeX ソースのまま出力されない可能性があります。
例えば、\mbfA を入力した場合、太字立体セリフ体のラテン文字 “𝐀” が出力されることが期待されます。しかし、bold-style オプションが ISO の場合、太字斜体セリフ体のラテン文字 “𝑨” が出力されます。
スイッチコマンド
これまでの LaTeX では、例えば立体セリフ体にするには \mathrm、立体サンセリフ体にするには \mathsf を利用してきました。
unicode-math では、これまでの LaTeX で利用していた字形を変更するコマンド(スイッチコマンド)が異なります。
シンボルアルファベットの字形を変更するには、必ず \sym~ を使ってください。
| 字形 | これまでの LaTeX | unicode-math |
|---|---|---|
| 立体 |
\mathrm・\mathup
|
\symup |
| 太字 |
\mathbf・\boldsymbol・\bm
|
\symbf ※1 |
| サンセリフ体 | \mathsf |
\symsf ※1 |
| 太字サンセリフ体 | - |
\symbfsf ※1 |
| タイプライター | \mathtt |
\symtt |
| 黒板太字 | \mathbb |
\symbb |
| 斜体黒板太字 | - | \symbbit |
| Script 体 |
\mathcal・\mathscr
|
\symcal・\symscr ※2 |
| 太字 Script 体 | - | \symbfscr |
| フラクトゥール | \mathfrak |
\symfrak |
| 太字フラクトゥール | - | \symbffrak |
※1 \symbf・\symsf・\symbfsf は立体と斜体をパッケージオプションによって指定されます。明示的に立体・斜体を指定するには末に up・it を付けます。(e.g. \symbfit)
※2 Unicode にはこれまでの LaTeX における \mathcal と \mathscr に対応するような文字コードは存在せず、2 つを区別して登録されていません。そのため、\symscr と \symcal の 2 つのコマンドが用意されていますが、双方とも同じ文字コードの文字を得ます。
これらの スイッチコマンドは、基本シンボルアルファベットと mup・mit とそのリテラルのみ引数に受け付けます。この他の固有コマンドを引数に受け付けることができないことに注意してください。
例えば、次のようにしても太字立体 Script 体は再現されません。
\symbfscr のみが太字 Script 体を再現します。
\symbf{\mscrA} \symbf{𝒜}
\symbfup{\mscrA} \symbfup{𝒜}
一方で、\symbfscr に \mitx や 𝑥 を与えることが出来ます。
% \symbfscr{x} と同じ結果を得る
\symbfscr{\mitx} \symbfscr{𝑥}
スイッチコマンドは入れ子にして表現しません。
すなわち、\symbfscr{...} を \symbf{\symscr{...}} のようにしません。
シンボルアルファベットの字形まとめ
以上の固有コマンドとスイッチコマンドについて表にしました。
スイッチコマンドと固有コマンド接頭辞が類似しないことに注意してください。
これまでアラビア数字について説明を避けてきましたが、ここで簡単に説明しておきます。
- 字形は立体のみ
- 固有コマンドは
zero~nineに固有コマンド接頭辞を与える - 中字立体は
0~9であり、固有コマンド接頭辞は与えない - その他の仕様はシンボルアルファベットと同様
当然ですが、アラビア数字は立体のみなので \symbf 等を利用してもパッケージオプションの影響を受けません。(必ず立体になります)
パッケージオプション
unicode-math のパッケージオプションの主要な目的は、ラテン文字とギリシャ文字それぞれの大文字・小文字、計 4 つの立体・斜体を制御することにあります。
これは、TeX の慣習的な表現方法や ISO で規定されている表現方法などが異なるためです。
パッケージオプションの指定方法は以下の通りです。
\usepackage[
math-style = ISO,
bold-style = ISO,
]{unicode-math}
あるいは、\unimathsetup を利用することで以下のようにもできます。
\usepackage{unicode-math}
\unimathsetup{
math-style = ISO,
bold-style = ISO,
}
次節以降でパッケージオプションの詳細を紹介します。
シンボルアルファベット
unicode-math における 3 つの主要なパッケージオプションです。
これらのパッケージオプションは、シンボルアルファベットが立体と斜体のどちらを採るのかを制御します。(いずれのパッケージオプションも独立しています)
| パッケージオプション | スイッチコマンド | 対象字形 |
|---|---|---|
math-style |
- | 中字セリフ体(ふつうの文字) |
bold-style |
\symbf |
太字セリフ体 |
sans-style |
\symsf |
中字サンセリフ体 |
sans-style |
\symbfsf |
太字サンセリフ体 |
math-style と bold-style に関して、次の表にまとめました。いずれのオプションもデフォルト値は TeX です。
背景色が灰色になっている数式は立体になっています。
math-sytle は、x や \alpha と入力したときに出力される文字が立体か斜体かを制御しています。
例えば、math-style = TeX 下では、大文字ギリシャ文字は立体、これ以外は斜体になります。ISO 下ではすべて斜体、upright 下ではすべて立体です。
bold-style は \symbf による字形変更の結果が立体か斜体かを制御しています。
例えば、bold-style = TeX は \mathbf を踏襲しています。
sans-style に関しては次の表にまとめました。デフォルト値は upright です。
背景色が灰色になっている数式は立体になっています。
サンセリフ体のギリシャ文字は Unicode に存在しないため、\symsf{\greek} によってサンセリフ体のギリシャ文字は出力されません。
サンセリフ体には太字サンセリフ体もありますが、\symbfsf は sans-sytle オプションにのみ影響を受け、bold-style からは独立しています。
パッケージオプションは、スイッチコマンドに加えて固有コマンドにも波及します。
例えば、\mbfA と \mbfitA は math-style によって同じ字形になります。
パッケージオプションが影響する範囲を固有コマンド接頭辞で表現すると、次のようになります。
-
math-style(432):- 接頭辞なし(基本シンボルアルファベット)
-
mup(ギリシャ文字のみ) mit- 上記記号のリテラル
-
bold-style(432):mbfmbfit- 上記記号のリテラル
-
sans-style(640):-
msans(ラテン文字のみ) -
mitsans(ラテン文字のみ) mbfsansmbfitsans- 上記記号のリテラル
-
\nabla と \partial
\nabla と \partial はパッケージオプションの影響を受けます。それぞれ italic と upright を受け入れることが出来ます。
Unicode にはなぜか立体・斜体の \nabla・\partial の他に、太字セリフ体、太字サンセリフ体があります。
パッケージオプションにおけるそれぞれの字形を表にすると次のようになります。
デフォルトは nabla = upright、partial = italic です。
このオプションは他のオプションから独立しています。
そのため、太字セリフ体の \nabla・\partial を出力する場合は \symbf{\nabla} などとしますが、bold-style オプションの影響を受けません。同様に、太字サンセリフ体の \nabla・\partial を出力する場合は \symbfsf{\nabla} 等としますが、sans-style オプションの影響を受けません。
パッケージオプションが影響する固有コマンドは次の各 12 つです。
-
nabla:-
\nabla,\mitnabla -
\mbfnabla,\mbfitnabla -
\mbfsansnabla,\mbfitsansnabla - 上記記号のリテラル
-
\symbf,\symbfsf
-
-
partial:-
\partial,\mitpartial -
\mbfpartial,\mbfitpartial -
\mbfsanspartial,\mbfitsanspartial - 上記記号のリテラル
-
\symbf,\symbfsf
-
完全なリテラル入力
unicode-math はこれまで見てきたようにパッケージオプションによって字形が制御します。
紹介した 5 つのオプションの他に、このような制御を完全に執筆者側に委ねる literal が用意されています。この literal は math-style = literal とすることですべてのパッケージオプションが literal にセットされます。
この入力状態では、通常の中字斜体セリフ体のラテン文字でさえ x ではなく 𝑥 または \mitx と入力する必要があることに注意してください。
ギリシャ文字には立体・斜体ともに固有コマンドがありますが、入力が基本シンボルアルファベット入力の場合は中字斜体になります。
また、\symbf・\symsf・\symbfsf は立体・斜体を入力されたリテラルに依存するようになります。
このようなリテラル入力は TeX ソースが見やすくなる一方で、ただただ入力が面倒になります。
また、エディタによる入力補助があったとしても、TeX ソース内で立体・斜体や中字・太字を見た目で判断する必要があるため、TeX ソース内の確認が面倒になる可能性があります。
以上を踏まえると、literal の指定は避けた方が良いでしょう。
もしも literal 以外のオプション下で部分的にリテラル入力をしたい場合は、\symliteral を利用します。
unicode-math の推奨構成
unicode-math を利用している際の 最低限の推奨構成 を紹介しておきます。
日本における数式の慣習 これまでの LaTeX の挙動に準拠すると 1、セリフ体は中字・太字に関わらず以下のようにしていると思います。(太字は \boldsymbol あるいは bm 準拠)
- 斜体:
- 小文字ラテン文字
- 大文字ラテン文字
- 小文字ギリシャ文字
- 立体:
- 大文字ギリシャ文字
この挙動は TeX と ISO のどちらとも異なります。そのため、完全にこれに一致させることは出来ません。
なるべくこの挙動に従わせるには、以下のように構成すると良いでしょう。
\usepackage{unicode-math}
\unimathsetup{
math-style = TeX,
bold-style = ISO,
sans-style = upright,
}
太字大文字ギリシャ文字だけ気にする必要がありますが、他のラテン文字・小文字ギリシャ文字に比べれば、気にするべき箇所は少ないでしょう。
また、数式フォントは最低限 NewComputerModernMath に変更しておくと良いでしょう。
\setmathfont{NewComputerModernMath}
\setmathfont{NewComputerModernMath}[
range = {scr, bfscr},
StylisticSet = 1,
]
NewComputerModernMath はデフォルトの Latin Modern Math と類似した字形でありながら、シンボル数は約 1,000 多いです。
また、Stylistic set を利用して、\symcal と \symscr に別個の字形を割り当てています。
これに加えて、fontspec パッケージで本文英字フォントを NewComputerModern に変更しておくこともオススメしておきます。
\setmainfont{NewComputerModern10}
\setsansfont{NewComputerModernSans10}
\setmonofont{NewComputerModernMono10}
余談
unicode-math では、同じシンボルアルファベットを複数の方法で入力できるため、ちゃんと理解しようとするとかなり面倒です。
パッケージオプションが影響する範囲を思えば、これに影響されない黒板太字や Script 体は固有コマンドで入力した方が楽でしょう。
(実際、amssymb では “𝕜” が \Bbbk と定義されていました)
固有コマンドにしてもリテラル入力にしても、TeX ソース内で見やすく見分けが付く範囲で上手に使っていくと良いでしょう。
すべてスイッチコマンドで記述すると、冗長的で見づらいものになってしまうことも事実です。
記事の中盤に出したクソデカ情報モリモリ表は、自己満足的に作ったので意味が伝わりづらいかも知れません……
追記
- 2023/09/05: 推奨構成について、主観的な主張を改めました。



