fontspec est le paquet qui permet d’appeler par son nom n’importe quelle police OpenType ou TrueType installée sur le système. Écrire \setmainfont{Some Font} suffit à changer la fonte du corps, et les fonctionnalités OpenType comme les ligatures et les styles de chiffres sont accessibles par des options key=value. Condition ferme : il exige XeLaTeX ou LuaLaTeX et ne fonctionne pas avec l’ancien pdfLaTeX. Cette page parcourt le chargement, le réglage des fontes romaine/sans/mono, la définition de familles supplémentaires, puis la sélection par fichier et par fonctionnalité.
Ce qu’est fontspec et le moteur requis
Le TeX traditionnel ne pouvait utiliser que des fontes dans des formats spécialement préparés pour lui, sans accéder directement aux polices déjà présentes sur la machine. fontspec est le paquet qui permet d’utiliser des polices OpenType et TrueType, installées sur le système ou placées dans le projet, en les sélectionnant par nom de police ou par nom de fichier. Il relie ce choix au NFSS de LaTeX, gère le passage automatique au gras et à l’italique et expose les fonctionnalités typographiques avancées d’OpenType.
Avant tout, il faut noter la contrainte stricte : fontspec ne fonctionne qu’avec XeLaTeX ou LuaLaTeX, car ces moteurs gèrent nativement Unicode et les polices système. Il ne peut pas être utilisé avec pdfLaTeX (pdftex) : \usepackage{fontspec} sous pdfLaTeX produit une erreur. Vérifiez quel moteur traite votre document et, si nécessaire, compilez avec lualatex ou xelatex. Pour un nouveau projet, LuaLaTeX est un choix sûr, notamment pour la prise en charge du japonais.
Le chargement est simplement \usepackage{fontspec}. Avec XeLaTeX et LuaLaTeX, il est souvent déjà chargé par la classe ou un autre paquet ; l’écrire explicitement ne fait pas de mal.
Régler les fontes romaine, sans et mono
Les trois fontes de base du document se règlent dans le préambule avec ces trois commandes. \setmainfont{…} définit la romaine (fonte par défaut du corps), \setsansfont{…} la sans (celle de \textsf et \sffamily), et \setmonofont{…} la monospace/typewriter (pour \texttt et \ttfamily). L’argument est simplement le nom de police enregistré dans le système.
% 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 localise automatiquement les membres gras et italiques d’une famille nommée et les assigne à \textbf, \textit et leur combinaison. Écrivez \textbf{…} et \emph{…} comme d’habitude pour obtenir le gras et l’italique de la famille choisie. Notez aussi que placer ces commandes dans le préambule applique les mêmes fontes aux romaines mathématiques de type \mathrm (LaTeX fige les fontes mathématiques à ce stade, donc seul un réglage dans le préambule prend effet). La fonte mathématique proprement dite est gérée séparément, via unicode-math, plus bas.
Familles supplémentaires et fontes ponctuelles
Quand il faut une fonte au-delà du trio romain/sans/mono, définissez une nouvelle commande de bascule avec \newfontfamily. Son premier argument est le nom de commande à créer (un nom avec barre oblique inverse de votre choix) et le second est le nom de la police.
\usepackage{fontspec}
\newfontfamily\titlefont{TeX Gyre Bonum}
\newfontfamily\quotefont{TeX Gyre Schola}
% ...
\titlefont A heading in Bonum
{\quotefont A quoted passage in Schola.}Une commande définie ainsi, comme \titlefont, est une bascule déclarative (comme \rmfamily) : elle applique la fonte à tout ce qui suit. Pour limiter sa portée, entourez-la d’accolades, {\titlefont …}. Pour une fonte utilisée une seule fois, on peut éviter la définition et appliquer \fontspec{Font Name} directement comme déclaration locale ; mais comme cela recharge la fonte à chaque fois, une fonte répétée gagne à être définie avec \newfontfamily.
Choisir par nom ou par fichier
Il y a deux façons de nommer une police. La première consiste à la choisir par le nom de police enregistré dans l’OS, en écrivant directement ce nom comme \setmainfont{TeX Gyre Termes}. C’est pratique, mais la même police doit aussi être présente sur la machine de l’autre personne. La seconde consiste à choisir par fichier, en joignant les fichiers de police au projet ; c’est le bon choix pour garantir une sortie reproductible.
Pour la sélection par fichier, donnez les options Path= (répertoire contenant les polices) et Extension= (suffixe comme .otf ou .ttf), puis assignez chaque graisse et style avec UprightFont=, BoldFont=, ItalicFont= et BoldItalicFont=. L’astérisque * dans ces valeurs est un joker remplacé par le nom de fichier commun (nom de base) donné en second argument.
\usepackage{fontspec}
% プロジェクト内の fonts/ に置いた OTF を、ファイル名で指定する
\setmainfont{LibreBaskerville}[
Path = ./fonts/ ,
Extension = .otf ,
UprightFont = *-Regular ,
BoldFont = *-Bold ,
ItalicFont = *-Italic ,
BoldItalicFont = *-BoldItalic ,
]Ici, le nom de base LibreBaskerville se développe dans chaque valeur, donc fonts/LibreBaskerville-Regular.otf, fonts/LibreBaskerville-Bold.otf, etc. sont chargés. Le tableau ci-dessous compare les deux méthodes de sélection.
| Méthode | Écriture | Quand l’utiliser |
|---|---|---|
By name | \setmainfont{Font Name} ; nom enregistré par l’OS | Travail rapide ; brouillons et documents personnels sur votre machine |
By file | Path / Extension / *Font pointent vers des fichiers inclus | Reproductibilité ; collaboration, diffusion, CI, polices personnalisées ou non enregistrées |
Activer les fonctionnalités OpenType
Les polices OpenType contiennent des fonctionnalités typographiques comme ligatures, styles de chiffres et petites capitales, et fontspec les active par des options key=value. Les plus utiles :
Ligatures=— contrôle les ligatures.Ligatures=TeXactive les conversions d’entrée de style TeX : `--en tiret demi-cadratin,---en tiret cadratin, guillemets TeX en guillemets courbes (souvent actif par défaut dans la configuration standard). Autres valeurs :Common(ligatures fi, fl, etc.),Rare/Discretionary(ligatures optionnelles) etHistoric`.Numbers=— style des chiffres. CombinezOldStyle(chiffres elzéviriens, avec ascendantes et descendantes) ouLining(chiffres modernes de hauteur uniforme) avecProportional(chasses proportionnelles) ouMonospaced(chasses fixes).Letters=SmallCaps— petites capitales. Des valeurs commeLetters=Uppercaseexistent aussi.StylisticSet=— choisit, par numéro, un jeu stylistique de glyphes alternatifs fourni par la police.Scale=— facteur d’échelle. En plus d’un nombre,Scale=MatchLowercase(aligner la hauteur d’x) etScale=MatchUppercase(aligner la hauteur des capitales) sont pratiques pour adapter une fonte secondaire à la principale.Script=/Language=— choisit des écritures non latines ou des règles de modelage propres à une langue (p. ex.Script=Arabic).
On les écrit dans les options de la commande de fonte, c’est-à-dire le second argument entre crochets. Voici une fonte de corps réglée avec des ligatures de style TeX et des chiffres elzéviriens :
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}[
Ligatures = TeX ,
Numbers = OldStyle ,
]
% サンセリフは本文に大きさをそろえて読み込む
\setsansfont{TeX Gyre Heros}[Scale = MatchLowercase]Pour ajouter une fonctionnalité à un fragment plutôt qu’à tout le document, utilisez \addfontfeature{…} (ou \addfontfeatures{…} pour plusieurs). La commande ajoute localement la fonctionnalité indiquée à la fonte courante et n’agit qu’à l’intérieur des accolades englobantes.
In a table we want {\addfontfeature{Numbers={Lining,Monospaced}} 01234 56789} aligned.Maths et japonais : fontes traitées séparément
fontspec est responsable des polices latines du texte courant. Deux domaines sont traités séparément.
Le premier est la fonte mathématique. Pour mettre aussi les maths en OpenType avec XeLaTeX ou LuaLaTeX, chargez le paquet séparé unicode-math et indiquez une police mathématique OpenType (Latin Modern Math, STIX Two Math, etc.) avec \setmathfont{…}. Il est utile de retenir que \setmainfont pour le texte et \setmathfont pour les maths ont des rôles distincts. Voir la page sur les fontes mathématiques pour les détails.
L’autre domaine est le japonais. \setmainfont ne règle que la fonte latine et n’a aucun effet sur la fonte japonaise. Avec LuaLaTeX, on utilise luatexja-fontspec, en pratique le pendant japonais de fontspec, et l’on règle les fontes japonaises avec ses commandes en “j (Japanese)” : \setmainjfont{…} (Mincho, fonte japonaise du corps), \setsansjfont{…} (Gothic), \newjfontfamily, etc., avec des options largement communes à fontspec. En bref, deux voies parallèles : \setmainfont pour le latin et \setmainjfont pour le japonais. Les polices japonaises ont leur propre page.