Points d’interrogation et d’exclamation

Le point d'interrogation ? et le point d'exclamation ! comptent parmi les très rares signes dotés d'un partenaire renversé : les ¿ et ¡ espagnols. En LaTeX on les obtient par une ligature — il suffit de taper un accent grave après le signe — et, chose moins connue, cette ligature fonctionne à l'identique dans l'encodage originel de Knuth, OT1, et en T1. Le prix qu'OT1 paie pour cela : y taper < dans le texte courant donne ¡. Cette page passe en revue, mesures à l'appui, la saisie de ¿ et ¡, la raison pour laquelle < et > sortent de travers, la façon dont ? et ! élargissent l'espace qui suit, l'espace que le français place avant eux, et le fait qu'en mode mathématique ! est une factorielle (\! n'est pas du tout un point d'exclamation).

Obtenir les ¿ et ¡ espagnols : la ligature à accent grave et \textquestiondown

Un accent grave juste après ? donne ¿ ; juste après ! il donne ¡. C'est une ligature de fonte : ni package ni commande. Écrivez-le comme dans l'exemple de code ci-dessous et « ¿Como estas? » sort, l'accent grave n'apparaissant nulle part. Si l'on préfère l'explicite, \textquestiondown et \textexclamdown existent et mesurent exactement comme la ligature — en T1, 4,72107 pt pour ¿ et 2,7771 pt pour ¡. Les signes renversés eux-mêmes ont été proposés par l'Académie royale espagnole au XVIIIe siècle, afin que le lecteur sache où commence une longue question avant d'en atteindre la fin. Un signe fermant seul est donc incomplet : l'oubli du signe ouvrant relève moins de la coquille typographique que de la faute d'orthographe.

La relation entre la ligature et la commande s'inverse d'un encodage à l'autre. En OT1, ot1enc.def définit \textquestiondown comme la ligature elle-même (voir le code ci-dessous) : c'est la commande qui appelle la ligature. La ligature est le primitif, la commande un alias. En T1, c'est l'inverse : t1enc.def déclare \DeclareTextSymbol{\textquestiondown}{T1}{190} et place \textexclamdown en 189, pointant directement des positions réelles dans la fonte. Le résultat est identique ; prenez ce que vous préférez. \textquestiondown se cherche et se remplace toutefois plus facilement, et l'intention saute aux yeux à la lecture. Taper ¿ et ¡ directement dans une source UTF-8 convient aussi — le LaTeX moderne attend de l'UTF-8 et les laisse passer tels quels en T1.

latex
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
% ...
?`Como estas?  !`Que bien!
\textquestiondown Como estas?  \textexclamdown Que bien!
¿Como estas?  ¡Que bien!   % direct UTF-8 also works
latex
% ot1enc.def -- in OT1 the COMMAND is defined as the ligature
\DeclareTextCommand{\textexclamdown}{OT1}{!`}
\DeclareTextCommand{\textquestiondown}{OT1}{?`}

% t1enc.def -- in T1 they are real slots in the font
\DeclareTextSymbol{\textexclamdown}{T1}{189}
\DeclareTextSymbol{\textquestiondown}{T1}{190}

En OT1, < et > deviennent ¡ et ¿ : où logent les signes renversés

Parce que les fontes OT1 n'ont aucune glyphe pour < et >, et que ¡ et ¿ occupent ces positions de code. Compilez OT1 angle: <a> and 2<3 and x>y. sans \usepackage[T1]{fontenc}, passez le résultat à pdftotext et vous récupérez OT1 angle: ¡a¿ and 2¡3 and x¿y. — sans la moindre erreur ni le moindre avertissement. Chargez T1 dans la même source et <a> reste <a>. C'est le genre d'accident qui n'échoue jamais bruyamment : dès qu'un opérateur de comparaison ou un chevron apparaît dans le texte courant, il se change en silence en un autre caractère.

Trois remèdes, dans cet ordre de préférence. D'abord, ajouter \usepackage[T1]{fontenc} — T1 possède de vraies glyphes < et > et césure correctement les mots à lettres accentuées : tout document en langue occidentale finit de toute façon par en avoir besoin. Ensuite, écrire $<$ et $>$ en mode mathématique — sémantiquement juste pour un opérateur de comparaison. Enfin, employer \textless et \textgreater — adapté quand on veut nommer le symbole explicitement. Lu à l'envers, ce comportement est un bon indicateur : si des chevrons apparaissent dans le texte courant, voilà une raison de plus de charger T1.

