マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

unicode-math を完全に理解したい話(1)

unicode-math パッケージにおける数式フォントの扱いについて学習中なので、学習メモをてきとーに書き流しておく。

※数式フォントの中でも、特に数式英字フォント(数字、ラテン文字ギリシャ文字の類)に焦点を当てている。

前提知識

従来の LaTeX における数式フォントの扱い

従来の LaTeX にいて、数式フォントは次の“軸”をもつ。

  1. 数式英字(math alphabet)フォントの選択
    • 無指定:この場合、字種ごとに異なる数式英字フォントが適用される。((数字は \mathrm、英字は \mathnormal……のようになっている。))
    • \mathnormal:“数式イタリック”((これは「無指定」とは異なることに注意。「無指定」状態に戻す(TeX でいうと \fam=-1 をする)命令は LaTeX にはない。))
    • \mathrm:立体
    • \mathbf:太字立体
    • \mathsfサンセリフ立体
    • \mathit:斜体(イタリック*1
    • \mathtt:等幅立体
    • \mathcal筆記体
    • ユーザ(パッケージ)により追加可能。AMSFonts の \mathfrak(ドイツ文字)や \mathbb(黒板太字)等が有名。
  2. 数式バージョン(math version)。例えば \boldmath とか。((数式バージョンを指定する汎用の命令は \mathversion であり、\boldmath\mathversion{bold} と等価。))
  3. フォントサイズ。これはテキストフォントと共通である。

この中で、一つの数式の中で変更できるのは 1 だけで、2 と 3 は数式開始時点の設定値が全体に適用される。((つまり、数式の中で \boldmath\large を実行しても効かない。))

テキストフォントのサイズ以外の属性、つまりエンコーディング・ファミリ・シリーズ・シェープは数式フォントには適用されない。特に、一つの数式の中の数式フォントは書体に関して単一の軸しか持たないことに注意。((つまりテキストの \textbf{\textit{a}} は両方の設定が効いて「太字の斜体」となるが、数式の \mathbf{\mathit{a}} は単に(無駄に)2 回設定を変えているだけで、単なる斜体になる。))

数式英字フォントが無指定の場合のラテン文字\mathnormal の文字)は斜体であるが、特に単文字の識別子(xE の類)を書くのに適したデザインになっていて、「数式イタリック(math italic*2)」と呼ばれる。これに対して \mathitラテン文字は複数文字の識別子(\mathit{dist} の類)を書くのに用いられる。ところが、このような「単文字と複数文字の区別」は斜体以外の書体には存在しない。\mathrm\mathsf は単文字と複数文字の何れにも用いられる。\mathcal\mathfrak は専ら単文字に用いられる。

Unicode の「数式用の書体指定付き文字」

数式を“言語”の一種とみた場合、「書体が違うだけの文字が別のものを指す」という特異な性質をもつ。これに対応するため、Unicode では“数式用の書体指定付き文字”(以下では「数式書体付文字」と呼ぶ)が登録されている。Unicode で定められている数式用書体の一覧を以下に示す。ここで「ラベル」欄は unicode-math がその書体を指す時に用いているラベルを表す。

ラベル 説明 ラテン小文字 e に相当する文字
up 立体 U+0065 LATIN SMALL LETTER E
it 斜体 U+1D452 MATHEMATICAL ITALIC SMALL E
bb 黒板太字(立体) U+1D556 MATHEMATICAL DOUBLE-STRUCK SMALL E
bbit 黒板太字斜体 U+2147 DOUBLE-STRUCK ITALIC SMALL E
scr 筆記体 U+212F SCRIPT SMALL E
frak ドイツ文字 U+1D522 MATHEMATICAL FRAKTUR SMALL E
tt 等幅 U+1D68E MATHEMATICAL MONOSPACE SMALL E
sfup サンセリフ立体 U+1D5BE MATHEMATICAL SANS-SERIF SMALL E
sfit サンセリフ斜体 U+1D626 MATHEMATICAL SANS-SERIF ITALIC SMALL E
bfup 太字立体 U+1D41E MATHEMATICAL BOLD SMALL E
bfit 太字斜体 U+1D486 MATHEMATICAL BOLD ITALIC SMALL E
bfscr 太字筆記体 U+1D4EE MATHEMATICAL BOLD SCRIPT SMALL E
bffrak 太字ドイツ文字 U+1D58A MATHEMATICAL BOLD FRAKTUR SMALL E
bfsfup 太字サンセリフ立体 U+1D5F2 MATHEMATICAL SANS-SERIF BOLD SMALL E
bfsfit 太字サンセリフ斜体 U+1D65A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
  • 「数式書体付文字」をもつのは数字、基本ラテン文字、基本ギリシャ文字((\varphi(U+03D5) 等の数式用異体字、および便宜的にナブラ記号(\nabla;U+2207)と偏微分記号(\partial;U+2202)を含む。))。
    • ただしこれらの文字の全てについて数式用書体の全てが揃っているわけでない。例えば、数字の斜体やギリシャ文字の黒板太字は存在しないし、また黒板太字斜体はごく一部の文字(D、d、e、i、j)にしか存在しない。
  • 「立体」(up) は通常の(数式用でない)文字と共用する。上の例の U+0065 が該当する。
  • 「数式書体付文字」の多くは「Mathematical Alphanumeric Symbols(U+1D400〜1D7FF)」のブロックに収められているが、このブロックが設けられる前に Unicode に存在した文字を「数式用の書体指定付き文字」と統合した事例もある。上の例の U+2147、U+212F が該当する。
立体と斜体の“非区別”

単文字識別子についての、「書体が違うものは別の文字」という原則は、一部の分野(物理とか?)では厳密に守られている。*3しかし数学では、「立体と斜体の区別は利用せずに、字種により片方のみを使用する」という習慣がある。*4

plain TeX では(米国の習慣に従って?)次のような設定になっている。

この辺りの習慣は地域により異なる。昔のフランスでは「ラテン小文字は斜体でそれ以外は立体」という規則が用いられていた。

*1:数式には oblique 体は出てこないので、ここでは italic を「斜体」と呼ぶ。

*2:LaTeX の用語ではないが、plain TeX の用語であるようだ。

*3:例えば、一つの文脈に「立体の m」「斜体の m」「太字斜体の m」が現れて、それらが全て別のものを指すという用法も決して珍しくない。

*4:恐らくは「数式中の識別子は斜体で表す」という習慣が、本文の欧文と紛れる(例えば「There exists a value a and …」)ことを避けるためであったから、ラテン小文字以外では積極的に斜体にする理由がないのだと思う。

*5:LaTeX では「数式バージョンを切り替えることで太字にする」ことで太字が使える。ギリシャ小文字の立体はサポートされないので、結果的に、太字斜体が使われることになる。