Ponctuation et parenthèses

Pour LaTeX, un point n'est pas une instruction d'imprimer un point : c'est une instruction qui change la largeur de l'espace suivante. L'espace de Dr. Smith mesure 3,33252 pt, celle de ends here. Next 4,44336 pt — le même . au clavier, 1,11084 pt d'écart dans un document en 10 pt. Et l'indice décisif est le caractère qui précède le point : une minuscule signifie fin de phrase, une majuscule signifie abréviation. Cette seule règle explique l'espace étirée après NASA. Next, le blanc bizarre de Fig. 1 et la gêne ressentie après e.g.. Cette page traite du mécanisme (\sfcode), des correctifs (\@, \ , ~, \frenchspacing), de la différence entre \ldots et \dots, du séparateur de milliers \, et du choix des virgules, points et parenthèses japonais.

Pourquoi l'espace après un point s'élargit : le mécanisme \sfcode

Parce que chaque caractère porte un facteur d'espace, et que dès que la valeur laissée par le caractère précédent dépasse 2000, TeX ajoute à l'espace suivante \fontdimen7, l'« espace supplémentaire » de la fonte. Mesuré dans un article en 10 pt : l'espace intermot ordinaire \fontdimen2 vaut 3,33252 pt, l'espace supplémentaire 1,11084 pt, soit 4,44336 pt au total — une espace de fin de phrase fait exactement 1,33 fois une espace intermot. On inspecte les valeurs en faisant suivre \the\sfcode d'un caractère ; un point annonce 3000. Ce 3000 est le point de départ de tout le reste.

Caractèresfcode par défautEffet sur l'espace suivante
. ? !3000espace de fin de phrase ; +1,11084 pt en 10 pt
:2000espace un peu plus large ; juste au seuil
;1500seuls l'étirement et la compression changent un peu
,1250idem ; n'est jamais compté comme fin de phrase
)0transparent ; laisse passer la valeur du caractère précédent
A B C999inférieur à 1000, ce qui annule le 3000 d'un . suivant

Dr. Smith serré, ends here. Next large : pourquoi les capitales ont un sfcode de 999

Parce que le sfcode d'une capitale vaut 999, juste en dessous de 1000. La règle de TeX est la suivante : quand le facteur d'espace courant est inférieur à 1000, un caractère suivant dont le facteur dépasse 1000 ne le relève que jusqu'à 1000. Après un A, un . (3000) laisse donc en réalité un facteur de 1000, et l'espace de fin de phrase n'apparaît pas. Un a minuscule, lui, vaut exactement 1000 : le 3000 du . suivant passe tel quel. À la mesure : A. a fait 18,60657 pt, et A.\ a — avec l'espace explicitée — fait exactement les mêmes 18,60657 pt. En revanche a. a fait 17,21802 pt et tombe à 16,10718 pt sous \frenchspacing. Ces 1,11084 pt d'écart sont précisément l'espace supplémentaire de fin de phrase.

Cette conception ne fait qu'inscrire l'usage typographique anglais de l'époque où TeX a été écrit : les phrases étaient séparées plus largement que les mots. Pour éviter que les points d'abréviation — Dr., Ph.D., Mr. — ne passent pour des fins de phrase, TeX a adopté une heuristique d'une ligne : « si cela finit par une majuscule, c'est une abréviation ». Étant une heuristique, elle se trompe dans les deux sens. NASA. Next est bien une fin de phrase mais est composé serré, et Fig. 1 est bien une abréviation mais est composé large. Les deux sections suivantes corrigent chacun des cas.

\@ pour dire « ici finit vraiment une phrase » : NASA\@. Next

\@ signifie « traite la ponctuation qui suit comme une fin de phrase », et il se place avant le point. Écrivez He joined NASA\@. Then he left. : le 999 laissé par la capitale A est annulé et le 3000 du . passe. À la mesure, A. a fait 18,60657 pt tandis que A\@. a fait 19,7174 pt — un écart de 1,11083 pt, exactement l'espace supplémentaire de fin de phrase. Placé du mauvais côté, NASA.\@ Next ne fait rien. Retenez : \@ se met devant le point. C'est un outil pour quelques occasions par an : seulement quand une phrase s'achève sur un sigle (NASA, USA, DNA) ou un nom qui finit par une capitale.

Après une abréviation, \ ou ~ : e.g. et Fig.~1

Le raté inverse — une abréviation finissant par une minuscule prise pour une fin de phrase — se corrige en écrivant l'espace sous forme de commande. \ (contre-oblique puis espace) signifie « place ici une espace intermot ordinaire » et ignore totalement le facteur d'espace. À la mesure, Fig. 1 fait 26,5213 pt et Fig.\ 1 25,41046 pt : 1,11084 pt de moins, soit l'espace intermot correcte. e.g., i.e., etc., cf., vs., Fig., Eq. et No. tombent tous dans ce piège.

