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}
数式フォントに対応する本文フォントがないものに関しては、以下のフォントカタログを参照してください。
- The LaTeX Font Catalogue - Fonts with math support
- A Survey of Free Math Fonts for TeX and LaTeX
- [Answer] - Which OpenType Math fonts are available? - TeX - LaTeX Stack Exchange
本文フォントの指定には \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
として利用できるようになります。
例えば、以下のように複数のテキスト数式英字のフォントを導入することが出来ます。
名前演算子のフォント
名前演算子のフォントは \setoperatorfont
によって制御されます。
デフォルトでは \setoperatorfont\mathrm
となっているため、名前演算子のフォントは \mathrm
のフォントに従います。
そのため、次のように \setmathfontface\mathrm
(あるいは \setmathrm
)から \mathrm
のフォントを変更すると、名前演算子のフォントも変更されます。
名前演算子に \mathrm
以外のスイッチコマンドを適用したい場合は、次のようにします。
\setoperatorfont\mathsf
この他にも、\setmathfontface
を利用して追加された新しいフォントを名前演算子のフォントに当てることが出来ます。
\setmathfontface\mathXYZ{XYZ Font}
\setoperatorfont\mathXYZ
慣例的には \mathrm
のフォントと名前演算子のフォントは同じであるべきですが、以下のようにすることで 2 つに異なるフォントを当てることも出来ます。
この名前演算子のフォントの指定は、\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}
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
に割り当ててみました。
個人的には、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 asx_\mathrm f
to achieve 𝑥f instead of writing the more correctx_{\mathrm{f}}
. Shorthand notation such asx_\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
としてもタイプセットが通ってしまうのはどうしてでしょうか
(サポートの意味を取り違えていますか?)
ローカルのフォントを探す
フォントを探すには 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 フォントを導入する場合:
- CTAN ページで Zip ファイルをダウンロード
- Zip ファイルを解凍
-
.otf ファイルのみを以下のパスに配置
%TEXMFLOCAL%/fonts/opentype/urw/classico
- URW Classico フォントを利用したドキュメントのタイプセット実行すると、luaotfload が自動的に更新してくれます
パッケージガイドは %TEXMFLOCAL%/doc/classico
にドキュメントを配置し、mktexlsr を実行すれば良いです。
ただし、この方法では \usepackage{classico}
としても、フォントを利用できないことに注意してください。
-
unicode-math でのみテキスト数式英字と呼称されています。fontspec に関しても紹介しますが、本記事では統一して
\mathrm
等で利用されるアルファベットを “テキスト数式英字” と呼称しています。この呼称は unicode-math を完全に理解したい話(2) - マクロツイーター から。 ↩