Microtypographie (microtype)

Composons deux fois le même manuscrit. Un article en 11pt, une justification de 180pt, cent paragraphes de lipsum. Sans microtype, cela fait 1731 lignes et 117 boîtes overfull. Ajoutez la seule ligne \usepackage{microtype} au préambule et l’on obtient 1702 lignes et 6 overfull. La microtypographie n’est rien de plus que cela : laisser la ponctuation déborder d’un cheveu dans la marge et étirer la chasse des glyphes de bien moins d’un pour cent. Cette page examine ce que fait réellement le microtype de LaTeX — protrusion, expansion de fonte et tracking — chiffres à l’appui.

Ce que fait réellement microtype

microtype ne compose rien lui-même. C’est une interface LaTeX unifiée vers les fonctions microtypographiques introduites par pdfTeX et parvenues plus tard, en partie, à LuaTeX et XeTeX. Elle a été écrite par R. Schlicht. Au centre, deux choses — la protrusion des caractères (aussi appelée margin kerning) et l’expansion de fonte — puis le tracking (interlettrage), la désactivation des ligatures et l’ajustement des espaces inter-mots et du crénage supplémentaire. Protrusion et expansion sont actives par défaut dès que le paquet peut supposer sans risque qu’elles fonctionneront sur le moteur utilisé.

L’origine de ces deux fonctions est documentée avec précision. Hàn Thế Thành les a implémentées dans pdfTeX dans le cadre de la thèse qu’il a soutenue en 2000 à l’université Masaryk de Brno, « Micro-typographic extensions to the TeX typesetting system », publiée dans TUGboat, volume 21, numéro 4, pages 317–434. Cette même thèse explique que le margin kerning est nécessaire à l’alignement optique, les marges mécaniquement justifiées paraissant plutôt irrégulières à l’œil, et définit l’expansion de fonte comme le remplacement par une variante plus large dans une ligne lâche et plus étroite dans une ligne serrée, afin que les espaces inter-mots varient moins. Ce que microtype met en œuvre part donc d’une observation sur la manière dont l’œil humain se trompe devant un bord droit.

Une précision de périmètre : il s’agit de raffinements pour le texte occidental en alphabet latin. Le japonais suit un autre modèle de composition — interdictions de rejet en début et en fin de ligne, espacement entre caractères japonais et occidentaux — pris en charge par des outils comme luatexja, et charger microtype n’y change rien. Le traitement automatique plus fondamental du texte occidental, ligatures et crénage, relève d’une page sœur.

Quel est l’effet de microtype ? Une mesure

Plus la justification est étroite, plus le gain est net. Sous TeX Live 2024, dans un article en 11pt avec \usepackage[T1]{fontenc} et une justification de 180pt — environ une colonne d’une mise en pages sur deux colonnes —, cent paragraphes de lipsum ont été composés et les lignes ainsi que les messages Overfull \hbox comptés. Les résultats figurent dans le tableau ci-dessous : avec microtype, le total passe de 1731 à 1702 lignes, soit −1,7 %, et les débordements de 117 à 6. En refaisant la mesure à 345pt, proche de la largeur de texte d’un article a4paper, l’écart se resserre à 921 → 909 lignes, −1,3 %. L’effet est réel, mais ce n’est pas un raccourcissement spectaculaire.

RéglageLignes au total (justification 180pt, 100 paragraphes)Messages Overfull hbox
(package not loaded)1731117
expansion=false1718 (protrusion seule)102
protrusion=false1711 (expansion seule)9
\usepackage{microtype}1702 (les deux, par défaut)6

Ce découpage montre que les deux fonctions font des travaux différents. C’est l’expansion qui supprime le plus de lignes (1731 → 1711), même si la protrusion en apporte treize à son compte. En revanche, éliminer les boîtes overfull est presque entièrement l’œuvre de l’expansion : 117 tombent à 9, alors que la protrusion seule ne descend qu’à 102. Si une ligne déborde dans la marge, c’est l’expansion qui règle le problème ; si le bord droit paraît simplement irrégulier, c’est la protrusion. Voilà la règle empirique pour choisir laquelle désactiver. Au passage : charger microtype met \pdfprotrudechars et \pdfadjustspacing à 2 (sans le paquet, tous deux valent 0) ; un \the sur ces deux registres dit donc si quelque chose est bien actif.

Protrusion des caractères — annuler une illusion d’optique

La protrusion (margin kerning) laisse les caractères de début et de fin de ligne déborder d’un cheveu dans la marge ; l’objectif est d’annuler une illusion. Alignez un point, une virgule ou un trait d’union — ou une lettre au contour rond ou incliné comme o, A, v — au ras du bord du texte, et l’approche latérale du glyphe fait paraître ce bord creusé vers l’intérieur. Laissez-les dépasser légèrement et le bord se lit comme optiquement droit. L’amplitude varie selon les caractères : forte pour la ponctuation, moindre pour les lettres rondes, nulle pour les lettres à côtés droits comme H — et microtype fournit, par fonte, des fichiers de configuration contenant ces valeurs.

