Guillemets et tirets

Le tiret cadratin — porte en anglais le nom d'em dash parce qu'il mesure exactement un cadratin, c'est-à-dire la largeur du corps de la police. Demandez à LaTeX de le mesurer dans un document en 10 pt : il annonce 9,99756 pt, pas un point mis à l'échelle d'écart avec \quad. Le trait d'union -, le tiret demi-cadratin --, le tiret cadratin --- et le moins mathématique $-$ sont quatre caractères distincts qui se ressemblent seulement ; ils diffèrent par la largeur et jusqu'à la fonte dont ils proviennent. Cette page mesure les quatre côte à côte et tranche : quand taper --, quand taper ---, quand il faut passer en mode mathématique. (Les guillemets eux-mêmes relèvent de la page sur les citations.)

-, --, --- et $-$ sont quatre caractères différents : les largeurs mesurées

Les quatre sont des glyphes distincts, et ils mesurent 3,33252 pt, 4,99878 pt, 7,7778 pt et 9,99756 pt. Ces valeurs proviennent d'un article en 10 pt avec l'encodage T1, chacune mesurée par \sbox0{-}\typeout{\the\wd0}. La surprise tient à l'ordre. Trait d'union plus court que le demi-cadratin, demi-cadratin plus court que le cadratin : rien que de très attendu ; mais le moins mathématique se place entre le demi-cadratin et le cadratin. Un moins n'est pas un petit trait : c'est un signe assez long, conçu pour faire équilibre à = et + dans une formule.

SaisieNomLargeur (10 pt, T1)Caractère dans le PDF
-trait d'union3,33252 pt (1/3 cadratin)U+002D
--tiret demi-cadratin4,99878 pt (1/2 cadratin)U+2013
$-$signe moins (mathématiques)7,7778 ptU+2212
---tiret cadratin9,99756 pt (1 cadratin = \quad)U+2014

