fontspec は、OS にインストールされた OpenType / TrueType フォントを 書体名で直接 呼び出せるパッケージです。\setmainfont{Hoge} と書くだけで本文書体が切り替わり、合字や数字スタイルといった OpenType の機能もキー=値のオプションで使えます。ただし大前提として、XeLaTeX または LuaLaTeX が必須——昔ながらの pdfLaTeX では動きません。このページでは読み込み方、本文・サンセリフ・等幅の指定、追加ファミリーの定義、ファイル指定と機能オプションまでを順に見ていきます。
fontspec とは — そして必須エンジン
従来の TeX は、その時代に用意された専用形式のフォントしか扱えず、システムにある書体をそのまま使うことはできませんでした。fontspec は、OS にインストール済みの、あるいはプロジェクト内に置いた OpenType / TrueType フォントを、書体名(またはファイル名)で指定して使えるようにする パッケージです。フォントの選択を LaTeX の NFSS(フォント選択機構)に橋渡しし、太字・斜体の自動切り替えや、OpenType の高度な組版機能までまとめて面倒を見ます。
何より先に押さえるべき制約があります。fontspec は XeLaTeX か LuaLaTeX でしか動きません。これらのエンジンが Unicode とシステムフォントをネイティブに扱えるからです。pdfLaTeX(pdftex)では使えません——もし pdfLaTeX で \usepackage{fontspec} を試すとエラーになります。手元の文書がどのエンジンで処理されるかを確かめ、必要なら lualatex / xelatex でコンパイルしてください。新規に始めるなら、日本語との相性も含めて LuaLaTeX が無難です。
読み込みは単純に \usepackage{fontspec} です。XeLaTeX・LuaLaTeX では多くの場合これが自動的に(クラスやほかのパッケージ経由で)読み込まれています。明示的に書いても二重読み込みにはなりません。
本文・サンセリフ・等幅を決める
文書全体の三つの基本書体は、プリアンブルで次の三命令を使って指定します。**\setmainfont{…} がローマン体(本文の既定書体)、\setsansfont{…}** がサンセリフ体(\textsf や \sffamily で呼ぶ書体)、**\setmonofont{…}** が等幅・タイプライタ体(\texttt や \ttfamily の書体)です。引数にはシステムに登録された 書体名 をそのまま書きます。
% xelatex か lualatex でコンパイルする
\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes} % 本文(ローマン体)
\setsansfont{TeX Gyre Heros} % サンセリフ体
\setmonofont{TeX Gyre Cursor} % 等幅体
\begin{document}
This is the main font; \textsf{this is sans}; \texttt{this is mono}.
\end{document}fontspec は、書体名から太字(ボールド)と斜体(イタリック)の対応フォントを自動的に探し、\textbf や \textit、その組み合わせに割り当てます。普段どおり \textbf{…}・\emph{…} と書けば、指定した書体ファミリーの太字・斜体が使われます。なお、**これらの命令をプリアンブルに置くと、\mathrm などの数式内ローマン体にも同じ書体が使われます**(LaTeX は処理のこの段階で数式フォントを確定するため、プリアンブルでの指定だけが効きます)。数式そのものの書体は別管理で、後述の unicode-math で設定します。
追加のファミリーと、その場かぎりの指定
本文・サンセリフ・等幅の三つ以外に書体を使いたいときは、**\newfontfamily** で新しい切り替え命令を定義します。第一引数に作りたい命令名(自分で決めるバックスラッシュ付きの名前)、第二引数に書体名を書きます。
\usepackage{fontspec}
\newfontfamily\titlefont{TeX Gyre Bonum}
\newfontfamily\quotefont{TeX Gyre Schola}
% ...
\titlefont A heading in Bonum
{\quotefont A quoted passage in Schola.}こうして定義した \titlefont は、\rmfamily などと同じ 宣言型の命令 で、それ以降の文字に書体を適用します。範囲を区切りたいときは {\titlefont …} のように波括弧で囲みます。一度しか使わない書体なら、定義せずに **\fontspec{書体名}** をその場で宣言として使うこともできます(ただし毎回フォントを読み込み直すため、繰り返し使う書体は \newfontfamily で定義するほうが効率的です)。
書体名で選ぶ/ファイルで選ぶ
フォントの指定には二通りあります。ひとつは OS に登録された書体名 で選ぶ方法で、\setmainfont{TeX Gyre Termes} のようにそのまま名前を書きます。手軽ですが、相手の環境にも同じ書体が入っている必要があります。もうひとつは ファイルで選ぶ 方法で、プロジェクト内にフォントファイルを同梱して、確実に同じ出力を得たいときに向きます。
ファイル指定では、オプションに **Path=(フォントのあるディレクトリ)、Extension=**(.otf や .ttf といった拡張子)を与え、各ウェイト・スタイルのファイルを **UprightFont=・BoldFont=・ItalicFont=・BoldItalicFont=** で割り当てます。これらの値に書くアスタリスク * は、第二引数に書いた 共通のファイル名(基底名)に置き換わる プレースホルダです。
\usepackage{fontspec}
% プロジェクト内の fonts/ に置いた OTF を、ファイル名で指定する
\setmainfont{LibreBaskerville}[
Path = ./fonts/ ,
Extension = .otf ,
UprightFont = *-Regular ,
BoldFont = *-Bold ,
ItalicFont = *-Italic ,
BoldItalicFont = *-BoldItalic ,
]この例では、基底名 LibreBaskerville のアスタリスクが各値に展開され、fonts/LibreBaskerville-Regular.otf・fonts/LibreBaskerville-Bold.otf などが読み込まれます。下の表に二つの指定方法の違いをまとめます。
| 指定方法 | 書き方 | 向いている場面 |
|---|---|---|
By name | \setmainfont{書体名}。OS 登録名で指定 | 手早く。自分の環境で書く下書き・私用文書 |
By file | Path / Extension / *Font で同梱ファイルを指定 | 再現性重視。共同執筆・配布・CI、自作や非登録フォント |
OpenType の機能をオプションで使う
OpenType フォントには合字・数字スタイル・スモールキャップスといった組版機能が収録されており、fontspec ではこれらを キー=値のオプション で呼び出します。代表的なものを挙げます。
Ligatures=— 合字の制御。Ligatures=TeX** は `--→en ダッシュ、---→em ダッシュ、・''→曲がった引用符といった **TeX 流の入力変換** を有効にします(標準設定で既定有効になっていることも多い)。ほかにCommon(fi・fl など標準合字)、Rare/Discretionary(任意合字)、Historic`(歴史的合字)。Numbers=** — 数字のスタイル。OldStyle(文中になじむ大小のある旧式数字)/Lining(高さのそろう近代数字)と、Proportional(プロポーショナル幅)/Monospaced(等幅)を組み合わせて指定します。Letters=SmallCaps** — スモールキャップス(小型大文字)。Letters=Uppercaseなども指定できます。StylisticSet=** — フォントが用意する代替字形セット(Stylistic Set)を番号で選びます。Scale=** — 拡大率。数値のほか、Scale=MatchLowercase(小文字の高さを合わせる)・Scale=MatchUppercase(大文字の高さを合わせる)が便利で、本文書体と別書体の大きさをそろえられます。Script=/Language=** — 非ラテン文字や言語固有の組版規則を選ぶための指定(例:Script=Arabic)。
これらは書体を設定する命令のオプション(第二引数の角括弧)に書きます。次は、本文書体に TeX 流の合字 と 旧式数字 を効かせた例です。
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}[
Ligatures = TeX ,
Numbers = OldStyle ,
]
% サンセリフは本文に大きさをそろえて読み込む
\setsansfont{TeX Gyre Heros}[Scale = MatchLowercase]文書全体ではなく、ある範囲だけ機能を足したいときは **\addfontfeature{…}**(複数なら \addfontfeatures{…})を使います。これは 現在の書体に、指定した機能を局所的に追加 する命令で、波括弧で囲んだ範囲だけに効きます。
In a table we want {\addfontfeature{Numbers={Lining,Monospaced}} 01234 56789} aligned.数式と日本語 — 別仕立てのフォント
fontspec が受け持つのは 本文(テキスト)の欧文書体 です。二つ、別仕立てになる領域があります。
ひとつは 数式の書体 です。XeLaTeX・LuaLaTeX で数式まで OpenType フォントにそろえたい場合は、fontspec とは別に **unicode-math パッケージを読み込み、\setmathfont{…}** で OpenType 数式フォント(Latin Modern Math、STIX Two Math など)を指定します。本文の \setmainfont と数式の \setmathfont は役割が分かれている、と覚えておくとよいでしょう。詳しくは数式書体のページを参照してください。
もうひとつは 日本語(和文) です。\setmainfont が設定するのは欧文書体だけで、和文書体には効きません。LuaLaTeX では、fontspec の和文版というべき **luatexja-fontspec パッケージを使い、\setmainjfont{…}(明朝=本文和文)・\setsansjfont{…}(ゴシック)・\newjfontfamily** などの「j(Japanese)付き」命令で和文フォントを指定します。オプションはおおむね fontspec と共通です。欧文は \setmainfont、和文は \setmainjfont と、二系統を併用するわけです。和文フォントの詳細は日本語のページで扱います。