Pour augmenter ou réduire globalement l’amplitude, il y a l’option factor (factor=1100 donne 1,1 fois les valeurs par défaut). La protrusion reste par ailleurs sans effet là où TeX ne voit pas de marge — les articles d’un itemize, les bords de cellules d’un tabular. Pour ces endroits, microtype fournit \leftprotrusion et \rightprotrusion, qui font déborder le premier ou le dernier glyphe comme s’il se trouvait à une marge extérieure ordinaire. Dans un tableau dont la colonne de gauche commence par des parenthèses ou des guillemets, leur seul ajout change la lecture.

Expansion de fonte — laisser la chasse faire le travail des espaces

L’expansion de fonte étire ou comprime horizontalement les glyphes de chaque ligne d’un rien — d’une fraction de pour cent à quelques pour cent — afin que la ligne remplisse la justification. En composition justifiée, la largeur de ligne s’obtient normalement par le seul étirement et resserrement des espaces inter-mots. Confiez une part de ce travail à la chasse des glyphes et les espaces inter-mots varient moins, ce qui régularise l’écartement d’une ligne à l’autre et donne au paragraphe une couleur plus uniforme. Dans la mesure ci-dessus, c’est l’expansion qui a fait passer les boîtes overfull de 117 à 9. Les limites se règlent avec stretch et shrink, la granularité avec step, mais les valeurs par défaut suffisent pour commencer.

Il y a ici une limite ferme. L’expansion ne fonctionne qu’avec pdfTeX et LuaTeX, pas avec XeTeX. Charger microtype sans option sous XeLaTeX ne provoque aucune erreur : le paquet n’active que ce qui peut tourner sans risque, si bien que protrusion et tracking fonctionnent tandis que l’expansion est discrètement désactivée. Mais demandez-la explicitement avec \usepackage[expansion=true]{microtype} et la compilation s’arrête sur ceci :

log
$ xelatex xe.tex
! Package microtype Error: Font expansion does not work with xetex.

See the microtype package documentation for explanation.

% The reason is one missing primitive. Asking each engine directly:
%   pdftex : has \efcode, has \lpcode
%   xetex  : NO \efcode, has \lpcode
%   luatex : has \efcode, has \lpcode
% XeTeX can shift glyphs into the margin, but it cannot scale their widths.

La raison tient à une primitive manquante. \lpcode et \rpcode, les amplitudes de protrusion à gauche et à droite, existent sur les trois moteurs, mais \efcode, dont l’expansion a besoin, n’existe pas dans XeTeX (pdfTeX et LuaTeX l’ont tous deux). XeTeX sait déplacer un glyphe dans la marge ; il n’a aucun moyen d’en mettre la chasse à l’échelle. Si vous voulez le traitement complet, expansion comprise, et que vous êtes sous XeTeX, passer à LuaTeX est la réponse cohérente.

Tracking (\textls) — un interlettrage qui ne casse pas la césure

Le tracking, ou interlettrage, écarte régulièrement les lettres. Ce qui rend la version de microtype bonne, c’est qu’elle n’insère pas d’espace entre les caractères : elle construit et utilise une copie de la fonte aux glyphes plus larges. Le mot reste donc un seul mot, et la césure n’est pas cassée. Semer des \kern à la main dans un mot, la méthode classique, empêche définitivement ce mot de se couper en fin de ligne. Pour un interlettrage ponctuel, utilisez \textls{...} ; pour l’appliquer à tout ce qui suit, \lsstyle, qui reste actif jusqu’à la fin du groupe. Pour les titres, où l’on ne veut pas de crénage supplémentaire avant et après, la version étoilée \textls*{...} est commode.

document.tex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype}
% Space out small caps by 40/1000 em wherever they appear
\SetTracking{encoding = *, shape = sc}{40}
\begin{document}
\textsc{Small Caps}, and an ad-hoc \textls[200]{wide run of letters}.

% \lsstyle stays on until the end of the group
{\lsstyle everything here is letterspaced}

% The starred form adds no kerning before or after - good for headings
\section*{\textls*{Chapter Title}}
\end{document}

Les valeurs sont en millièmes de cadratin ; d’après le manuel de microtype, la valeur par défaut est 100/1000 em = 0,1 em. On donne une valeur ponctuelle dans l’argument optionnel, comme \textls[200]{...}, ou on la déclare pour tout un ensemble de fontes dans le préambule, par exemple \SetTracking{encoding=*, shape=sc}{40} (cet exemple espace les petites capitales de 40/1000). Une mise en garde s’impose : le manuel écrit lui-même que l’interlettrage des bas de casse « is held in abhorrence », et prévient qu’à moins de savoir précisément ce qu’on fait, on ne devrait espacer que les capitales ou les petites capitales. Le tracking fonctionne avec pdfTeX et LuaTeX — le README de microtype en précise les conditions de version. Si l’interlettrage est aussi nécessaire en plain TeX, le paquet letterspace n’en fournit que cette partie.

