fontspec (Xe/Lua)

fontspec ist das Paket, mit dem du jede auf dem System installierte OpenType- oder TrueType-Schrift direkt über ihren Namen aufrufen kannst. \setmainfont{Some Font} stellt die Grundschrift um, und OpenType-Funktionen wie Ligaturen und Ziffernstile sind über key=value-Optionen verfügbar. Eine feste Voraussetzung gilt: Es erfordert XeLaTeX oder LuaLaTeX und funktioniert nicht mit dem älteren pdfLaTeX. Diese Seite führt durch das Laden, das Setzen von Roman/Sans/Mono, zusätzliche Familien sowie die Auswahl nach Datei und nach Funktion.

Was fontspec ist und welchen Engine es braucht

Traditionelles TeX konnte nur Schriften in speziell dafür vorbereiteten Formaten nutzen und nicht einfach auf die bereits auf dem Rechner vorhandenen Schriften zugreifen. fontspec ist das Paket, das OpenType- und TrueType-Schriften, installiert im System oder im Projekt abgelegt, über Schriftname oder Dateiname nutzbar macht. Es bindet diese Auswahl an LaTeXs NFSS an, übernimmt den automatischen Wechsel zu Fett und Kursiv und macht OpenType-Funktionen verfügbar.

Vor allem anderen gilt eine harte Einschränkung: fontspec funktioniert nur mit XeLaTeX oder LuaLaTeX, weil diese Engines Unicode und Systemschriften nativ behandeln. Mit pdfLaTeX (pdftex) kann es nicht verwendet werden; \usepackage{fontspec} unter pdfLaTeX führt zu einem Fehler. Prüfe, welcher Engine dein Dokument verarbeitet, und kompiliere bei Bedarf mit lualatex oder xelatex. Für neue Projekte ist LuaLaTeX ein sicherer Standard, nicht zuletzt wegen der Japanisch-Unterstützung.

Geladen wird es einfach mit \usepackage{fontspec}. Unter XeLaTeX und LuaLaTeX ist es oft bereits durch die Klasse oder ein anderes Paket geladen; es ausdrücklich zu schreiben, schadet nicht.

Roman, Sans und Mono setzen

Die drei Grundschriften des Dokuments werden in der Präambel mit diesen drei Befehlen gesetzt. \setmainfont{…} setzt die Roman-Schrift (die voreingestellte Grundschrift), \setsansfont{…} die Sans-Serif (für \textsf und \sffamily) und \setmonofont{…} die Monospace-/Typewriter-Schrift (für \texttt und \ttfamily). Als Argument steht einfach der im System registrierte Schriftname.

document.tex
% 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 findet automatisch die fetten und kursiven Mitglieder einer benannten Familie und weist sie \textbf, \textit und deren Kombination zu. Schreibe \textbf{…} und \emph{…} wie gewohnt, und du erhältst Fett und Kursiv der gewählten Familie. Beachte außerdem: Stehen diese Befehle in der Präambel, gelten dieselben Schriften auch für Roman-Formen in der Mathematik wie \mathrm (LaTeX legt die Mathematikschriften in dieser Phase fest, daher wirkt nur eine Einstellung in der Präambel). Die eigentliche Mathematikschrift wird separat über unicode-math verwaltet, siehe unten.

Zusätzliche Familien und einmalige Schriften

Wenn du eine Schrift jenseits des Roman/Sans/Mono-Trios brauchst, definierst du mit \newfontfamily einen neuen Umschaltbefehl. Das erste Argument ist der gewünschte Befehlsname (ein Backslash-Name deiner Wahl), das zweite der Schriftname.

document.tex
\usepackage{fontspec}
\newfontfamily\titlefont{TeX Gyre Bonum}
\newfontfamily\quotefont{TeX Gyre Schola}
% ...
\titlefont A heading in Bonum

{\quotefont A quoted passage in Schola.}

Ein so definierter Befehl wie \titlefont ist ein deklarativer Umschalter, ähnlich wie \rmfamily: Er wendet die Schrift auf alles Folgende an. Um den Geltungsbereich zu begrenzen, setze ihn in Klammern, {\titlefont …}. Für eine nur einmal verwendete Schrift kannst du die Definition überspringen und \fontspec{Font Name} direkt als Deklaration verwenden; da die Schrift dabei jedes Mal neu geladen wird, ist für wiederholte Nutzung \newfontfamily effizienter.

Nach Name oder nach Datei auswählen

Es gibt zwei Arten, eine Schrift zu benennen. Die eine ist die Auswahl über den im Betriebssystem registrierten Schriftnamen, etwa direkt \setmainfont{TeX Gyre Termes}. Das ist bequem, setzt aber voraus, dass dieselbe Schrift auch auf anderen Rechnern vorhanden ist. Die andere ist die Auswahl über Dateien, indem die Schriftdateien im Projekt mitgeliefert werden; das ist richtig, wenn reproduzierbare Ausgabe garantiert werden soll.

Bei der Dateiauswahl gibst du die Optionen Path= (Verzeichnis der Schriften) und Extension= (Suffix wie .otf oder .ttf) an und ordnest die Schnitte mit UprightFont=, BoldFont=, ItalicFont= und BoldItalicFont= zu. Das Sternchen * in diesen Werten ist ein Platzhalter, der durch den im zweiten Argument angegebenen gemeinsamen Dateinamen (Basisnamen) ersetzt wird.

