Indices et espacements

Tout l'espacement mathématique de LaTeX découle de trois nombres. Ils occupent les trois dernières lignes de fontmath.ltx : \thinmuskip=3mu, \medmuskip=4mu plus 2mu minus 4mu, \thickmuskip=5mu plus 5mu. Fine, moyenne et forte — 3, 4 et 5 — règlent aussi bien les blancs autour du + de a+b que ceux autour du = de a=b. Et l'espace moyenne peut se réduire de 4 mu entiers, c'est-à-dire disparaître complètement, ce que peu d'ouvrages prennent la peine de signaler. Cette page expose les règles de l'exposant ^ et de l'indice _, puis les largeurs mesurées de \,, \:, \;, \!, \quad et \qquad. Que vous cherchiez à régler l'espacement d'une formule ou que vous poursuiviez une erreur ! Double superscript, la réponse est ici.

^ et _ ne portent que sur un seul token

En mode mathématique, ^ produit un exposant et _ un indice, mais chacun ne porte que sur un seul token suivant — un caractère, ou une commande. Pour élever ou abaisser davantage, il faut grouper avec des accolades { }. Le désagrément : les oublier n'est pas une erreur. x^{10} fait de tout le « 10 » un exposant, tandis que x^10 sans accolades n'élève que le « 1 » et laisse le « 0 » à taille pleine sur la ligne de base. Cela compile sans un mot : c'est le genre de faute qu'on découvre à l'impression. Que la main en prenne l'habitude : des accolades autour de tout indice de plus d'un caractère.

latex
$x^{10}$    % the whole 10 is the exponent
$x^10$      % only the 1 is raised; the 0 stays full size
$a_{ij}$    % ij together as one subscript
$2^{n+1}$   % n+1 as one exponent
$x_i^2$     % both scripts; the order does not matter

Un même symbole peut porter un exposant et un indice à la fois. Écrivez x_i^2 ou x^2_i : LaTeX les empile de la même façon. Les indices s'imbriquent aussi, mais chaque niveau exige ses propres accolades : dans x^{y^z}, z est l'exposant de y et l'ensemble y^z l'exposant de x. Sans accolades, x^y^z déclenche l'erreur de la section suivante. Notez que sur les grands opérateurs comme \sum et \lim, ^ et _ peuvent passer juste au-dessus et juste au-dessous du symbole, et que \limits / \nolimits imposent la position ; ce comportement appartient à l'opérateur et relève de la page sur les sommes, intégrales et grands opérateurs.

! Double superscript. et ! Double subscript.

C'est l'erreur obtenue lorsqu'on met deux fois un exposant sur la même base. Compilez $x^y^z$ et pdfLaTeX de TeX Live 2024 s'arrête sur ! Double superscript. ; côté indices, $x_i_j$ donne ! Double subscript. Les deux signifient « cette base a déjà un indice ». Le remède : écrire l'imbrication voulue, avec des accolades. x^{y^z} fait de z l'exposant de y, tandis que {x^y}^z élève tout x^y à la puissance z. Ces deux écritures diffèrent mathématiquement : poser une accolade là où elle fait taire l'erreur change ce que dit la formule.

Le prime de dérivée f'(x) — et pourquoi f^' est fautif

Il suffit de taper l'apostrophe '. Elle est déjà un exposant : n'ajoutez donc jamais votre propre ^. Dans latex.ltx, le ' est rendu actif en mode mathématique et se développe en ^\bgroup\prim@s ; à la mesure, f'(x) et f^{\prime}(x) font tous deux 22,27089 pt, à l'identique. Deux primes s'écrivent f''(x), trois f'''(x). Curiosité : le mécanisme avale un ^ qui suit. f'^2 ne provoque aucune erreur et se compose à 12,76395 pt, exactement comme f^{\prime2}. Si vous vouliez dire « prime, puis au carré », vérifiez que le résultat dit bien cela.

Des indices à gauche : {}^{A}_{Z}X et \sideset

Pour placer un exposant ou un indice à gauche d'un symbole — la notation des isotopes, par exemple —, servez-vous d'une paire d'accolades vides {} comme base. {}^{14}_{6}\mathrm{C} pose {} comme un symbole ordinaire de largeur nulle, y accroche les indices, puis compose le C. Sans ce {}, les indices s'accrochent à ce qui précède : écrit = ^{14}_{6}C, ils pendent au =, et si ce qui précède porte déjà un indice, on récolte ! Double superscript. Pour répartir des indices des deux côtés d'un grand opérateur, amsmath propose \sideset{_a^b}{_c^d}\sum — mais c'est un outil de l'opérateur : voir la page des sommes et intégrales. Le \prescript de mathtools répond au même besoin autrement.

