LoginSignup
3
1

重点解説! unicode-mathをもっと幸せに使う話

Last updated at Posted at 2023-12-13

これは「TeX & LaTeX Advent Caleandar 2023」の14日目の記事です。
(13日目はCareleSmith9 さんです。15日目は h-kitagawa さんです。)

以前に「徹底解説! unicode-mathパッケージでココが変わる」と題してunicode-mathパッケージの「フォント選択命令の使い方」について解説しました。その内容の通り、unicode-mathでは従来のLaTeXと比べるとフォント選択命令が“体系化”されて解りやすく1なっています。

ところが、その中でも​「立体と斜体の自動振り分け」​の話は複雑であまり直感的とはいえません。特に、ラテン文字とギリシャ文字で挙動が異なるのは、せっかく「unicode-mathではギリシャ文字のフォント選択もフツーにできるようになった」メリットを台無しにしている感じもします:frowning:

本記事では​「立体と斜体の指定」​をもっと単純にするためのunicode-mathのパッケージオプションmath-styleについて解説します。このオプションを使えばunicode-mathをもっと幸せ:blush:に使えるかもしれません。

例の記事では「unicode-mathを使い始める際の最低限必要な知識」をカバーすることを目的としているため、敢えてunicode-mathの既定の設定を前提にしました。unicode-mathに関する他の解説文献を読むにあたっては既定の挙動を知っておく必要があるからです。

前提知識

本記事での説明では多くの数学の分野のように「立体と斜体の使い分けは原則行わない2」状況を前提とします。ただしunicode-mathの機能自体の記述についてはこの限りではないので、物理学や論理学などの「立体と斜体の区別も活用する3」状況でもunicode-mathの機能の説明は有用でしょう。

復習:unicode-mathの既定設定の挙動

数式中の(ラテン・ギリシャ)文字4について、“そのまま”(フォント命令無し)の場合(セリフ・中字)や\symbfの場合(セリフ・太字)は立体と斜体の何れかに自動的に振り分けられるのでした。どちらになるかは文字種(ラテン文字かギリシャ文字か、大文字か小文字か)により決まります。

\[ a + A = ω + Ω \]
\[ \symbf{a} + \symbf{A} = \symbf{ω} + \symbf{Ω} \]

umms-image1.png

同様に立体と斜体を振り分ける\symsf\symbfsfを加えると、unicode-mathの既定設定での「に立体と斜体の振り分け」の規則は以下のようになっています5

書体 \ 文字種 ラテン ギリシャ大 ギリシャ小
そのまま(セリフ・中字) 斜体 立体 斜体
\symbf(セリフ・太字) 立体 立体 斜体
\symsf(サンセリフ・中字) 立体
\symbfsf(サンセリフ・太字) 立体 立体 立体

率直に言ってわけがわかりません:weary: この複雑な規則に何か根拠があればまだいいのですが、実際のところ、ほとんど6は「単に旧来の(La)TeXに合わせただけ」というアレ:sushi:な理由によるものだったりします。

この面倒を回避する手段として、\symbf{a}(セリフ・太字)などの「振り分けが発生する記述」を避けて\symbfup{a}(セリフ・太字・立体)や\symbfit{a}(セリフ・太字・斜体)などの具体的な書体を常に指定するというものが考えられます。ただこれを貫徹させようとすると、“そのまま”でa(セリフ・中字)のように書くことも禁止となってしまい流石にこれは不便です。結局バランスをとる必要があり、例の記事では(数字も含めて)次のような組み合わせを提案しました7

書体 \ 文字種 ラテン ギリシャ 数字
セリフ・中字・立体 \symup \symup そのまま
セリフ・中字・斜体 そのまま \symit
セリフ・太字・立体 \symbf \symbfup \symbf
セリフ・太字・斜体 \symbfit \symbfit
サンセリフ・中字・立体 \symsf \symsf
サンセリフ・中字・斜体 \symsfit

全て斜体に寄せたいとき

翻って日本での数式書体の習慣はどうだったかを考えてみると、少なくとも私の感覚では「文字種によらず中字でも太字でも文字は全て斜体にする」のが一般的だと考えられます。(La)TeXで作られた本では文字種により立体が使われることも多いですが、それは「単に(La)TeXの既定をそのまま使っただけ」であり何か別の習慣を“主張”する意図はないことがほとんどでしょう。そこで、文字種にかかわらず常に斜体を優先する設定があれば幸せ:blush:になれそうです。

unicode-mathでは「立体と斜体の振り分け」の方法を制御するためのパッケージオプション8としてmath-styleを用意しています。math-style=‹値›という形で指定し、値にはTeX9ISOfrenchuprightliteralの何れかをとります。このうち「常に斜体を優先する」に相当する設定はmath-style=ISO10です。

