LoginSignup
5
6

unicode-math における数式フォントと本文フォント

Posted at

unicode-math では、数式のフォントを簡便に変更できます。

多くの場合これに留まらず、数式フォントに合う本文フォントが利用されます。そのため、unicode-math で数式フォントを変更した際には本文フォントも変更することが望まれます。
本文フォントを変更するには fontspec を利用します。

また、数式内には \mathrm 等の本文フォントを利用する要素が複数あります。
この \mathrm 等で利用されるフォントは、unicode-math や fontspec から細かく制御できます。

本記事では、数式フォントに対応する本文フォントと数式内における本文フォントの扱いを紹介します。

本記事における unicode-math のバージョンは 0.8r です。

数式内のテキスト

unicode-math において、数式内で利用する \mathrm などの \math~ は本文フォントを利用する “テキスト数式英字 (Text math alphabet)” として利用されます。1
これは、\mathrm の他に以下のようなスイッチコマンドがあります。

  • \mathrm, \mathup
  • \mathit
  • \mathbf
  • \mathsf
  • \mathtt

これは、\symbf などのシンボルアルファベットのためのスイッチコマンドとは異なります。そのため、これらのスイッチコマンド \sym~\math~ は使い分ける必要があります。

特に、\math~ が扱うフォントは本文フォントであるのに対して、\sym~ が扱うフォントは数式フォントです。異なるフォントを利用することになることに注意してください。

テキスト数式英字は本文フォントを引き継ぎますが、これまでの \math~ と同じように半角スペースは無視されます。

デフォルトでは、テキスト数式英字は本文フォントに従い、数式フォントと本文フォントは対応するものを選ぶべきです。

数式フォントに対応する本文フォント

一般的に、本文フォントと数式フォントは統一して利用されます。

以下に、TeX Live に集録されているフォントの内、unicode-math で利用できる数式フォントと、それに対応する本文フォントを表にしました。

数式フォント 本文フォント
Asana Math -
Concrete Math CMU Concrete
Erewhon Math erewhon
Euler Math -
Fira Math Fira Sans
Garamond-Math EB Garamond
GFS Neohellenic Math GFSNeohellenic
KpMath KpRoman
Libertinus Math Libertinus Serif
Latin Modern Math Latin Modern Roman
NewComputerModernMath NewComputerModern10
STIX Two Math STIX Two Text
TeX Gyre Bonum Math TeX Gyre Bonum
TeX Gyre DejaVu Math DejaVu Serif
TeX Gyre Pagella Math TeX Gyre Pagella
TeX Gyre Schola Math TeXGyreSchola
TeX Gyre Termes Math TeXGyreTermes
XCharter Math XCharter
XITS Math XITS

デフォルトでは、本文フォントは Latin Modern Roman、数式フォントは Latin Modern Math を利用します。

フォントを変更する場合、本文フォントは fontspec、数式フォントは unicode-math を利用して、以下のように指定します。

% 本文フォント:fontspec
\setmainfont{NewComputerModern10}
% 数式フォント:uincode-math
\setmathfont{NewComputerModernMath}

数式フォントに対応する本文フォントがないものに関しては、以下のフォントカタログを参照してください。

本文フォントの指定には \setmainfont 以外にも \setsansfont(サンセリフ)と \setmonofont(等幅)があります。これらは別個に指定します。

本文フォントの内、斜体や太字、太字斜体は \setmainfont によって自動的に判別されます。(個別に指定することも出来ます)

テキスト数式英字

前述の通り、テキスト数式英字は本文のフォントを引継ぎます。

一方で、テキスト数式英字のフォントのみを変更する方法もあります。
これは、数式フォントに対応する本文フォントが無い場合にも有意義です。

フォントを変更する

テキスト数式英字のデフォルトフォントは \setmainfont で指定されたフォントです。

fontspec や unicode-math では、テキスト数式英字のフォントを変更することで、本文と異なるフォントを利用することが出来ます。
(unicode-math を読み込むと、fontspec も自動的に読み込まれます)

テキスト数式英字のフォントのみを変更するには、大きく 2 つの方法があります。

  • fontspec による方法:
    • \setmathrm{<font>} (\mathrm, \mathit, \mathbf)
    • \setmathsf{<font>} (\mathsf)
    • \setmathtt{<font>} (\mathtt)
  • unicode-math による方法:
    • \setmathfontface\mathrm{<font>}
    • \setmathfontface\mathit{<font>}
    • \setmathfontface\mathbf{<font>}
    • \setmathfontface\mathsf{<font>}
    • \setmathfontface\mathtt{<font>}

fontspec による方法における \setmathrm では、\mathrm の他に \mathit\mathbf にも影響します。

例えば、TeX Gyre Pagella を \mathrm\mathit\mathbf に対して適用する場合、以下のように 2 つの指定方法があります。