L'espace après ? et ! s'élargit : comment ils sont jugés fins de phrase

? et ! portent le même facteur d'espace 3000 qu'un point et font passer l'espace suivante en espace de fin de phrase. À la mesure, wow! Next fait 47,2107 pt tandis que wow!\ Next, avec l'espace intermot explicitée, fait 46,09985 pt ; l'écart de 1,11085 pt est l'espace supplémentaire de fin de phrase. Terminer une phrase par ? ou ! donne donc exactement la largeur d'un point, sans rien faire. Revers de la médaille : la même espace apparaît quand un point d'exclamation se trouve en milieu de phrase. Après une tournure comme Wow! he said ou un nom propre comme Yahoo!, écrivez l'espace explicitement — Yahoo!\ Inc. — ou supprimez l'espace de fin de phrase avec \frenchspacing.

Le français met une espace avant ? et ! — babel en insère 1,66626 pt mesurés

L'orthographe française place une espace avant ? ! ; :, et charger babel avec [french] l'insère, que vous l'ayez tapée ou non. La quantité est écrite noir sur blanc dans french.ldf : \FBthinspace vaut \hskip .5\fontdimen2\fontla moitié d'une espace intermot, soit 1,66626 pt en 10 pt. À la mesure, Quoi fait 21,10596 pt et Quoi! 25,54932 pt, soit 4,44336 pt d'écart ; en retranchant les 2,7771 pt de largeur du ! en T1, il reste exactement 1,66626 pt. Le deux-points fait exception : \FBcolonspace vaut \space, une espace intermot entière de 3,33252 pt. À la mesure, Non fait 18,05115 pt et Non: 24,16077 pt ; largeur du : déduite, il reste précisément 3,33252 pt.

La conclusion pratique est nette. Dans un texte français, ne tapez pas vous-même l'espace qui précède le signe. babel l'insère, et cette espace est insécable, ce qui évite aussi qu'un ? isolé se retrouve en début de ligne suivante. Une espace tapée à la main double le blanc et crée en plus un point de coupure possible. À l'inverse, aucune autre langue ne met d'espace devant ? ou ! — l'anglais, l'allemand et l'espagnol les collent au mot précédent. Dans un document multilingue, le plus sûr est de confier cette différence au changement de langue de babel.

latex
\usepackage[french]{babel}
% ...
% babel adds the space itself; typing one is unnecessary
Vraiment? Voici: ceci; cela!   % prints as: Vraiment ? Voici : ceci ; cela !

En mode mathématique, ! est une factorielle — et \! n'est pas un point d'exclamation