On explique souvent les noms « en » et « em » par les largeurs des lettres N et M, mais ce n'est pas la définition moderne. Mesurez M dans la même fonte en 10 pt : 9,16443 pt ; N donne 7,49817 pt. Le tiret cadratin (9,99756 pt) est plus large qu'un M, et le demi-cadratin (4,99878 pt) bien plus étroit qu'un N. Un cadratin n'est pas une largeur de lettre : c'est la largeur du corps du caractère, donc la taille de la police elle-même, et un demi-cadratin en fait la moitié. Du plomb, seuls les noms ont survécu. Quant au moins mathématique, il n'appartient pas à la fonte de texte. Comme le déclare fontmath.ltx avec \DeclareMathSymbol{-}{\mathbin}{symbols}{"00}, le moins provient de la position 0 de la fonte des symboles mathématiques — cmsy en Computer Modern. Le « moins » que l'on tape -3 dans le texte courant est donc, dès le dessin, un autre caractère.

latex
% measure them yourself: put this in the preamble-less body
\sbox0{-}\typeout{hyphen  = \the\wd0}
\sbox0{--}\typeout{en dash = \the\wd0}
\sbox0{$-$}\typeout{minus   = \the\wd0}
\sbox0{---}\typeout{em dash = \the\wd0}
\sbox0{\quad}\typeout{one em  = \the\wd0}

Lequel choisir : -- pour les intervalles, --- pour les incises, - pour les composés

La règle : demi-cadratin -- pour les intervalles et les couples, cadratin --- pour une incise qui interrompt la phrase, simple trait d'union - pour souder des mots. pages 5--10, 1939--1945 et the Einstein--Podolsky--Rosen paradox signifient tous « de A à B » ou « A associé à B » : demi-cadratin. Les composés comme well-known ou state-of-the-art gardent en revanche le trait d'union ; ne les « corrigez » jamais en --. Un remplacement global de - par -- détruit tous les composés du manuscrit : restreignez toujours le motif, par exemple à chiffre-chiffre.

L'espacement du tiret cadratin est inverse d'une langue à l'autre. L'anglais américain (style Chicago) le colle sans aucune espace : a break---an aside---fits here. Beaucoup d'éditeurs britanniques, ainsi que l'allemand (le Gedankenstrich) et le français (le tiret), font le contraire et emploient un demi-cadratin entouré d'espaces : ein Einschub -- so wie hier --. « --- collé » ou « -- espacé » n'est donc pas une affaire de goût mais l'usage typographique de la langue. Choisissez-en un pour le document et tenez-vous-y ; un manuscrit qui mêle les deux a l'air d'une traduction inachevée. Le moins mathématique est l'exception qui ne relève d'aucune langue : c'est toujours $-$, en mode mathématique.

latex
See pages 5--10 and the 1939--1945 volumes.
A break---an aside---fits here in US English.
Ein Einschub -- so wie hier -- steht mit Spatien.
The value is $-3$, and $a - b$ uses the same minus.

\textendash et \textemdash : quand la forme commande s'impose

La sortie est identique. \textendash mesure 4,99878 pt et \textemdash 9,99756 pt — pas un point mis à l'échelle d'écart avec ce que produisent -- et ---. Pourquoi alors ces commandes ? Parce que -- et --- sont réalisés comme des ligatures de fonte. En T1, les tirets sont de vrais caractères aux positions 21 et 22 (t1enc.def), et les commandes vont les chercher directement, sans passer par le mécanisme des ligatures. Là où les ligatures sont désactivées, ou lorsqu'un tiret est passé en argument à une macro, la forme commande est la plus sûre.

Là où le mécanisme des ligatures mord, c'est \texttt. La fonte machine à écrire T1 (par défaut sftt1000 de cm-super dans TeX Live 2024) possède une ligature --, si bien que \texttt{5--10} sort silencieusement en 5–10, avec un demi-cadratin. Pire, \texttt{a---b} donne a–-b, un demi-cadratin suivi d'un trait d'union, car la fonte machine à écrire n'a pas de ligature de cadratin. Sous OT1, cmtt10 ignore ces ligatures et la saisie survit ; mais du code dont la sortie change quand on change d'encodage est un piège. Composez noms de fichiers, lignes de commande et noms d'options avec \verb, pas avec \texttt, ou brisez la ligature par un groupe vide : \texttt{5-{}-10}. L'environnement verbatim et \verb impriment 5--10 littéralement, même en T1.

latex
% T1: this silently becomes an en dash
\texttt{ls --color}          % prints: ls –color
% either break the ligature ...
\texttt{ls -{}-color}
% ... or use verbatim, which never applies ligatures
\verb|ls --color|

La ligne se coupe après un tiret : \exhyphenpenalty et comment l'empêcher

TeX estime licite de couper une ligne juste après un trait d'union ou un tiret explicite. La pénalité appliquée est \exhyphenpenalty, dont la valeur par défaut est 50 (à vérifier avec \the\exhyphenpenalty). Comme \hyphenpenalty, la pénalité de coupure à l'intérieur d'un mot césuré, vaut également 50, les coupures au milieu de 5--10 ou de well-known sont courantes. Un intervalle dont le 10 a basculé en début de ligne suivante oblige le lecteur à réfléchir une seconde. Le remède le plus simple est la boîte : \mbox{5--10}. Avec amsmath chargé, \nobreakdash- interdit la coupure après ce seul tiret.

latex
\usepackage{amsmath}   % provides \nobreakdash
% ...
See pages \mbox{5--10} for the proof.
The X\nobreakdash-ray results are attached.

\slash et \- : indiquer à TeX où la coupure est permise

\slash imprime le même glyphe que / et autorise en plus une coupure juste après. Sa définition dans latex.ltx tient en une ligne — \def\slash{/\penalty\exhyphenpenalty} — une barre oblique portant la même pénalité qu'un tiret. À la mesure, a\slash b et a/b font tous deux 15,55176 pt : la largeur ne change pas. Quand un couple long comme input\slash output déborde en fin de ligne, une / brute ne laisse à TeX aucun point de coupure et l'on obtient un avertissement Overfull \hbox. \slash ménage un pli à cet endroit précis.

L'autre outil est le tiret conditionnel \- : une marque signifiant « si l'on coupe ici, imprime un trait d'union », et qui ne produit rien en l'absence de coupure. En placer un dans un nom propre ou un composé que les motifs de césure de TeX ne savent pas découper résout souvent un Overfull \hbox d'un coup. Un effet de bord existe. À la mesure, man\-uscript fait 48,96027 pt contre 48,68256 pt pour manuscript seul — 0,27771 pt de plus, car le crénage à cet endroit est annulé. N'éparpillez donc pas les \- dans un mot : un seul, dans le mot qui en a besoin. Pour l'enregistrement de césures avec \hyphenation et le réglage des coupures en général, voyez la page sur l'ajustement des sauts de ligne.

latex
The input\slash output layer is documented separately.
This manu\-script uses a discretionary hyphen once.

Distinguer les quatre dans le PDF : vérifier avec pdftotext

Plutôt que de comparer les formes à l'œil, il est plus sûr d'extraire le texte du PDF et de vérifier les points de code. pdftotext file.pdf - envoie le corps du texte sur la sortie standard, où les quatre traits apparaissent comme quatre caractères Unicode distincts : - (U+002D), (U+2013), (U+2014) et (U+2212). Passez une ligne contenant - -- --- $-$ dans pdftotext et vous récupérez exactement - – — −. Un grep sur cette sortie repère ensuite mécaniquement tous les intervalles encore composés avec un simple trait d'union et tout signe moins égaré dans le texte courant. C'est plus rapide que la lecture de la source, et le résultat se transmet à un relecteur.

terminal
# ranges still set with a plain hyphen
pdftotext paper.pdf - | grep -nE "[0-9]-[0-9]"

# a minus sign that leaked into running text
pdftotext paper.pdf - | grep -n "−"
  • Passer les intervalles en revue. Cherchez chiffre-chiffre dans la source (années, pages, numéros de figures) et convertissez les vrais intervalles en --. Laissez les composés comme well-known tranquilles.
  • Passer les moins en revue. Dans le texte courant, -3 et -0.5 deviennent $-3$ et $-0.5$ s'il s'agit de nombres. Dans le PDF, vérifiez qu'aucun ne subsiste en U+002D.
  • Regarder dans \texttt. En T1, \texttt{--} devient un demi-cadratin. Remplacez lignes de commande et noms de fichiers par \verb.
  • Fixer l'espacement. --- collé ou -- espacé : choisissez selon la langue du document et ne laissez aucun mélange.

Le sujet frère, les guillemets — la convention des deux accents graves qui produit “ ”, pourquoi taper " tourne mal, \enquote de csquotes, et les „ “ et « » propres à chaque langue —, est traité intégralement sur la page des citations. Nettoyer un texte collé revient presque toujours à examiner guillemets et tirets en même temps : gardez les deux pages côte à côte.