Couper les ligatures, toucher aux espaces — \DisableLigatures, kerning, spacing

Les occasions de désactiver les ligatures sont rares mais pressantes quand elles surviennent — une phrase montrant du code où -- ne doit surtout pas fusionner en tiret demi-cadratin. \DisableLigatures les coupe pour un ensemble de fontes désigné : \DisableLigatures{encoding = T1, family = tt*} ne vise que la famille machine à écrire en T1. Attention toutefois : désactiver toutes les ligatures d’une fonte coupe aussi son crénage, comme le dit explicitement le manuel. En listant dans l’argument optionnel les caractères qui amorcent les ligatures, seules celles-là sont neutralisées, comme dans \DisableLigatures[?,!]{encoding = T1}. Cette commande ne peut être employée que dans le préambule, et une seule fois.

Les options kerning et spacing activent respectivement le crénage supplémentaire et l’ajustement des espaces inter-mots, et toutes deux sont réservées à pdfTeX (elles ne font rien sous LuaTeX ni XeTeX). Désactivées par défaut, on ne les nomme qu’en cas de besoin. Pour modifier les réglages après chargement, il y a \microtypesetup{...} — pour couper la protrusion pendant la seule construction de la table des matières, encadrez-la de \microtypesetup{protrusion=false} et \microtypesetup{protrusion=true}. Pour qu’une partie du document ait une configuration différente, changez de contexte avec \microtypecontext{...} ou l’environnement microtypecontext. L’option draft désactive la microtypographie en bloc, tandis que final la force à l’inverse même quand la classe de document est en mode brouillon — paire commode pour les essais avant/après.

Les fonctions disponibles dépendent du moteur

Deux choses à retenir : l’expansion n’est pas disponible sous XeTeX, et l’espacement inter-mots et le crénage supplémentaire sont réservés à pdfTeX. Le moteur le plus complet est donc pdfTeX (protrusion + expansion + tracking + kerning + spacing), puis LuaTeX (protrusion + expansion + tracking) ; XeTeX n’offre que protrusion et tracking. microtype n’active automatiquement que ce qui tourne sans risque sur votre moteur, si bien qu’un chargement sans option ne produit jamais d’erreur — raison pour laquelle il faut savoir soi-même ce qui n’agit pas.

FonctionpdfTeX / LuaTeX / XeTeXRemarques
protrusionoui / oui / ouiles trois possèdent \lpcode et \rpcode ; actif par défaut
expansionoui / oui / nonXeTeX n’a pas \efcode ; la demander déclenche une Package microtype Error
trackingoui / oui / oui\textls et \lsstyle ; désactivé par défaut, activé par tracking
kerningoui / non / nonpdfTeX seulement ; désactivé par défaut
spacingoui / non / nonpdfTeX seulement ; ajustement des espaces inter-mots

Ce qu’il faut vraiment écrire dans le préambule

Le cas de base, c’est la seule ligne \usepackage{microtype}. Elle active par défaut protrusion et expansion (là où le moteur les prend en charge), et la plupart des documents en tirent un vrai bénéfice. microtype est stable et presque sans effets de bord — il n’y a pratiquement jamais de mal à l’ajouter. Sur les moteurs pdfTeX, l’usage est de l’associer à \usepackage[T1]{fontenc}, notamment parce que les fichiers de configuration de la protrusion et de l’expansion sont organisés par encodage. L’exemple ci-dessous va un peu plus loin : il active explicitement protrusion et expansion, espace légèrement les petites capitales et désactive les ligatures uniquement pour la famille machine à écrire servant à montrer du code.

preamble.tex
\documentclass{article}
\usepackage[T1]{fontenc}
% protrusion and expansion explicitly on;
% "final" forces them on even when the class is in draft mode
\usepackage[activate={true,nocompatibility},final]{microtype}

% letterspace small caps a little (40/1000 em)
\SetTracking{encoding = *, shape = sc}{40}

% no ligatures in the typewriter family, so "--" stays two hyphens
\DisableLigatures{encoding = T1, family = tt*}

\begin{document}
% turn protrusion off just while the table of contents is built
\microtypesetup{protrusion=false}
\tableofcontents
\microtypesetup{protrusion=true}
\end{document}

Un dernier étalonnage des attentes. Ces réglages sont discrets, et une page isolée peut ne rien en montrer — la mesure n’a relevé qu’une réduction de 1,7 pour cent du nombre de lignes, et encore, sur une justification étroite. Ce qui compte davantage à l’usage, c’est que les boîtes overfull sont passées de 117 à 6 : chaque débordement évité est une phrase qu’on n’a pas à reformuler pour qu’elle tienne. La valeur de microtype tient moins au raccourcissement qu’à la réduction du nombre d’interventions manuelles.