En mode mathématique, ! n'insère aucune espace de part et d'autre. fontmath.ltx déclare \DeclareMathSymbol{!}{\mathclose}{operators}{"21}, ce qui fait de ! un symbole fermant (\mathclose) qui se colle à ce qui précède. À la mesure, $ab$ fait 9,57755 pt et $a!b$ 12,35533 pt — un écart de 2,77778 pt, exactement la largeur de la glyphe !. Pas un point mis à l'échelle d'espace, ni avant ni après. Voilà pourquoi la factorielle n! se compose serrée, et $n!!$ ajoute simplement une glyphe de plus (11,55792 pt) : la double factorielle ne demande rien de spécial. ? est déclaré \mathclose de la même façon.

Et voici le piège que tend le nom. \! n'est pas un point d'exclamation : c'est une espace fine négative. À la mesure, les 9,57755 pt de $ab$ deviennent 7,91092 pt dans $a\!b$ — cela rétrécit de 1,66663 pt. C'est l'exact opposé de \, (espace fine positive), une commande de réglage pour resserrer des symboles. Si vous voulez simplement un point d'exclamation dans une formule, tapez ! sans contre-oblique. Comme \! apparaît surtout dans des constructions du type \int\!\int pour rapprocher les signes d'intégrale, le taper en croyant écrire une factorielle produit une casse déroutante : le signe disparaît et les voisins se rapprochent.

latex
\[
  \binom{n}{k} = \frac{n!}{k!\,(n-k)!}, \qquad (2n)!! = 2^n n!
\]
% \! is a NEGATIVE thin space, not an exclamation mark:
\[ \int\!\!\int_D f(x,y)\,dx\,dy \]

L'interrobang ‽ et les !! ?? doublés : empiler les signes

!! et ?? se tapent tels quels : aucune commande, et aucune ligature ne se déclenche. Et le caractère unique signifiant « question et stupéfaction à la fois » — l'interrobang ‽ — figure, contre toute attente, dans l'appareil standard de LaTeX. C'est \textinterrobang dans l'encodage TS1, disponible dès que textcomp est chargé, déclaré à la position 148 dans ts1enc.def (l'inversé \textinterrobangdown occupe la 149). Compilez et passez le résultat à pdftotext : un vrai ‽ en ressort. Il mesure 4,72107 pt, comme un ?.

L'interrobang a été imaginé en 1962 par Martin K. Speckter, à la tête d'une agence de publicité américaine ; il est né du souhait d'un rédacteur d'écrire « une question posée avec stupéfaction » en un seul caractère, et il a même été gravé en plomb et fabriqué en boule de machine à écrire. Il ne s'est jamais imposé comme ponctuation ordinaire, mais il survit dans Unicode en U+203D et dans LaTeX via TS1. Honnêtement, l'occasion de s'en servir ne se présente presque jamais — pas plus que celle d'empiler !! ou ?? dans un texte académique, où le conseil est de renforcer la phrase plutôt que le signe. Il reste bon de savoir qu'une commande dédiée attend le jour où l'on en aura besoin.

Table de saisie : ce qu'on tape, ce qui sort

SaisieSortieRemarques
??point d'interrogation occidental ; sfcode 3000, l'espace suivante devient une espace de fin de phrase
?`¿ligature ; fonctionne en OT1 comme en T1, l'accent grave n'est pas imprimé
!`¡ligature ; sortie identique à \textexclamdown
\textquestiondown¿commande explicite ; en T1, une vraie glyphe à la position 190
\textexclamdown¡commande explicite ; en T1, une vraie glyphe à la position 189
\textinterrobangnécessite textcomp (TS1) ; position 148
$n!$n!factorielle ; ! est \mathclose, aucune espace de part et d'autre
\!(espace négative)pas un point d'exclamation ; commande de réglage resserrant de 1,66663 pt en formule
? !? !signes japonais pleine chasse ; ne pas taper d'espace pleine chasse après

Les ? et ! japonais sont pleine chasse : ne rien taper après

Le japonais emploie les ? et ! pleine chasse, et l'on ne tape aucune espace pleine chasse après eux. Les moteurs compatibles — upLaTeX, ou LuaLaTeX avec luatexja — les traitent comme des signes de ponctuation et réservent automatiquement le blanc qui suit. Les « Requirements for Japanese Text Layout (JLReq) » du W3C précisent de même qu'un point d'interrogation ou d'exclamation de fin de phrase occupe un cadratin et est suivi d'un cadratin de blanc — sauf lorsqu'une parenthèse fermante suit immédiatement, auquel cas la composition est jointive. Ajouter soi-même une espace pleine chasse la superpose à l'automatique et double le blanc. La gestion du blanc résiduel quand un ? tombe en fin de ligne est également prise en charge par la plupart des classes et packages. Laisser le blanc de ponctuation au moteur : telle est la règle du côté japonais.

latex
\documentclass{ltjsarticle}
\begin{document}
本当ですか? はい、できました! 次に進みましょう。
\end{document}
  • Dans un manuscrit à dominante japonaise, uniformiser sur et pleine chasse. Un ? ou ! demi-chasse égaré change le comportement en fin de ligne et l'espacement, à ton de phrase identique.
  • Laisser en demi-chasse citations occidentales, code et noms propres. Les signes cités d'une source se traitent séparément de la politique du corps japonais.
  • En espagnol, vérifier les signes ouvrants. N'écrire que le ? ou le ! fermant en oubliant ¿ ou ¡ est une faute de langue, pas d'esthétique.
  • En français, ne jamais insérer l'espace à la main. Laissez faire babel avec [french] et érigez en règle d'équipe « aucune espace tapée avant le signe ».
  • Sur un document resté en OT1, suspecter les chevrons. Un < ou > dans le texte courant devient silencieusement ¡ ou ¿ : vérifiez d'abord la présence de \usepackage[T1]{fontenc}.