\usepackage[math-style=ISO]{unicode-math}

この設定により文字の「立体と斜体の振り分け」(そのまま・\symbf\symup\symbfup)の結果は全て斜体になります。

\[ a + A = ω + Ω \]
\[ \symbf{a} + \symbf{A} = \symbf{ω} + \symbf{Ω} \]

umms-image2.png

挙動が単純(常に斜体)になった「振り分け命令」を積極的に使うことにすると、各文字種・書体に対して使うべき命令の組み合わせは以下のようになります。

書体 \ 文字種 ラテン・ギリシャ 数字
セリフ・中字・立体 \symup そのまま
セリフ・中字・斜体 そのまま
セリフ・太字・立体 \symbfup \symbf
セリフ・太字・斜体 \symbf
サンセリフ・中字・立体 \symsfup \symsf
サンセリフ・中字・斜体 \symsf

ラテン文字とギリシャ文字の挙動が統一されてかなり単純になりました。まだ数字の挙動は異なりますが、数字は元々立体しかサポートされないので、ここで「文字(ラテン・ギリシャ)は原則的に11斜体しか使わない」ことに決めると、結果的に「立体と斜体の使い分けという概念がなくなる(常に数字は立体で文字は斜体)」ことになります。この場合に使うべき命令の組み合わせは以下の通りです。

書体 \ 文字種 ラテン・ギリシャ・数字
セリフ・中字 そのまま
セリフ・太字 \symbf
サンセリフ・中字 \symsf

トッテモ簡単になりました!:blush:

でもサンセリフは立体にしたいとき

math-style=ISOは「振り分け命令」を常に斜体にするため、サンセリフ(中字)用の命令\symsfも斜体になります。

\[ \symbf{e} \in \symsf{E} \]

umms-image3.png

日本においてサンセリフを立体と斜体のどちらにするのが一般的かはよく知りませんが、もし「サンセリフは原則的に立体を使う」ようにしたいのであればその設定も可能です。unicode-mathのパッケージオプションにmath-style=ISO加えてsans-style=uprightを指定します。

\usepackage[math-style=ISO,sans-style=upright]{unicode-math}

これにより「サンセリフの振り分け命令(\symsf\symbfsf)」だけ(文字種によらず)立体になります。先程の数式の出力は以下のようになります。

umms-image4.png

まとめ

unicode-mathで(日本の習慣的に)フツーの数式を書きたい人は、math-style=ISOを指定して幸せ:blush:になりましょう!

  1. “簡単”であるかについては、人によって感じ方が異なると思います。実際、普段使う範囲での命令の数が増えて「難しくなった」と考える人もいるでしょう。

  2. ここで「使い分けを行わない」というのは「立体と斜体の違いしかない文字の組(例えば“a”と“a”)の両方が使われることがない」という意味です。また、unicode-mathの\sym~系の命令の話であるため「単文字の識別子」を前提にしています。

  3. 例えば「質量 m の質点 m」(m と m は別のものを指している)のような使い方を指しています。

  4. ここでは「文字」はラテン文字とギリシャ文字のことを指し、数字は含まないものとします。数字は常に「数字」として言及します。

  5. 例の記事の脚注でも言及しましたが、Unicodeの数式文字が「ギリシャ文字のサンセリフは太字だけサポートして中字はしない」という極めて不可解な規定になっているため、unicode-mathでもギリシャ文字のサンセリフ・中字はサポートされていません。

  6. ラテン文字(セリフ)について「中字は斜体で太字は立体にする」のは米国の習慣に基づきます。そもそも数式の文字を斜体にするのは、欧文(例えば「Let a be a number.」のような記述)で数式文字と地の文が紛れないようにするためであり、太字ではその必要性が薄いのでしょう。

  7. サンセリフについては明示的には述べていませんが、本文の内容から判断するとその表のようになるはずです。サンセリフ・太字は滅多に使われないので省きました。なお、「―」印の書体(サンセリフ・中字のギリシャ文字および斜体の数字)はサポートされません。

  8. math-style(および他の大部分のunicode-mathの設定オプション)はパッケージオプション以外の箇所でも使えるのですが、その辺りの話は本記事では扱いません。

  9. math-styleの既定値はTeXです。すなわちTeXは前節で述べたアレ:sushi:な振り分け規則を指します。

  10. ISOはむしろ「立体と斜体を意味により区別する」ことを推奨しているので、「常に斜体を優先する」設定にISOの名前が付いているのは奇妙な気がします。

  11. もし原則から外れる例外があるなら「それについては\symbfup{R}のように具体的な書体を指定する」ということを認識していればいいでしょう。

3
1
0

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
3
1