数式用フォント

本文の書体を Times や Palatino に替えたのに、数式だけ Computer Modern のまま——そんな「ちぐはぐ」を避けるのがこのページの主題です。LaTeX では本文フォントと数式フォントは別々に決まるので、文書全体の数式フォント を意識して選び、本文と調和させる必要があります。pdfLaTeX 時代の mathptmxmathpazonewtxmath といった在来パッケージと、XeLaTeX・LuaLaTeX で unicode-math\setmathfont を使う現代的なやり方の両方を、実際に動く例とともに見ていきます。なお \mathbb\mathcal など 記号ごとの数式アルファベット命令 は別ページ(数式の書体)の担当で、ここでは扱いません。

本文と数式は別々に決まる

まず原則を押さえます。LaTeX では、本文(地の文)のフォントと数式モードのフォントは 独立した別系統 で管理されています。本文フォントを差し替えても、数式の記号や英字は自動では追従しません。だから「\usepackage{...} で本文を Times にしたのに、数式の x\sum は元の書体のまま」という食い違いが起こります。良い組版の要件は、両者を意図的にそろえること——数式の中の変数・記号が、まわりの本文と同じ太さ・同じ雰囲気で組まれていることです。

既定の数式フォントは Computer Modern math——クヌースが TeX とともに設計した書体です。pdfLaTeX で何も指定しなければ、本文も数式もこの Computer Modern で組まれ、もともと一式として設計されているので自然に調和します。lmodern パッケージを読み込むと、その輪郭線をなめらかにした Latin Modern(本文)と、対応する数式フォント Latin Modern Math に置き換わります(後者は主に unicode-math 経由で使います)。つまり「何もしない」状態がすでに、本文と数式のそろった出発点になっているわけです。

ここから先、本文を別の書体に替えたくなったときの選択肢が二つに分かれます。pdfLaTeX なら 数式フォントごとに専用パッケージ を読み込む在来方式、XeLaTeX・LuaLaTeX なら **unicode-math で OpenType 数式フォントを一つ指定する** 現代方式です。次節以降で順に見ます。

在来方式(pdfLaTeX/Type1)

pdfLaTeX では、文書全体の数式フォントを切り替えるのに 数式フォントパッケージ を使います。多くは本文用フォントと になるように作られていて、本文側のパッケージと一緒に読み込むことで、本文と数式の両方が同じ書体ファミリでそろいます。代表的なものを下表にまとめます。

