数式の書体

数式モードの英字は既定で数式イタリックになりますが、集合論の ℝ(黒板太字)、関手の名前に使う花文字、Lie 環の名前に使う飾り文字(フラクトゥール)など、分野ごとに決まった「書体(数式アルファベット)」が要る場面があります。このページでは、\mathbf\mathbb といった数式アルファベット命令と、それぞれに必要なパッケージ、そしてベクトルや記号を太字にする \boldsymbol\bm の使い分けを整理します。最後に、XeLaTeX・LuaLaTeX で OpenType 数式フォントを使う unicode-math も扱います。

数式アルファベットとは

数式モードに入った英字は、ひとつひとつが変数とみなされ 数式イタリック で組まれます。これが既定の「数式アルファベット」です。これに対し、\mathbf{v} のように命令で囲むと、囲まれた範囲だけ別の書体に切り替わります。LaTeX はこうした切り替え命令を、本文用の \textbf\textsf などに対応させる形で \math… という名前で用意しています。

注意したいのは、数式アルファベット命令は 引数を「一文字ずつの数学記号の並び」として組み直す という点です。本文書体の命令とは別物で、たとえば \mathbf{fit} は単語 “fit” ではなく f・i・t という三つの太字記号の積として扱われます。単語をそのまま立体で入れたいときは、数式の中でも \text{…}(amsmath)を使います。

基本となる七つの命令はパッケージなしで使えます。下の表で、まず標準で使えるものを押さえましょう(\mathnormal は既定の数式イタリックそのものを明示する命令です)。

命令見た目備考
\mathnormal既定の数式イタリック標準。変数の既定の書体
\mathrm立体(ローマン体)標準。立体の定数・略号に
\mathbf立体の太字標準。立体なので変数には不向き(後述)
\mathsfサンセリフ体標準。テンソルや圏の名前などに
\mathtt等幅(タイプライタ体)標準。コード片を数式に入れるときなど
\mathit本文用イタリック体標準。多文字語を斜体で(字間が単語向き)
\mathcal花文字(カリグラフィック)。大文字のみ標準。集合族・圏などに

\mathit\mathnormal は紛らわしいので一言。\mathnormal(既定)は一字ずつを変数として組むため字間が広め、\mathit は本文用のイタリックで、\mathit{diff} のように 多文字の語をひとまとまりの斜体 にしたいときに向きます。

黒板太字・花文字・フラクトゥール・スクリプト

次の四つは数学でとくによく使う書体ですが、**標準の \mathcal を除きパッケージの読み込みが必要** です。それぞれ見た目と用途、必要なパッケージが異なります。

\mathbb(黒板太字, blackboard bold)** は、縦棒などを二重線にした独特の太字で、もとは黒板でボールド体を書くために線を重ねた書き方に由来します。amssymb(または amsfonts)が必要で、大文字だけ に対応します。用途はほぼ決まっていて、数の集合——実数 ℝ、複素数 ℂ、整数 ℤ、有理数 ℚ、自然数 ℕ——を表すのに使います。\mathbb{R} と書けば、縦棒が二重線になった「黒板太字の R」が出ます。

\mathcal(花文字, calligraphic) は、流れるような装飾的な大文字で、標準で使え、大文字のみ** です。集合族 𝒜、フーリエ変換 ℱ、圏や層の名前などに広く使われます。\mathcal{F} で「飾りのついた F」になります。

\mathscr(スクリプト体, script)** は、\mathcal よりさらに筆記体らしい、いっそう流麗な書体です。**mathrsfs パッケージ**(Ralph Smith の Formal Script を読み込む)が定番で、euscript パッケージ(Euler Script)でも別系統のスクリプトが使えます。\mathcal と区別して二種類の飾り文字を併用したいときに重宝します(こちらも実用上は大文字向けです)。

\mathfrak(フラクトゥール/亀甲文字, Fraktur)** は、ドイツの古い活字に由来する角ばった装飾書体で、Lie 環 𝔤 やイデアル 𝔭・𝔮 の名前などに使われます。amssymb(または amsfonts。内部で eufrak を読み込む)が必要で、\mathbb\mathcal と違い 大文字・小文字の両方 に対応します。

document.tex
\usepackage{amssymb}   % \mathbb と \mathfrak
\usepackage{mathrsfs}  % \mathscr
% ...
\[
  \mathbb{R} \subset \mathbb{C}, \qquad
  \mathcal{F}(f) = \hat{f}, \qquad
  \mathscr{L}(f) = F, \qquad
  \mathfrak{g} = \operatorname{Lie}(G).
\]

この例では、\mathbb{R}\mathbb{C} が黒板太字、\mathcal{F} が花文字、\mathscr{L} がより流麗なスクリプト、\mathfrak{g} が角ばったフラクトゥールの小文字で組まれます。下の表に、書体ごとの必要パッケージと対応範囲をまとめます。

命令必要なパッケージ対応範囲と典型的な用途
\mathbbamssymb(または amsfonts)大文字のみ。数の集合 ℝ ℂ ℤ ℚ ℕ
\mathcal標準(不要)大文字のみ。集合族・圏・変換名
\mathscrmathrsfs(または euscript)実用上は大文字。より流麗なスクリプト
\mathfrakamssymb / amsfonts(eufrak)大文字・小文字。Lie 環・イデアル

共通する重要な制限として、これらの装飾アルファベットは 収録している文字が限られます\mathbb\mathcal は大文字 A–Z が中心で、数字やギリシャ文字、小文字までは(標準のフォントでは)揃っていないのがふつうです。「\mathbb{2} で黒板太字の 2 を」といった用途は標準では満たせず、別のフォントパッケージ(たとえば mathalphamathalfabbmdsfont など)や、後述の unicode-math が必要になります。

