unicode-math にはこれまでの LaTeX とは異なる注意点がいくつか存在します。
本記事では、unicode-math の利用前後で生じる問題を中心に注意するべきことを紹介します。
本記事における unicode-math のバージョンは 0.8r です。
フォントに存在しないシンボル
unicode-math では、コマンド(あるいはリテラル)入力に対応したシンボルが存在しない場合、単にシンボルを出力しません。このとき、警告が生成され正常にタイプセットが終了します。(参照)
ただし、この警告はエディタが検出しない場合があり、シンボルが出力されていないことに気付かない可能性があります。
これまでは、存在しないコマンドにはエラーメッセージが生成されていました。しかし、unicode-math では単にフォントにシンボルがないだけでコマンド自体は定義されています。
そのため、ログや完成したドキュメントを注意深く眺める必要があります。使用しているフォントに存在しないシンボルのコマンドを使用している可能性があります。
有効な対策方法はありませんが、なるべく 集録シンボル数の多いフォントを利用する ことをオススメします。
特にデフォルトの Latin Modern Math はシンボル数が少ないので注意してください。
unimath-symbols.pdf に一覧化されているフォントを見ると、利用できるシンボル数が書かれています。
- Latin Modern Math (1585)
- XITS Math (2429)
- STIX Two Math (2430)
- TeX Gyre Pagella Math (1638)
- DejaVu Math TeX Gyre (1640)
- Fira Math (1052)
- NewComputerModernMath (2430)
- GFS Neohellenic Math (1655)
- Erewhon Math (1662)
- XCharter Math (1640)
- Concrete Math (1637)
すべてのシンボルを使うことはありませんが、気付かない内にフォントにないシンボルを使っていることが無いようにした方が良いでしょう。
NewComputerModernMath
unicode-math では、デフォルトのフォントに Latin Modern Math を利用します。しかし、このフォントは登録されているシンボル数が 1585 しかなく、あまりにも少ないです。
STIX Two Math 等の他のフォントに変更したくない場合、Latin Modern Math に類似した NewComputerModernMath に変更することをオススメします。このフォントでは、登録されているシンボル数が 2430 あります。
NewComputerModernMath は Latin Modern Math と比べて、以下の点が異なります。
- シンボル数が約 1,000 多い
- 大文字ラテン文字の黒板太字がセリフ体(Latin Modern Math ではサンセリフ体)
NewComputerModernMath に変更するには、\usepackage{unicode-math}
の後で次のようにします。
\setmathfont{NewComputerModernMath}
大文字ギリシャ文字の立体・斜体
amsmath では、大文字ギリシャ文字に var
を与えた以下のような 11 のコマンドが与えられています。
これらは大文字ギリシャ文字の斜体です。すなわち、\mathit{\Greek}
の短縮系に相当します。
\varGamma \varSigma \varDelta
\varUpsilon \varTheta \varPhi
\varLambda \varPsi \varXi
\varOmega \varPi
unicode-math でも \varTheta
が定義されていますが、これは \Theta
のバリアント です。そのため、これまでのように \varTheta
としても “斜体の \Theta
” が出力されることはありません。
unicode-math では amsmath を読み込むため、\varTheta
以外の \varGamma
等は unicode-math ではないものが機能しますが、Unicode として斜体ギリシャ文字になっていません。
unicode-math を使っているのであれば、amsmath 由来のギリシャ文字コマンドを使うべきではありません。
また、当然 math-style
オプションの影響を受けません。
もしも、“斜体の \Theta
” が欲しければ、\symit{\Theta}
あるいは \itTheta
を利用してください。
以下は math-style = TeX
下での各コマンドの結果です。このオプション下では、大文字ギリシャ文字は立体です。
逆に、math-style = ISO
下では大文字ギリシャ文字も斜体になるため、立体にしたい場合は \symup{\Greek}
・\upGreek
にします。
ギリシャ文字を 強制的に 立体・斜体を実現したい場合は、\symup{\Greek}
・\symit{\Greek}
あるいは \upGreek
・\itGreek
とします。(大文字小文字ともに利用可能です)
注意が必要な点として、ギリシャ文字はあらゆる字形を含めてすべてに固有コマンドが与えられています。
例えば、斜体の大文字ガンマは \mitGamma
が与えられています。
\mitGreek
はあたかもどのような状況でも斜体大文字ギリシャ文字を得ることが出来ると思えてしまいますが、このコマンドはパッケージオプションの影響を受けます。
すなわち、math-style = TeX
下では、立体大文字ギリシャ文字が出力されます。
またややこしいことに、\upGreek
・\itGreek
を太字に変更する場合、\symbf{\upGreek}
・\symbf{\itGreek}
は太字のギリシャ文字を出力しません。
そのため、明示的に \symbfup{\Greek}
・\symbfit{\Greek}
とする必要があります。
\prime
これまでの LaTeX では “$x^{\prime\prime}$” のような 2 重のプライムを x^{\prime\prime}
あるいは x''
としていました。
しかし、unicode-math では 2 重・3 重・4 重のプライム(マルチプライム)が定義されています。そのため、連続した \prime
は冗長的な表現になってしまいます。
以下の表に “連続 \prime
”、“連続 '
”、“専用コマンド” の違いを表にしました。(“連続 '
” も専用コマンドと同じシンボルを得ます)
明らかに “連続 \prime
” では \prime
どうしのカーニングがおかしくなってしまいます。
パッケージガイドでは、マルチプライムの記号が存在しない場合にエラーメッセージが生成されないため、連続した '
を利用した方が良いと記載されています。
この方法であれば 5 つ以上のプライムを表現することも出来ます。
なお、この問題は \backprime
でも同様です。この場合には、\backdprime
、\backtrprime
があります。
ラプラシアンとデルタ
ラプラシアンには三角形に似た記号を利用します。Unicode には、これに対応した文字 U+2206 があります。unicode-math では、\increment
として定義されています。
一方で、“$\Delta x$” のような差分を表現するデルタは立体の \symup{\Delta}
または \upDelta
を利用します。
\symcal
と \symscr
これまでの LaTeX では、\mathcal
・\mathscr
としていたような Script 体を 2 つの字形で表現することがありました。
しかし、Unicode では、Script 体を区別せずに登録されています。そのため、unicode-math をそのまま利用すると \symcal
と \symscr
は同じ字形が出力されます。
これを解消するには、\symcal
・\symscr
のいずれか一方に別字形を割り当てる必要があります。
フォントによっては Stylistic set に代替字形が集録されているので、これを利用して 2 つに別個の字形を割り当てることが出来ます。
例えば、STIX Two Math では Stylistic set の ss01
に \mathscr
に類似した代替字形が集録されています。そのため、scr, bfscr
にこの字形を割り当てるように構成します。
\setmathfont{STIX Two Math}
\setmathfont{STIX Two Math}[
range = {scr, bfscr},
StylisticSet = 1,
]
これによって、\symcal
で \mathcal
に相当した字形、\symscr
で \mathscr
に相当した字形を得ることが出来ます。
ただし、この 2 つの字形は Unicode 上では同一の文字コードであることに注意してください。
フォントや Stylistic set に関しては以下の記事を参照してください。
異なる記号として区別されないコマンド
これまでの LaTeX では別個の記号として利用されていたものの、uniocde-math では同じ記号として出力されるコマンド組があります。
Unicode | コマンド |
---|---|
U+210F |
\hbar , \hslash
|
U+2205 |
\emptyset , \varnothing
|
これらのコマンド組は同じ記号として出力されます。
区別されないことでどの程度の問題が生じるか分かりませんが、これらについてはフォントの Character variant や Stylistic set によって字形を変えることが出来ます。
例えば、XCharter Math を利用しているときに \hslash
を cv01
代替字形に、\emptyset
を cv02
代替字形に変更する場合:
\usepackage{unicode-math}
\setmathfont{XCharter Math}[
CharacterVariant = { 1, 2 },
]
残念なことに、異なる 2 つの字形を同時に利用できません。(この 2 つを同時に利用することは滅多にないので、それほど問題にならないはずです)
フォントや Character variant に関しては以下の記事を参照してください。
3 点リーダー
amsmath では次のような 3 点リーダーがあります。
3 点リーダー | 説明 |
---|---|
\dotsc |
列挙用 |
\dotsb |
二項演算子の省略用 |
\dotsm |
積の省略用 |
\dotsi |
積分記号の省略用 |
\dotso |
その他 |
これらは \ldots
(\unicodeellipsis
) と \cdots
(\unicodecdots
) のセマンティクス的なコマンドとして利用されてきました。unicode-math でも利用することが出来ます。
amsmath にはこれらに加えて \dots
があり、これら 5 つの状況を判別して自動的に \ldots
と \cdots
を振り分けるようになっています。しかし、unicode-math では \dots
で自動判別できません。
すでにリポジトリで類似した Issue #593 が提出されていました。
ちなみに、\idotsint
は \int\cdots\int
として解釈されます。
amsmath のパッケージオプション
amsmath では intlimits
、sumlimits
、namelimits
の 3 つの添え字に関するパッケージオプションがあります。
unicode-math を利用しているとき、これらの添え字に関するパッケージオプションは正常に機能しません。
この問題はすでにリポジトリで Issue #497 が提出されています。
ただし、明示的な \limits
・\nolimits
は機能します。
余談
unicode-math にはこれまでの LaTeX にはない注意すべき落とし穴がいくつかあります。
ここでは紹介していませんが、コロンやハイフンを利用する際にはパッケージガイドを参照しておくと良いでしょう。
Unicode にはこれらの類似した記号が複数あるため、どの記号を利用するべきか書いてあります。
追記
- 2023/09/05: コメントでの指摘を受けて修正しました。