% by fontspec
\setmathrm{TeXGyrePagella}
% by unicode-math
\setmathfontface\mathrm{TeXGyrePagella}
\setmathfontface\mathit{TeXGyrePagella-Italic}
\setmathfontface\mathbf{TeXGyrePagella-Bold}

新しく追加する

新たなテキスト数式英字を \setmathfontface から導入することが出来ます。

\setmathfontface\mathXX{<font>}

ここで導入されたフォントは \mathXX として利用できるようになります。

例えば、以下のように複数のテキスト数式英字のフォントを導入することが出来ます。

example of setmathfontface

名前演算子のフォント

名前演算子のフォントは \setoperatorfont によって制御されます。

デフォルトでは \setoperatorfont\mathrm となっているため、名前演算子のフォントは \mathrm のフォントに従います。

そのため、次のように \setmathfontface\mathrm(あるいは \setmathrm)から \mathrm のフォントを変更すると、名前演算子のフォントも変更されます。

sample of set operator font to mathrm

名前演算子に \mathrm 以外のスイッチコマンドを適用したい場合は、次のようにします。

\setoperatorfont\mathsf

この他にも、\setmathfontface を利用して追加された新しいフォントを名前演算子のフォントに当てることが出来ます。

\setmathfontface\mathXYZ{XYZ Font}
\setoperatorfont\mathXYZ

慣例的には \mathrm のフォントと名前演算子のフォントは同じであるべきですが、以下のようにすることで 2 つに異なるフォントを当てることも出来ます。

textmathalph-image-3.png

この名前演算子のフォントの指定は、\symup 等のシンボルアルファベットのスイッチコマンドを指定することも出来ます。
ただし、カーニングが異なるため \sym~ 系を利用することは避けた方が良さそうです。(文字数が多いと顕著になります)

STIX Two Math と Euler Math の例を挙げておきます。

STIX Two Math の例

STIX Two Math には STIX Two Text があります。そのため、本文フォントまたは \mathrm を STIX Two Text に変更します。

ドキュメント全体で STIX Two Math を指定する場合は \setmainfont を利用します。

\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}

example of name operator with STIX Two Math

STIX Two Text には、等幅とサンセリフのフォントが無いことに注意してください。(等幅には Latin Modern Mono、サンセリフには Latin Modern Sans が適用されます)

もしも、本文フォントを STIX Two Text と異なるフォントを指定し、\mathrm に STIX Two Text を指定する場合は、\setmathrm または \setmathfontface を利用します。

\setmathrm{STIX Two Text}
% or
\setmathfontface\mathrm{STIX Two Text}
\setmathfontface\mathit{STIX Two Text}
\setmathfontface\mathbf{STIX Two Text}

Euler Math の例

Euler Math には対応する本文フォントがありません。

デフォルトの Latin Modern Roman を利用したテキスト数式英字では、シンボルアルファベットの Euler Math に比べて細く貧弱に見えます。

そのため、適当にフォントを別のものに変えておくと良いでしょう。
下の例では、4 つのフォントを \mathrm に割り当ててみました。

sample of text math alphabet with Euler math

個人的には、Latin Modern Math では細すぎる、STIX Two Text ではちょっと太いと感じます。
TeX Gyre Pagella や URW Classico が適していると思います。あるいは、フォントカタログを見ていると CMU Concrete を勧める記述も多く見られます。

数式内の挿入テキスト

数式内で利用される本文フォントは、上で示した \math~ によるスイッチコマンドや名前演算子の他に、\text 等によるテキストの挿入があります。(以降、“挿入テキスト” と表現します)

この挿入テキストは、テキスト数式英字とは異なり、本文テキストを数式内に持ち込むだけのため、\setmathrm\setmathfontface\mathrm の影響を受けません。

そのため、テキスト数式英字のフォントのみを変更した場合、挿入テキストのフォントと異なることに注意してください。

余談

\setmainfont\setmathfont とか、\setmathfontface\setoperatorfont とか、似たようなコマンド多すぎ問題。
混乱しそうです。

ver. 0.8r のパッケージガイド § 5.5.4 では、x_\mathrm f のような、本来の LaTeX に無い構文を利用した書き方をサポートしませんと記述されています。

5.5.4 Subscripts and superscripts and symbol alphabets

In traditional LaTeX, users have for many years exploited a loophole in the implementation of \mathrm and similar to write expressions such as x_\mathrm f to achieve 𝑥f instead of writing the more correct x_{\mathrm{f}}. Shorthand notation such as x_\mathrm f is not officially documented LaTeX syntax, and due to a particular implementation detail in unicode-math this incorrect syntax is no longer supported.

そうでありながら、実際に x_\mathrm f としてもタイプセットが通ってしまうのはどうしてでしょうか :thinking:
(サポートの意味を取り違えていますか?)

ローカルのフォントを探す

フォントを探すには luafindfont が便利です。

