Lettrines (lettrine)

La grande lettre initiale qui plonge dans les premières lignes à l’ouverture d’un chapitre s’appelle drop cap en anglais et lettrine en français. Sous LaTeX, la tâche revient au package qui porte précisément ce nom : lettrine, de Daniel Flipo (v2.60 datée du 2024-01-20 dans TeX Live 2024). L’ornement paraît une pure affaire d’apparence, mais l’implémentation est d’une précision obstinée : lettrine compose réellement une chaîne de référence de quatre lettres, EFTZ, en mesure la hauteur, puis calcule le facteur d’échelle avec \fpeval d’xfp. Mesuré : pour une cible de 28,98666 pt, la lettre obtenue mesurait 28,98679 pt — un écart de 0,00013 pt. Cette page traite les deux arguments obligatoires de \lettrine, les options lines=, lhang=, loversize= et findent=, le \parshape et le \llap sous-jacents, et ce qui se passe vraiment dans les listes, en deux colonnes et en japonais.

Utiliser \lettrine : deux arguments, sans espace entre eux

Mettez \usepackage{lettrine} dans le préambule et commencez le paragraphe par \lettrine[options]{T}{he rest}. Il y a deux arguments obligatoires. Le premier, {T}, est la lettrine elle-même ; le second, {he rest}, est le texte qui suit, composé par défaut en petites capitales. Le reste du paragraphe habille alors automatiquement la droite de la lettre. Aucune espace ne doit séparer {T} de {he rest} : la fin du premier mot passe directement dans le second argument. Celui-ci peut être vide : \lettrine{T}{} abaisse l’initiale et démarre le mot suivant dans la graisse ordinaire.

latex
\documentclass{article}
\usepackage{lettrine}
\usepackage{lmodern}      % a fully scalable font — see below
\begin{document}
\lettrine{L}{orem} ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua.
\end{document}

Un piège guette ici. Comme lettrine met l’initiale à une taille arbitraire, il lui faut une fonte disponible dans n’importe quel corps. Computer Modern (CM) et les fontes EC ne fournissent par défaut qu’une échelle fixe de corps : une taille demandée hors de cette échelle est remplacée par la plus proche et l’initiale ne remplit plus le nombre de lignes demandé. Le geste sûr est d’ajouter \usepackage{lmodern} (Latin Modern) ou d’employer une fonte PostScript/OpenType comme Palatino ou Times. S’il faut rester sur CM, chargez \usepackage{type1cm} ; pour EC, \usepackage{type1ec}. Le log signale toute substitution : une ligne comme LaTeX Font Warning: Font shape ... in size <31.53638> not available (Font) size <24.88> substituted signifie que l’initiale est sortie plus petite que voulu.

Ce qui se passe dessous : non pas \hangindent mais \parshape et \llap

lettrine n’utilise pas \hangindent. La description habituelle d’une lettrine artisanale — « renfoncer les premières lignes avec \hangindent et \hangafter, puis loger une grande lettre dans le creux » — ne correspond pas à lettrine.sty. Le package met l’initiale en boîte avec \sbox, construit ensuite un \parshape : une liste de couples (renfoncement, longueur de ligne), un par ligne, annule l’alinéa avec \noindent, puis pousse la boîte vers la marge gauche avec \llap. Là où \hangindent ne sait exprimer qu’« un renfoncement fixe pour les n premières lignes », \parshape peut donner à chaque ligne un renfoncement différent. C’est précisément pour cela que l’option slope= peut incliner le bord gauche du texte le long du contour diagonal d’un A ou d’un V.

Savoir comment la hauteur est calculée change le sens de lines=. lines=n ne signifie pas « n fois \baselineskip ». La hauteur visée vaut (n − 1) interlignes plus la hauteur d’x de la fonte du texte qui suit (\LettrineTextFont, \scshape par défaut). Mesuré dans un article en 10pt : \baselineskip vaut 12,0 pt et la hauteur de \scshape x est de 4,98666 pt ; avec lines=3, la cible imprimée dans le log est 28,98666 pt, soit exactement 12 × 2 + 4,98666. La lettre réellement produite mesurait 28,98679 pt. Ces deux lignes sont écrites dans le .log à chaque compilation : quand une initiale sort à la mauvaise taille, commencez par les lire — une substitution de fonte se traduit par un large écart entre la cible et le résultat.

latex
% lettrine reports both numbers in the .log on every run:
%   Package lettrine.sty Info: Targeted height = 28.98666pt
%   (lettrine.sty)             (for loversize=0, accent excluded),
%   (lettrine.sty)             Lettrine height = 28.98679pt (L);
%
% Read them when an initial comes out the wrong size:
%   pdflatex doc.tex && grep -A3 "Targeted height" doc.log

Les options qui comptent : lines=, lhang=, loversize=, findent=

