Tapez du texte en écriture latine dans LaTeX et il ressort avec un soin surprenant : écrivez office et le ffi fusionne en une seule glyphe, la paire AV se resserre de 1,11084 pt, et les coupures de ligne sont choisies après examen du paragraphe entier. Cette automatisation laisse pourtant des trous — elle coupe volontiers wolffish en wolff-ish. Et si l'on rompt la ligature avec \/ pour y remédier, la césure du mot disparaît complètement. Cette page expose, mesures à l'appui, les décisions qui restent à l'auteur lorsqu'il compose du texte occidental : quand rompre une ligature, que déclarer à babel, comment employer capitales et petites capitales, et ce qui change lorsque des passages occidentaux figurent dans un manuscrit japonais.
Les cinq ligatures que forme LaTeX : ff, fi, fl, ffi, ffl
Une ligature fond des lettres voisines en une seule glyphe, et LaTeX en forme cinq par défaut : ff, fi, fl, ffi et ffl. Tapez office ou fluffier dans le texte courant et la substitution a lieu sans laisser de trace dans la source. La raison tient à la forme : l'attaque en haut à droite d'un f heurte le point d'un i qui suit ou la hampe d'un l, aussi fond-on des ligatures en f depuis l'époque du plomb. Mesurée en Computer Modern T1 à 10 pt, la ligature fi fait 5,5542 pt tandis que le f{}i séparé fait 5,83191 pt — la ligature est plus étroite de 0,27771 pt, et cet écart est précisément l'espace gagné en rapprochant les lettres.
La même mécanique agit sur la ponctuation. Deux traits d'union à la suite, --, donnent un tiret demi-cadratin, employé pour les intervalles numériques ; trois, ---, un tiret cadratin, employé pour les incises ; et deux accents graves suivis plus loin de deux apostrophes produisent les guillemets doubles typographiques ouvrants et fermants. Ces conversions sont gravées dans les métriques de la fonte : aucune commande n'est requise (le choix du tiret est détaillé sur la page consacrée aux guillemets et aux tirets).
Trois façons de rompre une ligature : une seule conserve la césure
Une ligature qui chevauche une frontière de morphème — la couture où un mot a été assemblé à partir de pièces — nuit à la lisibilité au lieu de l'aider. L'exemple classique est shelfful (shelf + ful) : fondre le ff masque la jointure entre les deux morceaux. Le mot est cité par Knuth lui-même, page 19 du TeXbook, source que la documentation du package selnolig rappelle encore. cufflink, offload, wolffish et halflife sont du même ordre. La tradition offre trois façons de rompre la ligature : shelf\/ful (une correction d'italique), shelf{}ful (un groupe vide) et shelf\kern0pt ful (un crénage de largeur nulle).
Voici une différence que seule la mesure révèle. Demandez à \showhyphens où sont les points de coupure : wolffish brut se coupe en wolff-ish — là où les morphèmes voudraient wolf-fish. wolf{}fish se coupe aussi en wolff-ish : la ligature a disparu, mais la césure est intacte. En revanche, wolf\/fish et wolf\kern0pt fish n'ont plus aucun point de coupure, et un \mbox{} intercalé pas davantage. La raison est simple : \/ et \kern insèrent chacun un nœud de composition, et l'exploration du mot par TeX s'y arrête. {} ne laisse rien derrière lui, le mot reste un mot — ce qui fait de {} le seul briseur de ligature qui préserve la césure.
| Écrit comme | Largeur (10pt, T1 CM) | Ce que rapporte showhyphens |
|---|---|---|
shelfful | 30,88135 pt | shelf-ful — ligature conservée, coupure conservée |
shelf{}ful | 31,15906 pt | shelf-ful — ligature partie, coupure toujours là |
shelf\kern0pt ful | 31,15906 pt | aucune coupure — la césure est perdue |
shelf\/ful | 31,93665 pt | aucune coupure, et 0,77759 pt de correction d'italique sur le f |
Conclusion pratique : pour rompre une ligature à la main, utilisez {}. \/ est la forme vénérable montrée dans The TeXbook, et elle se défend en ce qu'elle restitue l'espace qu'aurait occupé le débord du f — mais elle empêche le mot de se couper en fin de ligne. Pour un mot court, le dommage est faible ; pour un composé long comme selffulfilling, la perte de tous les points de coupure étire les espaces de cette ligne et amaigrit tout le paragraphe. Si LuaLaTeX est disponible, selnolig est la plus belle réponse : il porte la morphologie anglaise et allemande sous forme de motifs et supprime les ligatures indésirables de shelfful ou offload sans aucun balisage dans le texte (version 0.302 dans TeX Live 2024, LuaLaTeX uniquement).
% \showhyphens output, TeX Live 2024, T1 Computer Modern:
% shelfful -> shelf-ful (ligature, break point kept)
% shelf{}ful -> shelf-ful (ligature broken, break point kept)
% shelf\kern0pt ful -> shelfful (no break points)
% shelf\/ful -> shelfful (no break points)
% wolffish -> wolff-ish (a break TeX gets wrong on its own)
A shelf{}ful of books, one cuff{}link, an off{}load.
% LuaLaTeX only: handles the whole word list for you
% \usepackage{selnolig}Le crénage resserre AV de 1,11084 pt — et {} l'annule aussi
Un crénage ajuste l'écart d'une paire précise de lettres voisines, le resserrant ou l'ouvrant pour que l'espacement paraisse régulier. Des paires aux formes inclinées comme AV, To, Wa et LT semblent béantes si on les laisse telles quelles. Mesuré en Computer Modern T1 à 10 pt, AV fait 13,8855 pt, tandis que A{}V, avec un groupe vide entre les deux, fait 14,99634 pt : les 1,11084 pt de resserrement demandés par la fonte se sont évaporés. La table des paires de crénage réside dans les métriques de la fonte (un fichier .tfm dans le monde pdfLaTeX, une table interne pour les fontes OpenType), et TeX la lit pour fixer l'espacement. L'auteur n'écrit rien.
Une mise en garde en rejaillit sur la section précédente : rompre une ligature avec {} annule aussi le crénage qui se trouvait là. Si la fonte définissait un crénage entre les deux f, il disparaît également. Pour shelf{}ful, ce sont les 0,27771 pt qui font passer 30,88135 pt à 31,15906 pt. L'œil ne le voit pas, mais là où l'ajustement des lettres doit être exact — un logo, une marque —, donner à \kern sa propre valeur est plus sûr que de recourir à {}. À l'inverse, pour espacer régulièrement un mot entier (approche, interlettrage), ne semez pas vos propres \kern : employez \textls{...} de microtype, qui laisse la césure fonctionner.
La césure diffère selon la langue : déclarez-la avec babel
La même graphie se coupe à des endroits différents selon la langue. Interrogez \showhyphens : signature donne sig-na-ture avec les motifs anglais, si-gna-ture avec les français, sig-na-tu-re avec les espagnols — les points de coupure eux-mêmes se déplacent. Kongress est plus radical : avec les motifs anglais, aucun point de coupure n'est trouvé. Une bonne part des symptômes rapportés comme « les lignes ne se remplissent pas » ou « les blancs entre mots n'arrêtent pas de s'étirer » remonte à un document qui n'a jamais déclaré sa langue. \usepackage[french]{babel} — ou polyglossia sous XeLaTeX et LuaLaTeX — n'est pas un ornement mais une condition d'une composition correcte.
| Mot | english | french | ngerman | spanish |
|---|---|---|---|---|
signature | sig-na-ture | si-gna-ture | si-gna-ture | sig-na-tu-re |
Analyse | Anal-yse | Ana-lyse | Ana-ly-se | Analy-se |
Kongress | Kongress (aucune coupure) | Kon-gress | Kon-gress | Kon-gress |
impossible | im-pos-si-ble | im-pos-sible | im-pos-si-ble | im-pos-si-ble |
transatlantique | transat-lan-tique | trans-at-lan-tique | trans-at-lan-ti-que | trans-atlan-ti-que |
Même la langue déclarée, la décision automatique se trompe sur les noms propres et les termes techniques. Les remèdes viennent à trois niveaux. (1) Pour qu'un mot ne se coupe jamais qu'aux endroits voulus, listez-le dans le préambule dans \hyphenation{...}, en marquant les points autorisés par -, les mots séparés par des espaces. Avec les motifs par défaut (anglais américain), manuscript n'a aucun point de coupure, ce qui fait de \hyphenation{man-u-script} l'exemple canonique depuis des décennies. (2) Pour un cas isolé, placez \- (un trait d'union conditionnel) dans le mot — mais un mot portant \- ne peut plus se couper qu'à cet endroit. (3) Pour interdire toute coupure, enveloppez-le dans \mbox{...}. Comme les mesures ci-dessus l'ont montré, \mbox{} retire tous les points de coupure — ici, c'est précisément le but.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel} % loads the English hyphenation patterns
\hyphenation{man-u-script data-base FORTRAN} % global exceptions
\begin{document}
We rewrote the manuscript in \mbox{FORTRAN} overnight,
and the data\-base held.
\end{document}
% \showhyphens{...} prints the break points to the log --
% the fastest way to see what the current patterns actually do.babel change plus que la césure : il change le texte lui-même
Donnez une langue à babel et ses usages typographiques viennent avec. Le français en est le cas le plus net. Mesurez la même saisie, Bonjour: oui! : sans babel, 58,48572 pt de large ; avec \usepackage[french]{babel}, 62,37366 pt — 3,88794 pt de plus. Extrayez le texte du PDF et la raison saute aux yeux : la sortie donne Bonjour : oui !. La typographie française place une espace devant les signes hauts (:, ;, !, ?), et babel l'insère pour vous. Écrivez \og ... \fg{} et vous obtenez en outre les guillemets « ».
L'allemand fournit, via ses raccourcis de guillemets, les guillemets bas et hauts „ … “, et l'espagnol comme l'italien apportent leurs propres usages de la même façon. Un piège se cache ici : dès que l'on change la langue de babel, des espaces apparaissent là où il n'y en avait pas, de sorte que la coupure des lignes change de fond en comble et la mise en page bouge. C'est l'accident derrière « j'ai ajouté une option de langue en répondant aux relecteurs et les flottants de pages sans rapport se sont déplacés ». Fixez la langue dans le premier préambule, et dans un document multilingue nommez explicitement la langue principale avec main=.
Petites capitales et capitales : \textsc{UNESCO} ne devient pas petit
Pour détacher un sigle ou un nom dans du texte occidental courant, les petites capitales troublent moins la couleur de la ligne qu'une suite de capitales. La commande est \textsc{...}, et c'est ici que se loge une confusion fréquente. Une fonte en petites capitales est une fonte où les emplacements des minuscules contiennent de petites capitales. Ce que l'on donne à \textsc doit donc être en minuscules. Mesuré en Computer Modern T1 à 10 pt, \textsc{unesco} fait 34,68042 pt tandis que \textsc{UNESCO} fait 46,09985 pt — ce dernier est plus large qu'un UNESCO ordinaire (42,35077 pt). Vouloir réduire a produit la plus large des trois.
Les petites capitales ont un second coût, du côté du PDF. Passez pdftotext sur un PDF ayant composé \textsc{unesco} et vous récupérez unesco — toujours en minuscules. Les glyphes sont des capitales, mais la couche de texte contient des minuscules. Un article qui compose des noms d'organismes ou de normes en petites capitales risque donc de ne pas être trouvé lorsqu'on les recherche. Si les données bibliographiques et la recherche comptent, composez les sigles en capitales ordinaires et réservez \textsc aux endroits où le contraste est vraiment voulu. Quant à \MakeUppercase, les noyaux récents traitent correctement les accents : \MakeUppercase{stra\ss e caf\'e na\"\i ve} donne STRASSE CAFÉ NAÏVE, le ß s'ouvrant en SS comme le veut l'usage.
Un point encore : le meuble à caractères a ses limites. Computer Modern n'a pas de petites capitales italiques ; \textit{\textsc{unesco}} produit donc LaTeX Font Warning: Font shape T1/cmr/m/scit undefined et substitue discrètement les petites capitales penchées. C'est un avertissement, pas une erreur, et il voyage volontiers jusqu'à la publication sans être remarqué. Si des petites capitales italiques sont vraiment nécessaires, il faut choisir entre une autre fonte — Latin Modern en fait partie — et l'abandon de la combinaison.
\textsc{unesco} % 34.68042pt -- real small caps
\textsc{UNESCO} % 46.09985pt -- full-size caps in the SC font
UNESCO % 42.35077pt -- ordinary capitals
% pdftotext of the first line gives "unesco", in lowercase
\MakeUppercase{stra\ss e caf\'e} % -> STRASSE CAFÉ
% English abbreviations keep the period, and the period is not a sentence end:
e.g.\ and i.e.\ and cf.\ and et al.\ -- see the punctuation pageDiscipliner la marge de droite : microtype et les Overfull hbox
Le package qui hausse d'un cran la composition occidentale est microtype. La seule ligne \usepackage{microtype} met en jeu deux raffinements micro-typographiques. La saillie des caractères (protrusion) pousse d'un cheveu au-delà de la marge la ponctuation de fin de ligne et les lettres rondes ou inclinées comme o et A, produisant un bord optiquement régulier. L'expansion de fonte étire ou comprime les glyphes de chaque ligne d'une fraction de pour cent et reprend une part du travail que ferait sinon le glue inter-mots. Les fonctions disponibles dépendent du moteur : microtype-xetex.def porte les erreurs Font expansion does not work with xetex et Letterspacing currently doesn't work with xetex — sous XeLaTeX, ne comptez donc que sur la saillie.
Des lignes déborderont malgré tout du bord droit, et le message Overfull \hbox dans le journal en est le signal. TeX a choisi ces coupures en pesant le paragraphe dans son ensemble — l'algorithme de Knuth–Plass, publié par Donald Knuth et Michael Plass dans Software: Practice and Experience en 1981. Un débordement ne signifie donc pas que l'algorithme a renoncé sur cette ligne, mais qu'aucun agencement du paragraphe entier ne lui a mieux plu. Deux déclarations règlent la densité d'un paragraphe : \sloppy tolère des blancs plus larges pour éviter le débordement, tandis que \fussy (le réglage par défaut) maintient l'espacement strict et laisse le débordement se produire. Pour relâcher un seul paragraphe, enveloppez-le dans l'environnement sloppypar. L'ordre compte toutefois : \sloppy en dernier recours. Chargez d'abord microtype, puis changez un mot de la formulation ou ajoutez un seul \- — cela suffit le plus souvent, et le paragraphe s'en trouve plus beau.
Quand un auteur japonais compose un document en langue occidentale
Commencez à rédiger un article en anglais dans un environnement japonais et voici en général la première erreur : ! LaTeX Error: Unicode character (U+3000) not set up for use with LaTeX. Le coupable est une espace pleine chasse ; une seule, laissée par la méthode de saisie en cours de conversion, suffit à arrêter pdfLaTeX. ( (U+FF08) et ) (U+FF09) échouent de la même façon, avec not set up for use with LaTeX. Le pénible est qu'à l'écran ils sont indiscernables d'une espace demi-chasse ou d'une parenthèse ordinaire. Consacrer une minute, le jour où l'on commence le brouillon anglais, à traquer et supprimer espaces, parenthèses et virgules pleine chasse épargne définitivement cette classe d'erreurs.
Deuxième point : le choix de la classe de document et du moteur. Composez un document anglais avec une classe japonaise comme jsarticle, ou avec upLaTeX, et le modèle de composition japonais reste derrière, intercalant un travail dont le texte occidental n'a pas besoin. Pour un manuscrit uniquement anglais, passer franchement à article avec pdfLaTeX — ou LuaLaTeX avec fontspec — est la voie sûre. À l'inverse, dans un manuscrit surtout japonais comportant des passages occidentaux, l'espacement de fin de phrase y devient facilement irrégulier : \frenchspacing mérite alors considération (le mécanisme est exposé sur la page de ponctuation). Enfin, la saillie et l'expansion de microtype sont faites pour le texte occidental ; la composition japonaise relève d'un autre modèle, dans des outils comme luatexja.
- Nettoyez les caractères pleine chasse dès le premier jour. Cherchez l'espace pleine chasse U+3000, les parenthèses pleine chasse
()et la virgule pleine chasse, et supprimez-les. C'est de cela que parlenot set up for use with LaTeX. - Déclarez la langue avant de commencer à écrire. Ajouter
\usepackage[english]{babel}plus tard change les coupures de ligne, et avec elles la position des flottants. - Rompez les ligatures à la main avec
{}.\/et\kern0pteffacent la césure du mot. Sous LuaLaTeX, confiez la tâche àselnolig. - Composez les sigles en capitales ordinaires.
\textsclaisse des minuscules dans la couche de texte du PDF : c'est le mauvais outil pour un mot que l'on veut voir trouvé. \sloppyen dernier recours.microtyped'abord, puis une reformulation ou un seul\-. On compte lesOverfull \hboxensuite, pas avant.