Le soulignement est la seule mise en forme que les gens du métier conseillent d’abandonner, et ce n’est pas affaire de snobisme. Les machines à écrire n’avaient pas d’italique : pour signaler un mot, il fallait ramener le chariot et frapper des tirets bas sous les lettres. Dans un manuscrit remis à l’imprimeur, un trait sous un mot était une consigne au compositeur : composer ce mot en italique. Le soulignement n’a jamais été un style ; c’en était la notation. LaTeX hérite deux fois de cette histoire : \underline est au fond une commande mathématique et pousse une longue phrase dans la marge de droite au lieu de la couper, et ulem, le package que tout le monde charge pour y remédier, énonce son propre but sur le CTAN : donner à la sortie l’air « de sortir d’une machine à écrire ». Cette page explique comment souligner en LaTeX avec \underline, \uline et \ul, ce qui distingue ulem de soul, et dans quels cas c’est \emph qu’il fallait écrire.
Pourquoi \underline déborde dans la marge au lieu de se couper
Parce que \underline est une commande mathématique et qu’elle compose son argument dans une boîte unique, insécable. Elle ne demande aucun package et fonctionne aussi bien dans le texte que dans les formules, mais son domicile est le mode mathématique : c’est le trait que l’on tire sous une variable dans $\underline{x}$. Employée dans une phrase, LaTeX ouvre discrètement le mode mathématique autour de l’argument, compose l’ensemble en une seule boîte horizontale et trace un filet dessous. Une boîte ne contient aucun point de coupure ; si la locution dépasse la justification, TeX n’a nulle part où couper et la laisse filer dans la marge de droite.
% fine for a single short word
This word is \underline{underlined} in running text.
% the box has no break points, so TeX pushes it into the margin
\underline{a phrase far too long to fit on one line of this measure}Le symptôme dans le fichier journal mérite d’être reconnu, car ce n’est pas une erreur mais un avertissement : Overfull \hbox (…pt too wide) in paragraph at lines …, accompagné d’un fragment imprimé sous la forme []$[]$. Ces deux signes dollar sont l’aveu : LaTeX montre lui-même qu’il a enveloppé la phrase en mode mathématique pour la souligner. Le second défaut, plus discret, tient à la position du filet. \underline le place à une profondeur fixe sans regarder les lettres au-dessus ; avec des jambages comme g ou p, le trait semble alors couper les caractères.
Le partage des rôles est donc net : \underline pour les mathématiques, où l’argument est de toute façon un symbole logé dans une formule, et un package dès que le filet doit se trouver dans une phrase. Deux packages assurent ce service et ils ne sont pas interchangeables. ulem fournit des soulignements et des biffures qui se coupent en fin de ligne ; soul fournit un surligneur et l’espacement des lettres. Avant de charger l’un ou l’autre, il vaut pourtant la peine de savoir ce que signifiait un soulignement à l’origine : cela tranche le plus souvent la question de savoir s’il en faut un.
Pourquoi les typographes déconseillent de souligner
Parce qu’un soulignement est un substitut, et que ce qu’il remplace se trouve désormais sous vos doigts. Les machines à écrire ignoraient le gras et l’italique ; pour marquer un mot, il fallait ramener le chariot et frapper des tirets bas sous les lettres déjà tapées. Dans l’imprimerie, le même trait remplissait une seconde fonction : sur un tapuscrit préparé, le soulignement était une consigne au compositeur. Un trait droit sous le mot signifiait italique, un trait ondulé gras, un double trait petites capitales, un triple trait grandes capitales. L’auteur soulignait parce qu’il ne pouvait pas composer d’italique. Le compositeur, qui le pouvait, lisait le trait puis le jetait.
Voilà pourquoi le soulignement survit dans les logiciels et disparaît des manuels de composition : les traitements de texte ont hérité des touches de la machine à écrire, alors que le plomb n’a jamais eu de soulignement à proposer. Les outils de LaTeX assument cette filiation. Le ulem de Donald Arseneau, dont la mention de copyright commence en 1989, est présenté sur le CTAN comme remplaçant \em et \emph par un soulignement « pour que la sortie ait l’air de sortir d’une machine à écrire », et son manuel le dit adapté au texte « qui doit être souligné dans un manuscrit soumis à publication ». ulem n’a pas été écrit pour orner un PDF fini : il a été écrit pour produire un tapuscrit.
La règle pratique en découle. Si vous voulez seulement que le lecteur appuie sur un mot, écrivez \emph{...} et laissez la classe de document décider de l’aspect de la mise en valeur : italique dans la plupart des classes, et retour correct au romain lorsque des mises en valeur s’imbriquent. Réservez les vrais soulignements aux cas où le trait porte de l’information et non du ton : une suppression dans un brouillon annoté, une ligne de signature, un blanc à remplir, un lien. Tout ce qui suit suppose une raison de cet ordre.
ulem : soulignements et biffures qui se coupent en fin de ligne
Chargez \usepackage[normalem]{ulem} et écrivez \uline{...} là où vous auriez écrit \underline{...} : le filet se coupe désormais en fin de ligne, court sous les espaces entre les mots et supporte une césure. Le package emporte tout le vocabulaire des signes de correction – double filet, filet ondulé, trait à travers le mot, hachures obliques, tirets et points – car c’est précisément ce vocabulaire qu’exige un manuscrit préparé. En mode mathématique, \uline rend discrètement la main à \underline : on peut donc l’employer partout.
| Commande | Ce qui est tracé |
|---|---|
\uline | Soulignement, se coupe en fin de ligne |
\uuline | Double soulignement ; en correction, la marque des petites capitales |
\uwave | Soulignement ondulé ; en correction, la marque du gras |
\sout | Biffure : un trait au milieu du mot |
\xout | Rature : le texte surimprimé de / répétés |
\dashuline | Soulignement en tirets |
\dotuline | Soulignement pointillé |
Deux paramètres commandent le filet, et ils se règlent différemment – c’est le piège classique. \ULthickness en donne l’épaisseur, par défaut .4pt, mais c’est une macro et non une longueur : il faut \renewcommand{\ULthickness}{0.8pt}, \setlength reste sans effet. \ULdepth est la distance de la ligne de base au filet ; c’est une vraie longueur, réglée par \setlength, et sa valeur par défaut est le drapeau \maxdimen, qui indique à ulem de déduire la profondeur de la police courante. Ces deux boutons en disent plus long qu’il n’y paraît : \sout n’est défini que comme un soulignement dont \ULdepth vaut -.55ex. Une profondeur négative soulève le filet au-dessus de la ligne de base, en plein milieu du mot – dans ulem, une biffure est un soulignement volontairement mal placé. \xout est plus rustique encore : il surimprime le texte de / répétés.
\usepackage[normalem]{ulem}
\renewcommand{\ULthickness}{0.8pt} % a macro, so \renewcommand
\setlength{\ULdepth}{1.8pt} % a length, so \setlength
\uline{important} \uuline{urgent} \uwave{boat}
\sout{wrong} \xout{removed}
\dashuline{dashing} \dotuline{dotty}Pourquoi \emph se met à souligner : l’option normalem
Parce qu’un simple \usepackage{ulem} redéfinit la mise en valeur, et le manuel le dit sans détour : « In LaTeX ulem replaces italics with underlining in text emphasized by \em or \emph. » Ce n’est pas un défaut mais la vocation première du package – souvenez-vous de ce qu’il devait produire. L’effet, en revanche, est qu’un document qui a paisiblement utilisé \emph pendant deux cents pages voit un filet apparaître sous chaque passage mis en valeur dès qu’on charge le package pour souligner un seul mot. L’imbrication aggrave les choses : le \emph ordinaire alterne italique et romain quand les mises en valeur s’emboîtent, tandis que la version de ulem, selon le manuel, « generates multiple underlining; it does not alternate on and off » – les filets s’additionnent.
Le remède tient en un mot d’option : \usepackage[normalem]{ulem}. La mise en valeur redevient normale et les filets n’apparaissent que là où figurent explicitement \uline et ses semblables. Le même commutateur existe sous forme de déclaration – \normalem désactive la substitution, \ULforem la rétablit –, ce qui permet de basculer en cours de document si l’on prépare vraiment un tapuscrit. En pratique : chargez ulem avec [normalem] à chaque fois, sauf si vous pouvez énoncer à voix haute la raison de ne pas le faire.
\usepackage[normalem]{ulem}
% \emph keeps its italics; a rule appears only where you ask for one
This is \emph{emphasis}, and this is \uline{underlined}.
% \ULforem brings the substitution back, \normalem switches it off againsoul : surligner avec \hl, espacer avec \so
Si vous voulez une trace de surligneur jaune, ou des lettres espacées pour la mise en valeur, le package est soul – et il y parvient par un tout autre chemin. Il confie le texte au mécanisme de césure de TeX, en récupère syllabes et caractères, puis agit dans les intervalles. C’est pourquoi il sait espacer un mot tout en laissant la ligne se couper à l’intérieur. Melchior Franz, son auteur, coupe court dans le manuel à la supposition évidente sur le nom : « the package name soul is only a combination of the two macro names \so (space out) and \ul (underline)—nothing poetic at all. » Il est aujourd’hui maintenu par l’Oberdiek Package Support Group ; depuis la version 3 il a absorbé l’ancien soulutf8, de sorte que l’entrée UTF-8 fonctionne sans rien charger de plus.
| Commande | Effet |
|---|---|
\so | Espacement des lettres |
\caps | Espacement adapté aux suites de capitales et petites capitales |
\ul | Soulignement, avec coupure en fin de ligne |
\st | Biffure (surimpression) |
\hl | Surlignage ; jaune par défaut, exige color ou xcolor |
La couleur se règle effet par effet : \setulcolor pour le soulignement, \setstcolor pour la biffure, \sethlcolor pour le surlignage, et un argument vide désactive la mise en couleur. Par défaut le surlignage est jaune et les deux filets sont noirs. Un piège mérite d’être dit clairement : \hl ne surligne que si color ou xcolor a été chargé. Sans lui, la commande se rabat sans un mot sur le soulignement, ce qui ressemble à l’écran à un surlignage qui n’apparaît pas. Définissez votre teinte avec \definecolor et passez-la à \sethlcolor.
\usepackage{color,soul}
\definecolor{lightblue}{rgb}{.90,.95,1}
\sethlcolor{lightblue}
\so{letterspacing} \ul{underlining} \st{overstriking}
\hl{this is highlighted in light blue}
\ul{Auf{}lage} % {} keeps the fl ligature from forming
\so{foo \mbox{little} bar} % \mbox, not bare braces, around hyphenable textLe prix de ce moteur caractère par caractère, c’est que l’argument n’est plus du LaTeX ordinaire. soul doit lire chaque token avant que le constructeur de paragraphes de TeX ne le voie ; quelques constructions sont donc interdites – et l’échec est bruyant : Package soul error: Reconstruction failed, avec un carré noir laissé dans la sortie à l’endroit fautif pour qu’on le repère sur la page. Les règles à retenir :
- Les formules exigent
$...$. Entre dollars, tout va bien ; la forme LaTeX\(...\)ne passe pas. - Les accolades groupent, mais ne doivent pas cacher un point de coupure.
\so{foo {little} bar}déclencheReconstruction failed, car le groupe contient un point de césure – et une espace en est un. Écrivez plutôt\so{foo \mbox{little} bar}. - Pas d’imbrication.
\ul{foo \so{bar} baz}est interdit. En cas de nécessité absolue, mettez le contenu intérieur dans une boîte, en acceptant qu’elle ne se coupera pas. - Les ligatures se cassent à la main. Dans
\ul,\stet\hl, insérez{}ou\nulllà où la ligature ne doit pas se former (\ul{Auf{}lage}). \verb, les environnements et les définitions de commandes sont exclus. Pour ce qui doit passer tel quel,\soulomit{...}sert de porte de sortie.
ulem ou soul : lequel charger
Pour les signes de correction, ulem ; pour le surlignage, soul ; si les deux sont nécessaires, chargez les deux – les noms de commandes ne se heurtent pas, puisque ulem fournit \uline et soul fournit \ul. ulem est le plus indulgent des deux : on peut à peu près tout mettre dans l’argument, et même quand la coupure est disgracieuse, elle a lieu. soul ajuste son filet aux lettres avec plus de soin et apporte \hl et \so dans le même chargement, mais son argument est, la liste ci-dessus le montre, un langage restreint. Un brouillon qui demande « biffer ceci, souligner le remplacement » passe au plus court par ulem avec [normalem] ; un brouillon qui réclame un marqueur jaune pour le relecteur n’a qu’un candidat, car ulem n’a tout simplement pas de surlignage.
Marquer suppressions et ajouts dans un brouillon
L’usage le plus défendable de \sout et \uline est un brouillon qui doit montrer ce qui a changé. N’écrivez pourtant pas les commandes de filet dans la prose. Écrivez ce que vous voulez dire et laissez une macro décider de l’impression : \deleted{...} et \added{...} derrière un commutateur coûtent trois lignes de préambule et épargnent, avant l’envoi, une traque complète. La source y gagne aussi en lisibilité, car \deleted{l’ancienne estimation} dit quelque chose que \sout{l’ancienne estimation} ne dit pas.
\usepackage[normalem]{ulem}
\newif\ifrevisions
\revisionstrue % final version: \revisionsfalse
\newcommand{\deleted}[1]{\ifrevisions\sout{#1}\fi}
\newcommand{\added}[1]{\ifrevisions\uline{#1}\else #1\fi}
% The estimate was \deleted{0.42} \added{0.51}.Deux habitudes évitent l’accident. Gardez les marques de révision et la mise en valeur dans des vocabulaires séparés – \emph pour le ton, \deleted et \added pour l’historique – afin que basculer le commutateur ne touche jamais au sens du texte. Et inscrivez « compiler une fois commutateur éteint et regarder le PDF » dans la liste de contrôle avant envoi : une biffure oubliée dans un fichier prêt à imprimer est exactement le genre de chose que personne ne voit avant l’impression.
Souligner du texte CJK, et le problème du PDF balisé
Deux limites méritent d’être connues avant de s’engager. D’abord, les deux packages ont été écrits pour l’écriture latine. ulem et soul raisonnent en mots, en points de césure et en espaces intermots, dont une suite de caractères japonais, chinois ou coréens ne fournit aucun ; une longue portion CJK soulignée se coupe donc au mauvais endroit, ou pas du tout. La communauté TeX japonaise y répond par ses propres packages, jumoline et ses commandes \Underline, \Midline et \Overline étant la recommandation habituelle – diffusé hors du CTAN et absent d’une TeX Live standard. Ensuite, le CTAN classe ulem comme soul sous le thème « tagged PDF incompatible », ce qui pèse à mesure que LaTeX s’oriente vers une sortie accessible ; et un \hl jaune parfaitement lisible à l’écran devient une bavure grise à l’impression en noir et blanc. Vérifiez ces deux points avant l’échéance plutôt qu’après.