Pour les numéros de renvoi comme Fig. 1, en revanche, ~ (tilde) vaut mieux que \ . Un ~ est « une espace de la largeur d'une espace intermot, où aucune coupure de ligne n'est permise » ; à la mesure, Fig.~1 fait les mêmes 25,41046 pt que Fig.\ 1. Même largeur, plus l'interdiction de couper. Comme un numéro de figure, un numéro d'équation ou une initiale séparés par un saut de ligne se lisent mal, l'usage est d'écrire Fig.~\ref{fig:one}, Eq.~\eqref{eq:main}, D.~E.~Knuth. Retenez : ~ pour les numéros de renvoi, \ pour les autres abréviations.

latex
% a sentence really ending on a capital
He joined NASA\@. Then he left.

% abbreviations that must NOT get a sentence space
See, e.g.\ Knuth (1984); cf.\ the appendix.

% reference numbers: same width, but unbreakable
Fig.~\ref{fig:one} and Eq.~\eqref{eq:main}, after D.~E.~Knuth.

\frenchspacing : la ligne dont presque tout document non anglais a besoin

\frenchspacing est une déclaration qui désactive en bloc l'espace supplémentaire de fin de phrase ; une ligne dans le préambule suffit. Son intérieur est d'une simplicité déconcertante : la définition dans latex.ltx met six valeurs de sfcode à 1000, si bien que ., ?, !, :, ; et , sont traités comme des caractères ordinaires (le \nonfrenchspacing par défaut rétablit 3000/3000/3000/2000/1500/1250). À la mesure, a. a passe de 17,21802 pt à 16,10718 pt tandis que A. a reste à 18,60657 pt — les endroits qui n'avaient jamais reçu l'espace supplémentaire ne bougent pas.

Malgré son nom, cet espacement resserré n'est pas une particularité française. Le français, l'allemand, l'espagnol, l'italien et la plupart des langues autres que l'anglais ne mettent pas plus d'espace entre les phrases qu'entre les mots. La composition anglaise moderne elle-même s'est largement rangée à l'espace simple. Passer une langue à babel bascule souvent le réglage, mais déclarer soi-même \frenchspacing reste la voie sûre. LaTeX l'emploie d'ailleurs à l'intérieur de l'environnement verbatim : dans du code, on ne veut pas d'espace étirée après un .. Garder ou non l'espace large de fin de phrase est une décision à prendre d'emblée avec les coauteurs ; la changer en cours de route étale un diff sur toutes les pages.

latex
\documentclass{article}
\usepackage[T1]{fontenc}
\frenchspacing          % . ? ! : ; , all behave like ordinary letters
\begin{document}
This ends here. Next sentence starts with an ordinary space.
\end{document}

Les points de suspension s'écrivent \ldots, pas ... — et la différence avec \dots

Trois points tapés, ..., mesurent 8,3313 pt ; \ldots mesure 13,33008 pt — 1,6 fois plus. Dans ..., les points s'agglutinent et ne se lisent plus comme une omission, alors que \ldots ménage entre eux l'espace correcte. Employez donc toujours \ldots ou \dots pour des points de suspension dans le texte courant. Quelle est alors la différence entre les deux ? En LaTeX nu, aucune. latex.ltx définit \dots puis écrit \let\ldots\dots : c'est littéralement la même commande ; à la mesure, les deux font 13,33008 pt en mode texte, comme \textellipsis.

La différence n'apparaît que si amsmath est chargé, et seulement en mode mathématique. amsmath redéclare les deux : \ldots devient définitivement les points bas, tandis que \dots devient une commande qui regarde ce qui suit et choisit la hauteur des points selon le contexte. Dans une suite de virgules, il prend les points bas (\dotsc) ; entre opérateurs binaires ou relations, les points centrés (\dotsb, c'est-à-dire \cdots) ; avec des intégrales \dotsi, avec une multiplication \dotsm. Compilez et extrayez avec pdftotext : $a+\dots+b$ ressort en « a + · · · + b » et $a+\ldots+b$ en « a + . . . + b » — de véritables caractères différents. En mode texte, les deux retombent sur \textellipsis : rien à trancher dans la prose.

CommandeSortieQuand l'employer
\ldots… (sur la ligne de base)omission dans le texte ; en formule, toujours les points bas
\dotsdépend du contextesous amsmath, la hauteur est choisie selon le contexte ; défaut en formule
\cdots⋯ (centrés)entre opérateurs, comme dans a+\cdots+b
\vdots⋮ (verticaux)omission de lignes dans une matrice ou un système
\ddots⋱ (diagonaux)omission le long de la diagonale d'une matrice
latex
\usepackage{amsmath}
% ...
He hesitated\ldots{} then went on.
\[
  x_1, x_2, \dots, x_n \qquad a_1 + a_2 + \dots + a_n
\]
\[
  \begin{pmatrix} a & \cdots & b \\ \vdots & \ddots & \vdots \end{pmatrix}
\]

Séparer les chiffres avec \, : « 1 000 » en 1,6663 pt

\, insère une espace fine et mesure 1,6663 pt, soit un sixième de cadratin. Mesurez 1\,000 : 21,66142 pt contre 19,99512 pt pour 1000, un écart d'exactement 1,6663 pt. Comme la convention virgule/point pour grouper les chiffres est inversée d'un pays à l'autre (1,000 anglais = 1.000 allemand), l'usage international recommande depuis longtemps de séparer les groupes par une espace fine. \, est précisément cette espace. La même commande se place devant une unité : 5\,\mathrm{kg}.