L’aspect se règle par des options séparées par des virgules dans les crochets. Quatre font l’essentiel : lines= fixe la hauteur de l’initiale en lignes, lhang= son débord dans la marge gauche, loversize= son agrandissement au-delà de ce nombre de lignes, et findent= l’écart entre la lettrine et la première ligne de texte. Celle qui mérite le plus d’attention en pratique est lhang= : les lettres rondes comme O et C paraissent mieux alignées optiquement si on les laisse déborder légèrement (0,1 à 0,2 en général), de même qu’un T dont la barre saille en haut à gauche. Les lettres à bord gauche vertical, H ou N, réclament 0. Toutes ces valeurs sont des fractions de la largeur ou de la hauteur propres de la lettre : le rapport visuel survit donc à un changement de fonte.

OptionSignificationDéfaut
linesHauteur de l’initiale : (n−1) interlignes plus la hauteur d’x de la fonte suivante2
lhangFraction de la largeur de la lettrine débordant dans la marge gauche (0–1) ; utile pour O, C, T0
loversizeFraction d’agrandissement de la hauteur visée (−1 à 1) ; 0,1 = 10 % de plus0
lraiseÉlève la lettrine de cette fraction de sa propre hauteur0
findentÉcart entre la lettrine et la première ligne de texte0pt
nindentRenfoncement de la deuxième ligne et des suivantes0.5em
slopeInclinaison du bord gauche du texte, pour les lettres obliques comme A et V0pt
depthNombre de lignes supplémentaires dont l’initiale s’enfonce0
anteMatière placée juste avant la lettrine, par exemple un guillemet ouvrantaucune
imageUne image comme initiale ; nécessite graphicx, viewport= permet de la rognerfalse
refstringRemplace la chaîne de référence qui fixe la hauteur, quand EFTZ convient mal à une fonte ornéeEFTZ

Les mêmes clés peuvent être passées au chargement du package, où elles deviennent les valeurs par défaut de tout le document. \usepackage[lines=3]{lettrine} fait de trois lignes la valeur par défaut, tandis que les options d’un \lettrine[...] particulier la remplacent localement. Si une lettre donnée réclame toujours le même traitement, on peut enregistrer une valeur par défaut par lettre avec \LettrineOptionsFor{O}{lhang=0.2}. « Faire déborder les rondes » devient ainsi une tâche unique plutôt que récurrente.

Fonte et couleur de la lettrine : bien employer \LettrineFontHook

La fonte de l’initiale se règle en redéfinissant \LettrineFontHook par \renewcommand. Le corps est calculé d’après le nombre de lignes : inutile de toucher \LettrineFont. Le crochet accueille des commandes de fonte de bas niveau : avec \fontfamily{ppl}\fontseries{bx}\fontshape{sl}, seule la lettrine sort en Palatino gras penché. Sous LuaLaTeX ou XeLaTeX, on passe par fontspec\renewcommand{\LettrineFontHook}{\fontspec{LinLibertine_I.otf}} bascule sur les initiales ornées de Linux Libertine. Le texte qui suit (le second argument) a son propre crochet, \LettrineTextFont, dont la valeur par défaut est \scshape. Pour supprimer les petites capitales : \renewcommand{\LettrineTextFont}{\rmfamily}.

Pour changer la couleur, attention au type de crochets. Pour du gris, c’est \renewcommand{\LettrineFontHook}{\color[gray]{0.5}}. Le \color{gray}{0.5} qu’on rencontre souvent donne un résultat faux sans lever la moindre erreur : à la composition, \color{gray} sélectionne la couleur nommée gray et le {0.5} restant est composé comme du texte, si bien qu’un petit « 0.5 » s’imprime en bas à gauche de l’initiale. Le contenu du crochet s’exécute tel quel dans la \sbox : tout ce qui produit des caractères en produira. Employez \color{gray} pour une couleur nommée ou \color[gray]{0.5} pour une valeur de gris — l’un ou l’autre, jamais les deux mêlés.

latex
% Palatino, bold, slanted — for the dropped capital only
\renewcommand{\LettrineFontHook}{\fontfamily{ppl}\fontseries{bx}\fontshape{sl}}

% Grey. NOT \color{gray}{0.5} — that silently prints "0.5" beside the cap.
\renewcommand{\LettrineFontHook}{\color[gray]{0.5}}

% Drop the small capitals on the run-on text
\renewcommand{\LettrineTextFont}{\rmfamily}

% Three lines tall, hanging 20% of its width into the margin
\lettrine[lines=3, lhang=0.2]{T}{his is} the opening paragraph of a chapter.
% A slanted letter wants its own contour:
\lettrine[lines=4, lraise=0.1, nindent=0em, slope=-.5em]{V}{oici} le texte.

Là où ça se passe mal : en milieu de paragraphe, dans les listes, en deux colonnes

\lettrine doit ouvrir le paragraphe ; placez quoi que ce soit d’imprimable devant et elle casse en silence. Compilez Some words come first. \lettrine{L}{orem} … : ni erreur ni avertissement, mais « Some words come first. » se retrouve seule sur une courte ligne en alinéa, la lettrine et l’habillage ne commençant qu’en dessous. \lettrine fixe un \parshape pour tout le paragraphe : ce qui la précède reste simplement hors de ce plan. Un \noindent placé avant ne casse rien : lettrine.sty émet son propre \noindent, un second est inoffensif. Ce qui casse, ce n’est pas le blanc, mais le contenu imprimable.