ターミナルで以下のように利用します。(キーワードはスペースやハイフンを除きます)

$ luafindfont stixtwo
  No.                       Filename Symbolic name
            Path
   1.        stixtwomath-regular.otf stixtwomath  d:/texlive/2023/texmf-dist/fonts/opentype/public/stix2-otf/
   2.           stixtwotext-bold.otf stixtwotext  d:/texlive/2023/texmf-dist/fonts/opentype/public/stix2-otf/
   3.     stixtwotext-bolditalic.otf stixtwotext  d:/texlive/2023/texmf-dist/fonts/opentype/public/stix2-otf/
    ⋮
   8.       stixtwotext-semibold.otf stixtwotext  d:/texlive/2023/texmf-dist/fonts/opentype/public/stix2-otf/
   9. stixtwotext-semibolditalic.otf stixtwotext  d:/texlive/2023/texmf-dist/fonts/opentype/public/stix2-otf/

また、 -o <num> を課すことで該当番号のフォントの情報を otfinfo から得ることが出来ます。(otfinfo は .otf のフォントしか対応しないようです)

$ luafindfont -o 1 gfsneohellenic
  No.                 Filename      Symbolic name                                                                  Path
   1.       gfsneohellenic.otf     gfsneohellenic      d:/texlive/2023/texmf-dist/fonts/opentype/public/gfsneohellenic/
   2.   gfsneohellenicbold.otf     gfsneohellenic      d:/texlive/2023/texmf-dist/fonts/opentype/public/gfsneohellenic/
   3. gfsneohellenicboldit.otf     gfsneohellenic      d:/texlive/2023/texmf-dist/fonts/opentype/public/gfsneohellenic/
   4.     gfsneohellenicit.otf     gfsneohellenic      d:/texlive/2023/texmf-dist/fonts/opentype/public/gfsneohellenic/
   5.   gfsneohellenicmath.otf gfsneohellenicmath  d:/texlive/2023/texmf-dist/fonts/opentype/public/gfsneohellenicmath/

Running otfinfo -i on font no.1
otfinfo -i "d:/texlive/2023/texmf-dist/fonts/opentype/public/gfsneohellenic/gfsneohellenic.otf"
Family:              GFS Neohellenic Rg
Subfamily:           Regular
Full name:           GFSNeohellenic-Regular
PostScript name:     GFSNeohellenic-Regular
Preferred family:    GFS Neohellenic
Preferred subfamily: Regular
Version:             Version 1.0
Unique ID:           TakisKatsoulidisandGeorgeD.Matthiopoulos: GFSNeoHellenic: 5953
Designer:            Takis Katsoulidis and George D. Matthiopoulos
Designer URL:        www.greekfontsociety.org
Manufacturer:        Takis Katsoulidis and George D. Matthiopoulos
Vendor URL:          www.greekfontsociety.org
Trademark:           GFSNeohellenic-Regular is a trademark of Takis Katsoulidis and George D. Matthiopoulos.
Copyright:           Copyright (c) Takis Katsoulidis and George D. Matthiopoulos, 1993-2001. All rights reserved.
License URL:         http://scripts.sil.org/OFL
OTHER DEALINGS IN THE FONT SOFTWARE. USE THE FONT SOFTWARE OR FROMINGLme as.ciety.org | gfs@greekfontsociety.org),
Vendor ID:           Alts

\setmainfont 等で利用するフォント名は Preferred family を利用することが望ましいです。これがない場合は Family を利用します。

上の例において、Preferred family は “GFS Neohellenic” です。
(実際、“GFS Neohellenic Rg” では上手くいきませんでした)

新たな OpenType フォントの導入

一部のフォントは CTAN に登録されているにも関わらず、TeX Live の配布条件を満たさないために集録されていないことがあるようです。
この記事 では getnonfreefonts を利用することで簡単に導入できると説明されていますが、OpenType フォントだけに限っては、手動で導入してもそれほど難しくありません。

例えば URW Classico フォントを導入する場合:

  1. CTAN ページで Zip ファイルをダウンロード
  2. Zip ファイルを解凍
  3. .otf ファイルのみを以下のパスに配置
    %TEXMFLOCAL%/fonts/opentype/urw/classico
    
  4. URW Classico フォントを利用したドキュメントのタイプセット実行すると、luaotfload が自動的に更新してくれます

パッケージガイドは %TEXMFLOCAL%/doc/classico にドキュメントを配置し、mktexlsr を実行すれば良いです。

ただし、この方法では \usepackage{classico} としても、フォントを利用できないことに注意してください。

  1. unicode-math でのみテキスト数式英字と呼称されています。fontspec に関しても紹介しますが、本記事では統一して \mathrm 等で利用されるアルファベットを “テキスト数式英字” と呼称しています。

    この呼称は unicode-math を完全に理解したい話(2) - マクロツイーター から。

5
6
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
5
6