Éparpiller des \, à la main cesse toutefois d'être rentable quand le nombre de chiffres augmente. Dans un manuscrit rempli de nombres et d'unités, confiez la tâche à siunitx et écrivez \num{1000000} ou \qty{5}{\kilogram} : le groupement, l'espace avant l'unité et jusqu'au traitement du signe moins restent alors cohérents. Voyez \, comme l'outil pour le nombre isolé qui apparaît dans une phrase.

Japonais : 、。 ou ,.? Il n'existe pas d'option de classe dans jsclasses

Ce qui s'imprime dépend de ce que l'on tape dans la source ; aucune option de classe ne bascule cela. jsclasses — jsarticle, jsbook et les autres — n'a pas d'option qui change la ponctuation en ,.. Pour la virgule et le point pleine chasse, le plus direct est de saisir ,. dans le corps du texte. Cet usage descend de JIS Z 8301, la norme régissant la présentation des documents normatifs japonais, qui employait ,et .en écriture horizontale ; il reste répandu dans les ouvrages de mathématiques et les articles de sciences et d'ingénierie. À l'inverse, l'avis du Conseil des affaires culturelles de 2022 sur la rédaction des documents officiels a retenu la virgule japonaise 「、」 par défaut, ,restant admise en écriture horizontale selon les circonstances. Suivre les règles de soumission et l'usage du domaine, et rester cohérent dans un même document — la décision tient tout entière là.

latex
% comma-period style: just type the marks you want
\documentclass{ltjsarticle}
\begin{document}
本稿では,記法を次のように定める.まず,集合 $A$ を……
\end{document}

Parenthèses japonaises 「」『』() : laquelle pour quoi

Dialogue, citation et mise en relief d'une expression prennent les crochets d'angle 「」 ; les titres d'ouvrages et d'œuvres, ainsi que toute citation imbriquée dans 「」, prennent les doubles crochets d'angle 『』. Les incises et les lectures prennent les parenthèses pleine chasse (). En japonais, employez les parenthèses pleine chasse et n'y mêlez pas les () occidentales demi-chasse : celles-ci portent des blancs différents et une seule suffit à faire flotter le texte dans la ligne. Inversement, à l'intérieur d'une citation occidentale (latine), utilisez ( ) demi-chasse.

ParenthèseNomUsage courant
「 」kagi-kakko, crochets d'angledialogue, citation, mise en relief ; guillemets japonais primaires
『 』doubles crochets d'angletitres d'œuvres et imbrication dans 「」
( )parenthèses pleine chasseincises, notes, lectures
[ ]crochets pleine chasseajouts éditoriaux et élisions signalées
【 】crochets lenticulairestitres et étiquettes fortement mis en avant
〔 〕crochets en écaillenotes et incises ; variante des crochets

La manière dont la ponctuation japonaise obtient réellement ses blancs — les chasses inscrites dans le JFM, le crénage appliqué quand des parenthèses fermantes se suivent, \inhibitxspcode, le \xkanjiskip inséré automatiquement entre japonais et latin, les interdits de début et de fin de ligne avec leurs pénalités — est traitée sur la page consacrée aux détails de la composition japonaise. Le point pratique à retenir ici est simple : ne tapez pas vos propres espaces autour de la ponctuation. Elles s'ajouteraient à celles que le moteur prévoit déjà et ouvriraient un blanc anormal.

Fouiller la source avant de rendre : éliminer la dérive de ponctuation d'un coup

La dérive de ponctuation ne provoque jamais d'erreur de compilation ; elle n'apparaît que comme une gêne dans le PDF. Le geste sûr est donc un balayage mécanique de la source à la fin. En écriture collaborative, il est certain qu'un chapitre a été écrit en supposant \frenchspacing, qu'un autre laisse une espace nue après e.g. et qu'un troisième mêle des parenthèses demi-chasse au japonais. Passez ces quatre points au grep.

  • Espaces nues après abréviation. Cherchez l'espace qui suit e.g., i.e., cf., etc., Fig. et remplacez-la par \ ou ~ (inutile si vous utilisez \frenchspacing).
  • Phrases finissant par une capitale. Cherchez sigle plus . (NASA., USA., DNA.) et insérez \@ partout où c'est vraiment une fin de phrase.
  • Points de suspension. Cherchez trois points consécutifs ... et remplacez par \ldots ; dans les formules, laissez faire \dots d'amsmath.
  • Parenthèses demi-chasse en japonais. Cherchez ( et ) au milieu de lignes japonaises et passez-les en ( ) pleine chasse. Profitez-en pour vérifier qu'aucune espace n'a été tapée à la main autour d'un signe de ponctuation.
terminal
# abbreviation followed by a bare space
grep -nE "(e\.g\.|i\.e\.|cf\.|etc\.|Fig\.) " *.tex

# a sentence that may end on an acronym
grep -nE "[A-Z]{2,}\." *.tex

# three typed periods instead of \ldots
grep -n "\.\.\." *.tex