document.tex
\usepackage{fontspec}
% プロジェクト内の fonts/ に置いた OTF を、ファイル名で指定する
\setmainfont{LibreBaskerville}[
  Path       = ./fonts/ ,
  Extension  = .otf ,
  UprightFont    = *-Regular ,
  BoldFont       = *-Bold ,
  ItalicFont     = *-Italic ,
  BoldItalicFont = *-BoldItalic ,
]

Hier wird der Basisname LibreBaskerville in jeden Wert eingesetzt, sodass fonts/LibreBaskerville-Regular.otf, fonts/LibreBaskerville-Bold.otf usw. geladen werden. Die folgende Tabelle stellt die beiden Auswahlmethoden gegenüber.

MethodeSchreibweiseGeeignet für
By name\setmainfont{Font Name}; OS-registrierter NameSchnell; Entwürfe und persönliche Dokumente auf dem eigenen Rechner
By filePath / Extension / *Font verweisen auf mitgelieferte DateienReproduzierbarkeit; Zusammenarbeit, Verteilung, CI, eigene oder nicht registrierte Schriften

OpenType-Funktionen einschalten

OpenType-Schriften enthalten typografische Funktionen wie Ligaturen, Ziffernstile und Kapitälchen; fontspec aktiviert sie über key=value-Optionen. Die nützlichsten sind:

  • Ligatures= — steuert Ligaturen. Ligatures=TeX aktiviert TeX-artige Eingabeumwandlungen, etwa `-- zu Halbgeviertstrich, --- zu Geviertstrich und TeX-Anführungen zu typografischen Anführungen (in Standardkonfigurationen oft bereits aktiv). Weitere Werte sind Common (Standardligaturen fi, fl usw.), Rare/Discretionary (optionale Ligaturen) und Historic`.
  • Numbers= — Ziffernstil. Kombiniere OldStyle (Mediävalziffern mit Ober- und Unterlängen) oder Lining (moderne Ziffern mit einheitlicher Höhe) mit Proportional (proportionale Breiten) oder Monospaced (feste Breiten).
  • Letters=SmallCaps — Kapitälchen. Werte wie Letters=Uppercase sind ebenfalls verfügbar.
  • StylisticSet= — wählt per Nummer einen von der Schrift bereitgestellten Satz alternativer Glyphen.
  • Scale= — Skalierungsfaktor. Neben Zahlen sind Scale=MatchLowercase (x-Höhe angleichen) und Scale=MatchUppercase (Versalhöhe angleichen) praktisch, um eine Zweitschrift an die Hauptschrift anzupassen.
  • Script= / Language= — wählt nichtlateinische Schriften oder sprachspezifische Formungsregeln, z. B. Script=Arabic.

Diese Angaben stehen in den Optionen des Schriftsetzbefehls, also im geklammerten zweiten Argument. Hier ein Beispiel, in dem die Grundschrift mit TeX-artigen Ligaturen und Mediävalziffern gesetzt wird:

document.tex
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}[
  Ligatures = TeX ,
  Numbers   = OldStyle ,
]
% サンセリフは本文に大きさをそろえて読み込む
\setsansfont{TeX Gyre Heros}[Scale = MatchLowercase]

Um eine Funktion nur einem Abschnitt und nicht dem ganzen Dokument hinzuzufügen, nutze \addfontfeature{…} (oder \addfontfeatures{…} für mehrere). Der Befehl fügt die angegebene Funktion lokal zur aktuellen Schrift hinzu und wirkt nur innerhalb der umschließenden Klammern.

latex
In a table we want {\addfontfeature{Numbers={Lining,Monospaced}} 01234 56789} aligned.

Mathematik und Japanisch: getrennt behandelte Schriften

fontspec ist für die lateinischen Textschriften des Körpers zuständig. Zwei Bereiche werden getrennt behandelt.

Der eine Bereich ist die Mathematikschrift. Wenn auch Mathematik unter XeLaTeX oder LuaLaTeX auf OpenType-Schriften gebracht werden soll, lade zusätzlich zu fontspec das separate Paket unicode-math und benenne mit \setmathfont{…} eine OpenType-Mathematikschrift wie Latin Modern Math oder STIX Two Math. Es hilft, sich zu merken, dass \setmainfont für Text und \setmathfont für Mathematik verschiedene Rollen haben. Details stehen auf der Mathematikschrift-Seite.

Der andere Bereich ist Japanisch. \setmainfont setzt nur die lateinische Schrift und wirkt nicht auf die japanische. Unter LuaLaTeX nutzt man luatexja-fontspec, praktisch das japanische Gegenstück zu fontspec, und setzt japanische Schriften mit seinen “j (Japanese)”-Befehlen: \setmainjfont{…} (Mincho, japanische Grundschrift), \setsansjfont{…} (Gothic), \newjfontfamily usw.; die Optionen sind weitgehend mit fontspec gemeinsam. Kurz: Zwei parallele Spuren, \setmainfont für Latein und \setmainjfont für Japanisch. Japanische Schriften werden auf einer eigenen Seite behandelt.