2
0

More than 1 year has passed since last update.

unicode-math の注意するべき落とし穴

Last updated at Posted at 2023-09-01

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

varGreek by amsmath

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 下での各コマンドの結果です。このオプション下では、大文字ギリシャ文字は立体です。

varTheta and itvarTheta

逆に、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” では \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

これらのコマンド組は同じ記号として出力されます

hslash and emptyset

区別されないことでどの程度の問題が生じるか分かりませんが、これらについてはフォントの Character variant や Stylistic set によって字形を変えることが出来ます。

例えば、XCharter Math を利用しているときに \hslashcv01 代替字形に、\emptysetcv02 代替字形に変更する場合:

\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 では intlimitssumlimitsnamelimits の 3 つの添え字に関するパッケージオプションがあります。

unicode-math を利用しているとき、これらの添え字に関するパッケージオプションは正常に機能しません
この問題はすでにリポジトリで Issue #497 が提出されています。

ただし、明示的な \limits\nolimits は機能します。

余談

unicode-math にはこれまでの LaTeX にはない注意すべき落とし穴がいくつかあります。

ここでは紹介していませんが、コロンやハイフンを利用する際にはパッケージガイドを参照しておくと良いでしょう。
Unicode にはこれらの類似した記号が複数あるため、どの記号を利用するべきか書いてあります。

追記

  • 2023/09/05: コメントでの指摘を受けて修正しました。
2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0