latex
\[
  {}^{14}_{6}\mathrm{C}, \qquad {}^{t}\!A, \qquad
  x^{y^z} \ne {x^y}^z, \qquad f''(x)
\]

L'unité mu : un dix-huitième de cadratin, et elle rétrécit dans les indices

Un mu vaut 1/18 de cadratin : 18 mu font donc exactement un cadratin. Le cadratin est ici lié à la taille de la fonte des symboles mathématiques, si bien qu'une espace exprimée en mu suit le corps du texte. Dans un article en 10 pt, l'écart de largeur entre a\,b et ab mesure 1,66662 pt — soit 3 mu = 1/6 de cadratin = 1,6667 pt. Placez la même \, dans un exposant, comme dans x^{a\,b}, et elle mesure 1,36574 pt ; un niveau plus bas, elle tombe à 1,22685 pt. Dans un document en 12 pt, elle passe à 1,99997 pt. L'espace suit donc bel et bien les lettres qui l'entourent.

Mais \quad et \qquad n'appartiennent pas à cette famille. latex.ltx les définit par \def\quad{\hskip1em\relax} et deux cadratins pour \qquad : l'unité n'est pas le mu mais un cadratin de la fonte du texte. Ils ne rétrécissent donc pas dans un indice : à la mesure, x^{a\quad b} dépasse un simple x^{ab} de 10,00002 pt, soit un cadratin de corps plein. Et dans un document en 12 pt, \quad mesure 11,74988 pt tandis que 18 mu font exactement 12 pt : \quad et 18 mu ne sont donc pas de même longueur. La répartition sûre se fait par rôle : les commandes en mu (\,, \:, \;, \!) pour l'ajustement fin, celles en cadratin (\quad, \qquad) pour les grandes séparations.