Elle ne s’utilise pas dans une liste. La documentation du package le dit sans détour, et la mesure montre nettement le symptôme. Écrivez \lettrine{I}{nlist} juste après un \item dans itemize : la compilation passe, aucun avertissement, et l’habillage a même l’air correct — mais agrandissez la sortie et la puce de l’élément est imprimée par-dessus le coin supérieur gauche de la lettrine. La cause est simple : l’étiquette de l’\item et l’initiale de \lettrine sont toutes deux posées par \llap, au même endroit près de la marge gauche. Dans quote, quotation et abstract, tout fonctionne ; dans center, uniquement avec [lines=1]. Si une liste doit figurer à l’intérieur d’un paragraphe ouvert par \lettrine, la documentation demande un \parshape=0 juste après la fin de la liste (commencer un nouveau paragraphe avant ou après convient aussi).

En deux colonnes, la même valeur de lines= donne une impression tout autre. Mesuré : un article standard en twocolumn garde \textwidth à 469,0 pt mais donne à \columnwidth 229,5 pt, avec \columnsep de 10,0 pt. La justification fait moins de la moitié, alors que la hauteur de l’initiale découle de \baselineskip et ne change pas. La proportion de la justification occupée par la lettrine double donc à peu près, et à lines=4 les quatre premières lignes deviennent si courtes qu’elles se composent avec des blancs interlettres criants. En deux colonnes, restez à lines=2, laissez loversize à 0 et gardez un lhang discret. Notez aussi que dans la colonne de droite, lhang déborde non pas dans la marge de la page mais dans la gouttière (\columnsep) : vérifiez à l’œil que la lettrine ne serre pas de trop près le texte de la colonne voisine.

Agrandir le premier caractère d’un texte japonais : ce qui se produit vraiment

Confiez un kanji à \lettrine : la compilation passe et l’initiale est bel et bien composée en grand — mais les mesures sont calculées du côté latin. Composé sous upLaTeX avec jsarticle, \lettrine{吾}{輩は猫である。} n’a produit aucune erreur, mais le log portait LaTeX Font Warning: Font shape OT1/cmr/m/n in size <31.53638> not available (Font) size <24.88> substituted. lettrine tire la hauteur de \LettrineTestString (par défaut EFTZ) dans la fonte latine courante, non dans la fonte japonaise. Ajouter \usepackage{lmodern} fait taire l’avertissement, mais les renfoncements de l’habillage ne s’accordent toujours pas au dessin carré des glyphes japonais. De plus, le \scshape par défaut du second argument ne fait strictement rien aux kana ni aux kanji : le relais visuel de la grande initiale vers les petites capitales, si naturel en écriture latine, n’existe tout bonnement pas.

Le jugement pratique en découle. Si l’objectif est seulement de mettre en valeur le premier caractère à l’ouverture d’un chapitre japonais, le traiter par le corps du titre, la répartition des lignes, le renfoncement et le blanc est bien plus sûr que de forcer \lettrine. Si la forme abaissée est vraiment souhaitée, il faudra placer une commande de fonte japonaise dans \LettrineFontHook, remplacer la référence de hauteur par refstring= pour qu’elle mesure le caractère réellement employé, puis ajuster nindent et findent à la main. Dans tous les cas, le dessin carré des glyphes japonais se prête bien moins à une lettrine qu’une capitale latine. Sortez une épreuve et regardez-la avant de décider.

Quand l’ajouter : ne pas décorer avant que le texte soit figé

Une lettrine n’est pas une aide à la compréhension : c’est un ornement qui donne le ton à l’ouverture d’un chapitre. Elle vient donc en dernier. Les bonnes valeurs de lines et lhang dépendent de la longueur du paragraphe et de la façon dont ses lignes tombent : chaque paragraphe ajouté impose une nouvelle vérification. Ne l’employez pas dans un article, un rapport ou une spécification, dont la forme est imposée. Sa place est dans les essais, les brochures et les ouvertures de chapitre des livres dont la mise en page accueille l’ornement. Et une fois la décision prise, tenez une seule règle pour tout le document : deux lignes dans un chapitre et trois dans un autre est la manière classique de faire cesser un ornement d’être un ornement.

  • Ne l’employez que dans le premier paragraphe d’une ouverture de chapitre. Évitez les listes, center (sauf avec [lines=1]) et les paragraphes plus courts que la hauteur de la lettrine.
  • Ne l’insérez pas avant que le texte soit figé. lines et lhang dépendent de la longueur du paragraphe et de la chute des lignes.
  • Utilisez toujours une fonte scalable. Chargez lmodern ou équivalent et vérifiez dans le .log que Targeted height et Lettrine height concordent.
  • Préférez une initiale textuelle à une initiale image. Le lecteur peut ainsi chercher et copier le texte.
  • À l’ouverture d’un chapitre en japonais, décidez d’abord si une lettrine occidentale convient à la page. Sinon, traitez par le corps du titre et le blanc.