数式を太字にする

数式を太字にしたい場面——たとえばベクトルや行列を太字で表す——は多いのですが、ここには落とし穴があります。先に挙げた **\mathbf は「立体の太字」 で、本来は太字の 定数や略号**(立体でよいもの)向けです。これでベクトル \mathbf{v} を組むと太字にはなりますが 立体 になり、斜体であるべき変数の約束から外れます。さらに \mathbf は記号やギリシャ文字には効きません(\mathbf{\alpha} としても α は太字になりません)。

斜体を保ったまま太字にしたいときの第一候補が **\boldsymbol です。これは amsmath**(内部の amsbsy)が提供する命令で、変数だけでなく ギリシャ文字や記号も太字 にでき、しかも元の字形(斜体など)を保ちます。\boldsymbol{\beta} で「太字の斜体 β」が得られます。

そして、現在もっとも勧められる頑健な方法が **bm パッケージ\bm** です。\bm{…} は「与えられたものに 太さだけを加え、斜体などその他の見た目はそのまま保つ」よう設計されており、変数・ギリシャ文字・記号のどれでも、また複雑な入力でもほぼそのまま太字化できます。字間(スペーシング)の扱いも \boldsymbol より優れています。bm\boldsymbol\bm の別名として再定義し、さらに極太用の \hm\heavysymbol)も提供します。

document.tex
\usepackage{amsmath}   % \boldsymbol
\usepackage{bm}        % \bm(推奨)
% ...
\[
  \mathbf{v} \neq \bm{v}, \qquad
  \bm{\beta} = (\beta_1, \dots, \beta_n), \qquad
  \nabla \bm{F} = \bm{0}.
\]

この例では、\mathbf{v}立体の太字 v\bm{v}斜体のまま太字の v となり、両者が別物であることが見て取れます。\bm{\beta} は太字の斜体 β、\bm{0} は太字のゼロ(零ベクトル)です。原則として、**変数・ベクトル・記号の太字には \bm**、立体でよい定数や略号には \mathbf、と使い分けるのが安全です。

  • \mathbf** — 立体の太字。標準で使えるが、斜体であるべき変数には不向き。記号・ギリシャ文字には効かない。
  • \boldsymbol** — amsmath(amsbsy)。斜体を保ち、ギリシャ文字・記号も太字にできる。
  • \bm — bm パッケージ。推奨**。太さだけを足し、字形と字間を保つ。最も頑健で守備範囲が広い。

unicode-math(XeLaTeX・LuaLaTeX)

ここまでは、各書体を専用パッケージで一つずつ足していく従来のやり方でした。XeLaTeX・LuaLaTeX という新しいエンジンでは、unicode-math パッケージを使うと、数式全体を 一つの OpenType 数式フォント でまとめて組めます。本文フォントを差し替える感覚で数式書体を切り替えられ、\mathbb などを個別に足す在来方式に取って代わります(同じ文書で両方式を混在させることはできません)。

使い方の核心は **\setmathfont{…}** です。amsmath を読み込んだ上で unicode-math を(ほかのフォント関係パッケージより後に)読み込み、\setmathfont で OpenType 数式フォントを指定します。代表的なフォントには Latin Modern Math(Computer Modern の系譜)、STIX Two Math、TeX Gyre 系(Termes/Pagella/Bonum/Schola Math)などがあります。\begin{document} までに数式フォントを指定しなければ、既定で Latin Modern Math が読み込まれます。

document.tex
% コンパイルは xelatex または lualatex
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{STIX Two Math}   % OpenType 数式フォント
% ...
\[
  \symbb{R} \subset \symbb{C}, \qquad
  \symcal{F}, \quad \symscr{L}, \quad \symfrak{g}, \qquad
  \symbf{v} = \symbf{0}.
\]

マニュアルでは、在来の \math… 命令に代えて **\sym… 命令** を使うことが推奨されています。対応は素直で、\symbf(太字)・\symbb(黒板太字)・\symcal(花文字)・\symscr(スクリプト)・\symfrak(フラクトゥール)・\symup(立体)・\symit(斜体)・\symsf(サンセリフ)などがあります。これらは Unicode 上の対応する数学英数記号へ写像するため、出力 PDF から文字をコピーしても意味が保たれます。従来の \mathbb などの名前も後方互換として残りますが、新規文書では \sym… が勧められます。

一つの数式フォントですべての字種をまかなえないときは、\setmathfont の **range= オプション で数式アルファベットの 一部だけ** を別フォントから取れます。range= には Unicode の範囲("1D538-"1D56B" のような形)のほか、range=\int のように特定の記号、range=\symbb(または range=bb)のように アルファベット様式 を指定できます。たとえば「黒板太字だけ別フォントにする」「ギリシャ小文字・大文字だけ差し替える」といった調整が可能です。なお range= を使う前に、主たる数式フォントを通常どおり読み込んでおく必要があります。

document.tex
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}                       % 主たる数式フォント
\setmathfont{STIX Two Math}[range=\symbb]            % 黒板太字だけ別フォント
\setmathfont{TeX Gyre Termes Math}[range=bfit/{greek,Greek}]  % 太字斜体のギリシャだけ

この例では、本体は Latin Modern Math で組みつつ、黒板太字(\symbb)だけを STIX Two Math から、太字斜体のギリシャ文字だけを TeX Gyre Termes Math から取り込んでいます。unicode-math は効率のため、range= 指定のフォントは必要な範囲だけを読み込みます。総じて、XeLaTeX・LuaLaTeX を使うなら、書体ごとにパッケージを足す在来方式よりも unicode-math + \setmathfont が今日の標準的なやり方です。