CommandeQuantité définieMesuré dans un article 10 pt
\,\thinmuskip = 3 mu (alias \thinspace)1,66662 pt ; le réglage le plus employé
\:\medmuskip = 4 mu plus 2 minus 4 (\medspace, \>)2,22216 pt ; élastique, elle peut disparaître
\;\thickmuskip = 5 mu plus 5 (\thickspace)2,77771 pt ; peut doubler à l'étirement
\!−3 mu (identique à \negthinspace)−1,66663 pt ; l'inverse exact de \,
\negmedspace−4 mu ; amsmath inutile (c'est dans latex.ltx)−2,22217 pt
\negthickspace−5 mu ; également dans le noyau LaTeX−2,77771 pt
\quad\hskip1em ; un cadratin de la fonte du texte, pas un mu10,00002 pt ; ne rétrécit pas dans les indices
\qquad\hskip2em ; le double d'un \quad20,00003 pt
(backslash-space)l'espace de contrôle ; comme entre deux mots3,33332 pt
\enspaceun demi-cadratin fixe5 pt

Si \, fonctionne aussi bien dans le texte courant qu'en mathématiques, c'est que \tmspace, dans latex.ltx, se branche sur \ifmmode : en mode mathématique il émet \mskip\thinmuskip (3 mu), en texte un \kern .16667em fixe. Une commande, deux systèmes d'unités. Dans le même fichier, \let\>=\: consigne que \> est un alias de \:. Quant à \negmedspace et \negthickspace du tableau, on les attribue souvent à amsmath, mais tous deux figurent dans le noyau LaTeX de TeX Live 2024 et fonctionnent, vérification faite, sans \usepackage{amsmath}.

Pourquoi les indices rétrécissent : \displaystyle et les quatre styles mathématiques

TeX compose chaque formule dans l'un de quatre styles, et le style fixe à la fois la taille des caractères et la valeur réelle d'un mu. Du plus grand au plus petit : \displaystyle (formules hors texte), \textstyle (en ligne), \scriptstyle (indice), \scriptscriptstyle (indice d'indice). En mesurant la hauteur de X dans un texte à 10pt, on obtient 6,83331pt pour display et pour text — les deux sont identiques —, puis 4,78334pt pour script et 3,41667pt pour scriptscript. La réduction n'intervient que dans les deux passages vers les indices, et elle s'arrête là : il n'existe pas de cinquième style plus petit. C'est là le mécanisme derrière le rétrécissement du mu décrit plus haut. Ce qui sert au quotidien, c'est de forcer un style : en ligne, $\sum_{k=1}^{n}$ est écrasé à 8,04175pt de haut, tandis que $\displaystyle\sum_{k=1}^{n}$ mesure 16,51393pt — l'allure hors texte, avec les bornes de la somme revenues au-dessus et au-dessous. Le prix est un interlignage irrégulier : si l'on y recourt sans cesse au fil du texte, c'est sans doute que la formule mérite d'être mise hors texte.

Les trois cas vraiment utiles : \, avant dx, \int\!\!\int, et après un nom de fonction

Commençons par l'intégrale. \int f(x)dx mesure 38,71877 pt et \int f(x)\,dx 40,38539 pt — un écart d'exactement 3 mu, soit 1,66662 pt, et cette espace fine est ce qui sépare l'intégrande du dx. Sans elle, f(x)dx se lit comme une suite ininterrompue de symboles. Ensuite, les intégrales multiples. \int\!\!\int est la tournure classique consistant à rapprocher deux signes d'intégrale par deux espaces négatives, et à la mesure elle donne exactement la même largeur que le \iint d'amsmath (19,3056 pt chacun ; un simple \int\int fait 22,63885 pt). Autrement dit, \iint est cet ajustement artisanal promu au rang de commande officielle.

latex
\[
  \int f(x)\,dx, \qquad \int\!\!\int f \;(=\ \iint f),
  \qquad \sin x, \qquad \operatorname{sinc} x
\]

Le troisième cas est le blanc qui suit un nom de fonction, et là il ne faut rien ajouter soi-même. \sin est déclaré comme opérateur (Op) : une espace fine apparaît donc automatiquement entre lui et ce qui suit. À la mesure, \sin x fait 19,6597 pt tandis que \mathrm{sin}x fait 17,99307 pt — un écart de 1,66663 pt, soit exactement 3 mu. Écrire son propre nom de fonction avec \mathrm{} fait donc perdre précisément cette espace. Le bon outil est \operatorname{sinc} d'amsmath ; à la mesure, \operatorname{sin}x donne 19,6597 pt, comme \sin x. Si le nom revient souvent, définissez-le une fois avec \DeclareMathOperator.

Des boîtes invisibles qui égalisent hauteurs et largeurs : \phantom, \vphantom, \mathstrut

« Réserver la place sans rien montrer » : ce besoin récurrent de la composition, c'est la famille \phantom qui l'assure. \phantom{…} fabrique une boîte vide de même hauteur, même profondeur et même largeur que son argument composé normalement. Rien ne s'imprime, mais exactement cette place reste libre. Des versions limitées à une dimension existent : \hphantom{…} ne garde que la largeur (hauteur et profondeur nulles), \vphantom{…} que la hauteur et la profondeur (largeur nulle). \vphantom sert au cas « revendiquer l'étendue verticale sans occuper d'espace horizontal ».

latex
\[
  \sum_{j \in \{0,\ldots,10\} \vphantom{3^{3^{3^j}}}}
  \sum_{i \in \{0,\ldots,3^{3^{3^j}}\}} i \cdot j
\]
% level the radicals: each argument gets a parenthesis of vertical room
$\sqrt{\mathstrut a}\;\sqrt{\mathstrut a^2}\;\sqrt{\mathstrut b}$

L'exemple ci-dessus est le cas où deux signes de sommation refusent de s'aligner. La somme de droite porte en indice la haute tour 3^{3^{3^j}} ; TeX abaisse donc le corps de cette somme pour faire de la place, et les deux \sum ne sont plus au même niveau. Un \vphantom{3^{3^{3^j}}} dans celle de gauche réserve la même hauteur tout en restant invisible, et les deux s'alignent. Son proche parent \mathstrut est une béquille dédiée, sans argument : en interne, c'est \vphantom(, il a donc la hauteur et la profondeur d'une parenthèse ouvrante et une largeur nulle. Placé en tête de chaque argument lorsque \sqrt{a} et \sqrt{a^2} voisinent, il égalise les toits des radicaux et la ligne se stabilise. En bref : \hphantom pour égaliser les largeurs, \vphantom ou \mathstrut pour les hauteurs, \phantom pour les deux — une seule et même idée : ne manipuler que des dimensions, au moyen d'une boîte invisible.