La plupart du temps, LaTeX compose une formule avec élégance, telle que vous l’avez écrite. Mais il reste parfois une petite imperfection : une racine dans une fraction est si haute qu’elle écarte les lignes, deux racines carrées voisines ne s’alignent pas en haut, une longue condition sous une somme ouvre trop d’espace de part et d’autre. Pour ces corrections de finition, il existe une boîte à outils de commandes petites et précises. Cette page les rassemble sous la forme problème → correction. Le traitement approfondi se trouve sur les pages dédiées ; ici, l’objectif est de savoir rapidement quelle commande employer pour quel défaut, avec \smash, absent des autres pages, au centre.
Boîte à outils de réglage fin
Une même idée les traverse : manipuler les dimensions occupées par un élément (hauteur, profondeur, largeur) indépendamment de son apparence. Si de l’encre visible peut compter comme « taille zéro », ou si l’on peut réserver de la place pour un contenu invisible, on contrôle précisément l’effet d’un morceau sur ses voisins et sur l’interligne. L’étendue verticale (hauteur et profondeur) se règle avec \smash, \vphantom et \mathstrut ; l’étendue horizontale (largeur) avec \mathrlap, \mathllap, \mathclap et l’espace négatif \! ; les deux à la fois avec \phantom.
Ce sont tous des derniers gestes de réglage du résultat imprimé ; aucun ne change le sens de la formule. La règle pratique est donc d’écrire d’abord les mathématiques simplement, puis de n’appliquer ces outils qu’aux défauts réellement visibles. Le tableau ci-dessous sert de référence rapide.
| Symptôme | Commande à utiliser | Source | |
|---|---|---|---|
tall-pushes-lines | Un élément haut écarte les lignes | \smash (\smash[t] / \smash[b]) | Noyau LaTeX ([tb] via amsmath) |
radical-heights-differ | Racines ou lignes voisines de hauteur différente | \vphantom / \mathstrut | Noyau LaTeX |
reserve-space | Réserver de la place invisible pour aligner | \phantom / \hphantom / \vphantom | Noyau LaTeX |
wide-subscript | Un indice large élargit la colonne | \mathclap (\mathrlap / \mathllap) | mathtools |
stack-symbol | Empiler un symbole quelconque sur =, etc. | \overset / \underset | amsmath |
too-much-space | Des symboles sont trop espacés | \! (espace fin négatif) | Noyau LaTeX |
\smash — faire compter hauteur et profondeur pour zéro
Problème. Quand une racine apparaît au numérateur ou au dénominateur d’une fraction, le haut de \sqrt, c’est-à-dire le bord supérieur du radical, dépasse une ligne normale. Pour éviter que les lignes ne se touchent, LaTeX augmente l’écart avec la ligne du dessus de cet excès. Une seule ligne reçoit alors un interligne supplémentaire, et l’espacement de la page paraît irrégulier.
Correction. \smash{...} compose son argument comme si sa hauteur et sa profondeur étaient toutes deux nulles. L’encre, c’est-à-dire les glyphes visibles, s’imprime toujours, mais LaTeX traite la boîte comme n’ayant pas de taille verticale, et ne décide donc plus d’augmenter l’interligne. La référence officielle LaTeX2e explique que sans \smash, LaTeX écarterait cette ligne de celle qui la précède, ce qui pourrait produire un espacement irrégulier peu esthétique. En contrepartie, le contenu ainsi écrasé peut empiéter sur la ligne du dessus.
% 問題:分数のなかの根号が、この行だけ行間を押し広げる
$y = \frac{1}{\sqrt{1 - x^2}}$
% 直し方:根号の高さをゼロ扱いにして行送りへの影響を消す
$y = \frac{1}{\smash{\sqrt{1 - x^2}}}$Les deux donnent visuellement la même formule, mais dans le second cas la hauteur de \sqrt{1-x^2} n’entre pas dans le calcul de l’interligne ; la ligne est donc espacée comme ses voisines. C’est surtout utile quand un élément haut apparaît dans une formule en ligne dans le texte courant.
Avec amsmath chargé, \smash reçoit un argument optionnel. \smash[t]{...} écrase seulement le haut, c’est-à-dire la hauteur, en conservant la profondeur naturelle ; \smash[b]{...} écrase seulement le bas, c’est-à-dire la profondeur, en conservant la hauteur. Comme le manuel d’amsmath le note, il est parfois utile d’écraser seulement le haut ou le bas d’un élément tout en gardant l’autre dimension naturelle.
Un exemple représentatif donné par amsmath est l’alignement de racines carrées voisines. Dans \sqrt{x} + \sqrt{y} + \sqrt{z}, la lettre y a un jambage, si bien que le radical du milieu descend légèrement. Supprimer seulement cette profondeur avec \smash[b] remet les trois racines au même niveau.
% amsmath マニュアルの例:まんなかの根号だけ下がるのを直す
$\sqrt{x} + \sqrt{y} + \sqrt{z}$ % y の descender で不ぞろい
$\sqrt{x} + \sqrt{\smash[b]{y}} + \sqrt{z}$ % y の深さを消してそろえる\smash fonctionne en mode texte aussi bien qu’en mode mathématique, mais en texte il n’entre pas en mode horizontal ; au tout début d’un paragraphe, il faut donc le précéder de \leavevmode. Notez que \smash et le \vphantom de la section suivante sont des opérations opposées : \smash fait compter un grand élément pour zéro, tandis que \vphantom donne une hauteur réelle à quelque chose de taille zéro. amsmath montre même les deux utilisés ensemble pour égaliser des hauteurs.
\vphantom et \mathstrut — égaliser avec une hauteur invisible
Problème. C’est le miroir de \smash : parfois, on veut hausser l’élément le plus bas pour qu’il corresponde au plus haut. Placez \sqrt{a} à côté de \sqrt{a^2} : l’exposant rend le radical de droite plus haut, et leurs sommets ne s’alignent pas. La même chose se produit dans des cas ou des matrices quand les lignes ont des hauteurs différentes.
Correction. \vphantom{...} (vertical phantom) crée une boîte invisible ayant la même hauteur et la même profondeur que son argument, mais une largeur nulle. Ajoutez au plus petit élément un \vphantom du contenu le plus haut : les hauteurs s’alignent sans rien afficher. Le raccourci sans argument est \mathstrut, défini comme \vphantom( : un étai invisible de la hauteur d’une parenthèse ouvrante. Placé au début de chaque élément, il les met au niveau de cette hauteur.
% 根号の天井をそろえる:各 \sqrt の中身に \mathstrut を足す
$\sqrt{\mathstrut a}\;\sqrt{\mathstrut a^2}\;\sqrt{\mathstrut b}$
% 任意の高さにそろえたいときは、揃え先の中身を \vphantom に渡す
$\sqrt{a} \;\sqrt{\vphantom{a^2}\,a}$Ces commandes sont traitées en détail sur la page Scripts et espacements ; consultez-la pour le mécanisme et la différence avec \hphantom. À retenir ici : \smash (abaisser le grand) et \vphantom / \mathstrut (hausser le petit) sont deux outils complémentaires pour égaliser les hauteurs.
\phantom — aligner en réservant un espace invisible
Problème. Sur plusieurs lignes, on veut que ce terme de la ligne inférieure soit exactement sous ce terme de la ligne supérieure, mais les longueurs différentes à gauche décalent les colonnes. Ajouter des espaces à la main se casse dès que la police ou la formule change.
Correction. \phantom{...} est une boîte invisible ayant la même hauteur, profondeur et largeur que son argument composé normalement. Passez à \phantom l’expression même à laquelle vous voulez vous aligner : vous obtenez un blanc exactement aussi large, et les colonnes s’alignent naturellement. Si seule la largeur est nécessaire, utilisez \hphantom{...} (hauteur et profondeur nulles).
% 「= 」の左を、上の行の項の幅だけ空けて桁をそろえる
\begin{align*}
f(x) &= x^2 + 2x + 1 \\
\phantom{f(x)} &= (x + 1)^2
\end{align*}Ici, \phantom{f(x)} à gauche de la deuxième ligne réserve un blanc aussi large que f(x), ce qui aligne verticalement les deux signes =. Toute la famille \phantom (\hphantom, \vphantom) est également détaillée sur la page Scripts et espacements.
\mathclap, \mathrlap, \mathllap — boîtes de largeur nulle (le \smash horizontal)
Problème. La condition placée sous une somme ou un produit est parfois plus large que l’opérateur lui-même, par exemple \sum_{1 \le i \le j \le n}. LaTeX ouvre alors de l’espace de part et d’autre du signe somme pour loger cette largeur, et toute la formule paraît étirée. Dans des tableaux ou alignements, cette largeur supplémentaire peut décaler toute une colonne.
Correction. \mathclap{...} de mathtools place son argument dans une boîte de largeur nulle et le centre, en le faisant dépasser également des deux côtés. La condition reste visible, tandis que la largeur de la formule reste celle de l’opérateur lui-même. Pour dépasser d’un seul côté, utilisez \mathllap{...} vers la gauche ou \mathrlap{...} vers la droite. Ces commandes ont en fait été créées comme l’équivalent horizontal de \smash : là où \smash annule la taille verticale, les commandes lap annulent la taille horizontale, c’est-à-dire la largeur.
% 問題:長い下付き条件が総和の前後に余白を作る
\[ \sum_{1 \le i \le j \le n} a_{ij} \]
% 直し方:条件を幅ゼロの箱に入れ、式の幅を記号本体に保つ
\[ \sum_{\mathclap{1 \le i \le j \le n}} a_{ij} \]Cela suppose que mathtools est chargé (\usepackage{mathtools}, qui charge amsmath automatiquement). Ces commandes, la version texte \clap et l’argument optionnel [mathstyle] sont traités en détail sur la page mathtools.
Si vous préférez empiler les conditions sur plusieurs lignes plutôt que les resserrer horizontalement, \substack{...} d’amsmath convient : avec \sum_{\substack{0<i<m \\ 0<j<n}}, les deux conditions, séparées par \\, sont composées sur deux lignes sous le signe somme.
Empiler des symboles et rapprocher les éléments
Problème un. On veut parfois placer un petit symbole arbitraire directement au-dessus ou au-dessous d’un symbole existant : un point d’exclamation sur un signe égal pour « égal par exigence », \overset{!}{=}, ou \overset{?}{=} pour « est-ce vraiment égal ? ». Les scripts (^, _) s’attachent à droite du symbole, pas exactement au-dessus ou au-dessous.
Correction. Utilisez \overset{above}{base} et \underset{below}{base} d’amsmath. \overset{!}{=} place un petit point d’exclamation juste au-dessus du signe égal. Le second argument est la base ; le premier est ce qu’on ajoute.
\[
a \overset{!}{=} b, \qquad x \overset{?}{=} y,
\qquad A \overset{f}{\longrightarrow} B
\]L’usage plus complet de \overset / \underset, notamment avec les flèches et l’imbrication, se trouve sur la page des décorations au-dessus/au-dessous.
Problème deux. À l’inverse, des symboles peuvent être trop éloignés. Le cas classique est l’intégrale double ou triple : \int\int laisse tellement d’espace entre les signes qu’ils semblent représenter des intégrales séparées.
Correction. Rapprochez-les avec l’espace fin négatif \! (−3 mu, l’inverse exact de \,). Inséré sous la forme \int\!\!\int, il met les deux signes intégrale à une distance raisonnable. amsmath propose aussi les commandes dédiées \iint et \iiint pour les intégrales multiples. L’ensemble des ajustements d’espacement mathématique, dont \!, est récapitulé dans le tableau des mu sur la page Scripts et espacements.
\[
\int\int f \, dA % 間が空きすぎ
\qquad
\int\!\!\int f \, dA % \! で適度に詰める
\]