パッケージ本文/対応する書体備考
mathptmxTimesTimes 系の数式(Times+Symbol+CM から合成)。手軽だがやや古い
mathpazoPalatinoPazo Math を伴う Palatino 用の数式
newtxmathTimes(newtxtext と併用)Times 風の現代的な数式。[libertine][utopia] 等で他書体に合わせられる
newpxmathPalatino(newpxtext と併用)Palatino 風の数式(TeX Gyre Pagella を要する)
fourierUtopiaUtopia 本文+Fourier 数式を一括で設定
kpfonts自前の本文・数式一式本文と数式をまとめて提供する総合パッケージ
mathdesignGaramond / Charter / Utopia選んだ本文書体に合う数式(garamondcharterutopia
eulervm(任意の本文書体)Euler 数式アルファベット。自前の数式を持たない本文書体と組み合わせられる

使い方の典型は、本文側パッケージと数式側パッケージを一緒に読み込む ことです。たとえば mathpazo は Palatino 本文と Pazo 数式を一手に設定します。今日いちばん勧めやすいのは **newtx 系**で、\usepackage{newtxtext,newtxmath} と二つ並べると、本文が Times 系、数式も Times 風の現代的な書体でそろいます。newtxmath はオプションが豊富で、[libertine] を付けると本文 Libertine(libertinus)に合う数式に、[utopia](または erewhon 系)を付けると Utopia 系に合う数式になります。

document.tex
% --- Palatino 本文+数式 / Palatino text & math ---
\usepackage{mathpazo}            % Palatino + Pazo math

% --- Times 本文+数式(おすすめ) / Times text & math (recommended) ---
\usepackage{newtxtext}           % 本文 / text
\usepackage{newtxmath}           % 数式 / math

% --- Libertine 本文に数式を合わせる / match math to Libertine text ---
% \usepackage{libertine}
% \usepackage[libertine]{newtxmath}

注意したいのは、本文と数式を別々のパッケージで指定すると、組み合わせを誤って不調和になりやすい ことです。newtxtextnewpxmath(Times 本文に Palatino 数式)のように、対でないものを混ぜると、まさにこのページが避けたい食い違いを自分で作ってしまいます。読み込み順にも作法があり、数式フォントパッケージは本文フォントパッケージの に置くのが無難です。原則は単純で、本文と数式は対になるものを選ぶ——これに尽きます。

現代方式 — unicode-math(XeLaTeX・LuaLaTeX)

XeLaTeX・LuaLaTeX を使うなら、在来の「パッケージの寄せ集め」を一掃できます。**unicode-math パッケージは、一つの OpenType 数式フォント** を \setmathfont{…} で指定するだけで、数式全体をそのフォントで組みます。本文を fontspec で OpenType 本文フォントに替え、数式を \setmathfont で対応する OpenType 数式フォントに替える——この二行で本文と数式がそろうわけです。unicode-math は **fontspec を内部で読み込みXeTeX または LuaTeX エンジンを必要** とします(pdfLaTeX では動きません)。また amsmath の機能を前提とするため、amsmath を先に読み込んでおきます。

使える OpenType 数式フォントには、無償のものが揃っています。Latin Modern Math(Computer Modern の系譜)、STIX Two Math(科学記号の収録が広い)、TeX Gyre 系(Termes=Times 風/Pagella=Palatino 風/Bonum/Schola)の各 Math、Libertinus Math(Libertine/Linux Libertine の後継)、さらに XITS(STIX 由来)、Asana MathFira Math など。\begin{document} までに数式フォントを指定しなければ、既定で Latin Modern Math が読み込まれます。

OpenType 数式フォント系統・特徴合う本文フォント
Latin Modern MathComputer Modern 系。既定Latin Modern
TeX Gyre Termes MathTimes 風TeX Gyre Termes / Times
TeX Gyre Pagella MathPalatino 風TeX Gyre Pagella / Palatino
STIX Two MathTimes 風で記号が広範STIX Two Text / Times
Libertinus MathLibertine の後継Libertinus Serif
XITS / Asana / Fira MathSTIX 系/独自/サンセリフ系用途に応じて

下が最小の例です。amsmathunicode-math の順に読み込み、\setmathfont で数式フォントを名指しします。在来方式の mathptmxmathpazo のような 個別パッケージは要らず、この一行が数式全体を引き受けます。本文も合わせたいなら、fontspec\setmainfont で対応する本文フォントを指定します(unicode-mathfontspec を読み込むので、fontspec 自体の読み込みは省けます)。

document.tex
% コンパイルは xelatex または lualatex / compile with xelatex or lualatex
\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Termes}       % 本文(fontspec)/ text
\setmathfont{TeX Gyre Termes Math} % 数式(対の OpenType フォント)/ matching math
\begin{document}
\[
  f(x) = \int_{-\infty}^{\infty} \hat f(\xi)\, e^{2\pi i x \xi}\, d\xi.
\]
\end{document}

この例では本文が TeX Gyre Termes(Times 風)、数式が対の TeX Gyre Termes Math で組まれ、積分記号・添字・変数まで本文と同じ書体感で揃います。一つの数式フォントだけで足りないときは、\setmathfont の **range= オプション で数式アルファベットの一部だけを別フォントから補えます(詳しくは「数式の書体」のページ)。総じて、Unicode エンジンを使うなら unicode-math\setmathfont が今日の標準**で、在来パッケージより設定がはるかに簡潔です。

どちらを選ぶか — 本文と数式を対にする

結局のところ、鍵になる助言は一つです——本文フォントと数式フォントを「対」で選ぶこと。pdfLaTeX なら newtxtextnewtxmath(Times 系)や mathpazo(Palatino 系)のように、設計上ペアになっている組み合わせを使います。XeLaTeX・LuaLaTeX なら \setmainfont{...}\setmathfont{...} で、Libertinus 本文+Libertinus Math、TeX Gyre Pagella 本文+同 Math のように、対応するファミリをそろえます。

  • 何もしないなら Computer Modern(pdfLaTeX)または Latin Modern Math(unicode-math の既定)。本文と数式はそろっています。
  • pdfLaTeX で本文を替えるなら 本文・数式が対のパッケージを。Times は newtxtextnewtxmath、Palatino は mathpazonewpxmath、Utopia は fouriermathdesign
  • XeLaTeX・LuaLaTeX なら amsmathunicode-math を読み込み、\setmainfont\setmathfont で対応する OpenType の本文・数式を指定。
  • やってはいけない のは、対でない本文・数式を混ぜること(例:Times 本文に Palatino 数式)。

なお、\mathbb\mathcal\mathfrak のような 数式の中で特定の文字だけを別書体にする命令 は、文書全体の数式フォントを選ぶこのページとは別の話題です。そちらは「数式の書体」のページにまとめてあります。本文フォントそのものの選択肢は「欧文フォント集」、Unicode エンジンでの本文フォント指定は「fontspec」、NFSS など仕組みは「フォントの仕組み」を参照してください。