mathtools

Une fois amsmath chargé et les formules commencées, quelques besoins presque à portée apparaissent : le deux-points de := est un peu trop bas, on veut des étiquettes au-dessus *et* au-dessous d’une longue flèche, ou des barres de valeur absolue qui s’étirent à la hauteur du contenu. mathtools prend en charge tout cela. C’est une extension qui charge amsmath puis l’améliore, si bien que la seule ligne \usepackage{mathtools} charge aussi amsmath. Cette page parcourt ses ajouts les plus utilisés : un vrai :=, la flèche extensible \xrightarrow, le crochet droit \overbracket, le \DeclarePairedDelimiter à taille automatique, le \mathclap de largeur nulle, le pré-script \prescript et les matrices à colonnes alignées via matrix*.

Ce qu’est mathtools

mathtools est, selon son manuel officiel, « un paquet d’extension pour amsmath ». En partant du fait qu’amsmath est le standard de fait pour la composition mathématique, il corrige plusieurs défauts et bogues restants, et ajoute des outils utiles au quotidien. Le point essentiel est que mathtools requiert amsmath en interne et le charge automatiquement. Il n’est donc pas nécessaire de nommer amsmath séparément : cette seule ligne dans le préambule suffit.

latex
\usepackage{mathtools}

Lorsque vous voulez passer des options à amsmath, mathtools les relaie. Comme le montre le manuel, \usepackage[fleqn,tbtags]{mathtools} revient à écrire \usepackage[fleqn,tbtags]{amsmath} puis \usepackage{mathtools}. Autrement dit, les options données au chargement de mathtools atteignent aussi l’amsmath sous-jacent.

L’éventail des fonctions de mathtools est large, et nous ne pouvons pas tout couvrir ici. Cette page se limite aux ajouts les plus fréquents, du genre de ceux qu’un ouvrage de référence comme l’*Introduction to LaTeX2e* d’Okumura mentionnerait aussi. Il existe d’autres outils, comme les cas étendus (dcases), le contrôle de la numérotation (showonlyrefs) ou les flèches dans les alignements (\ArrowBetweenLines), mais les détails d’alignement relèvent de la page séparée « Équations hors texte, alignées et numérotées ».

mathtools s’appuie aussi en interne sur un petit paquet auxiliaire nommé mhsetup, qui sous-tend notamment le mécanisme de délimiteurs appariés de \DeclarePairedDelimiter. Les grandes distributions comme TeX Live l’incluent, si bien qu’on n’a normalement pas à s’en soucier. La maintenance active est désormais assurée par Lars Madsen, et la version actuelle se trouve sur CTAN.

Un vrai signe de définition : la famille \coloneqq

Saisir le « := » de définition tel quel en mode mathématique donne un résultat plus maladroit qu’on ne l’imagine. Le : est traité comme ponctuation et non comme relation, donc l’espacement est incorrect, et le deux-points descend un peu sous la ligne médiane du =. \coloneqq de mathtools compose un « := » dont le deux-points est centré à la bonne hauteur par rapport à l’égalité, avec le bon espacement de relation. Pour la forme inverse « =: », utilisez \eqqcolon.

latex
\[
  f(x) \coloneqq x^2 + 1, \qquad y \eqqcolon g(x)
\]

Dans cet exemple, la formule de gauche compose le := pour « définir f(x) comme x²+1 », et celle de droite le =: pour « écrire g(x) comme y », dans les deux cas avec le deux-points bien centré. Il existe aussi le double deux-points \dblcolon (::) et des formes combinant deux-points et approximation ou similarité, comme \colonapprox et \colonsim.

Une réserve : lors d’une mise à jour en 2022, mathtools a régularisé les noms canoniques de ces symboles à deux-points, afin de les harmoniser avec d’autres paquets. Les noms familiers \coloneqq et \eqqcolon restent disponibles pour compatibilité, mais dans le nouveau schéma \coloneq et ses proches sont les formes canoniques. Les anciens noms sont conservés pour que les documents existants continuent de compiler.

Flèches extensibles : \xrightarrow et \xleftarrow

Les flèches ordinaires \rightarrow (→) et \Rightarrow (⇒) ont une longueur fixe et paraissent maladroites si l’étiquette placée au-dessus est plus large que la flèche. amsmath fournit exactement deux flèches qui s’étirent horizontalement pour s’adapter à une étiquette : \xrightarrow et \xleftarrow. La syntaxe est \xrightarrow[étiquette dessous]{étiquette dessus} : les accolades { } vont au-dessus de la flèche et les crochets [ ] au-dessous ; les crochets sont optionnels. La flèche s’étend à la largeur des étiquettes.

latex
\[
  A \xrightarrow{f} B \xrightarrow[\sim]{g} C,
  \qquad
  X \xleftarrow[n \to \infty]{\varphi_n} Y
\]

Ici, la flèche de A vers B est une flèche extensible vers la droite portant f au-dessus, et celle de B vers C porte g au-dessus et au-dessous, chacune étirée à la largeur de ses étiquettes. À droite se trouve une flèche vers la gauche avec l’application φ_n au-dessus et la condition limite n→∞ au-dessous.

amsmath ne fournit que ces deux flèches extensibles, mais mathtools élargit beaucoup la famille selon le même schéma de noms : les doubles lignes \xRightarrow, \xLeftarrow et \xLeftrightarrow, la double direction \xleftrightarrow, les flèches à crochet \xhookrightarrow et \xhookleftarrow, la flèche d’application \xmapsto, ainsi que les harpons et des variantes plus longues comme \xlongrightarrow. Toutes prennent la même forme [dessous]{dessus}.

Crochets droits : \overbracket et \underbracket

Le LaTeX standard, et amsmath, fournissent \overbrace et \underbrace, qui tracent une accolade courbe au-dessus ou au-dessous d’une expression. mathtools ajoute \overbracket et \underbracket, qui tracent plutôt un crochet droit, à angle droit : non pas la forme arrondie d’une accolade, mais une ligne dont les extrémités tournent à angle droit, comme « ⌜ ⌟ », parfois plus lisible pour marquer l’étendue d’un diagramme ou d’une structure.

\overbracket prend deux arguments optionnels : le premier est l’épaisseur du trait, le second la hauteur du crochet, dans l’ordre \overbracket[épaisseur][hauteur]{contenu}. Par défaut, l’épaisseur vaut celle de \overbrace, environ 5/18 ex, et la hauteur environ 0,7 ex, des valeurs choisies pour bien fonctionner à toute taille de police. N’indiquez les crochets que si vous voulez changer l’épaisseur ou la hauteur. L’étiquette au-dessus s’ajoute avec ^{ }, ou dessous avec _{ }, comme pour la forme courbe.

latex
\[
  \underbracket{a + b + c}_{\text{3 terms}}
  \quad\text{vs}\quad
  \underbrace{a + b + c}_{\text{3 terms}}
\]

Ici, le même « a+b+c » reçoit à gauche un crochet à angle droit avec \underbracket et à droite une accolade courbe avec \underbrace, chacun portant la note « 3 terms » au-dessous. Côte à côte, la différence entre le crochet droit et l’accolade arrondie est nette.

Délimiteurs à taille automatique : \DeclarePairedDelimiter

Quand on compose une valeur absolue |x| ou une norme ‖x‖, des barres de taille fixe deviennent maladroites si le contenu est haut, comme une fraction. Le manuel amsmath propose une commande maison \newcommand*\abs[1]{\lvert#1\rvert} ; l’espacement horizontal est correct, mais les barres ne grandissent pas pour un contenu comme \abs{\frac{a}{b}}, et le résultat se dégrade. \DeclarePairedDelimiter de mathtools définit en une fois une paire de délimiteurs assortis, avec taille automatique. Écrivez ceci dans le préambule.

latex
\DeclarePairedDelimiter\abs{\lvert}{\rvert}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}

Avec cette définition, \abs et \norm possèdent chacun trois modes d’emploi. D’abord, \abs{x} simple compose des barres de taille fixe, suffisantes pour un contenu bas. Ensuite, \abs*{x} étoilé enveloppe le contenu dans \left … \right et s’étire automatiquement à sa hauteur. Enfin, la forme à argument optionnel \abs[\big]{x} fixe la taille à la main, au choix parmi \big, \Big, \bigg et \Bigg.

latex
\[
  \abs{x} = \abs{-x}, \qquad
  \abs*{\frac{a}{b}} = \frac{\abs{a}}{\abs{b}}, \qquad
  \norm[\big]{v}
\]

Ici, \abs{x} et \abs{-x} ont des barres de taille normale, \abs*{\frac{a}{b}} a des barres étirées à la hauteur de la fraction, et \norm[\big]{v} a des doubles barres agrandies d’un niveau \big. Pour le fonctionnement sous-jacent des délimiteurs, voir aussi la page « Délimiteurs (\left \right) ».

Centrage de largeur nulle et pré-scripts

Trois autres outils fréquents, vus ensemble. Le premier est \mathclap. Quand la condition placée sous une somme ou un produit est plus large que l’opérateur lui-même, cette largeur ouvre de l’espace supplémentaire dans toute la formule. \mathclap{…} place son argument dans une boîte de largeur nulle et le centre symétriquement : la condition reste visible, mais la largeur de la formule reste celle de l’opérateur. Il existe aussi \mathllap et \mathrlap, alignés à gauche et à droite, ainsi que \clap pour le mode texte.

latex
\[
  \sum_{\mathclap{1 \le i \le j \le n}} a_{ij}
\]

Ici, la condition large « 1 ≤ i ≤ j ≤ n » se place sous le signe somme ; enveloppée dans \mathclap, elle est centrée sous le signe et ne laisse aucun espace perdu à gauche ou à droite de la formule. Sans \mathclap, la zone autour du signe somme s’élargit de toute la largeur de la longue condition.

Le second outil est \prescript, qui place un exposant et un indice avant, donc à gauche, d’un symbole. Il prend trois arguments, dans l’ordre \prescript{pré-exposant}{pré-indice}{base}. C’est pratique pour la notation isotopique en chimie et pour les notations mathématiques à indices gauches. L’uranium 238, par exemple, s’écrit avec le nombre de masse 238 en pré-exposant et le numéro atomique 92 en pré-indice.

latex
\[
  \prescript{238}{92}{\mathbf{U}}, \qquad
  \prescript{n}{}{C}_{k}
\]

Ici, à gauche, on a la notation isotopique de l’uranium, avec 238 en haut à gauche et 92 en bas à gauche du symbole U ; à droite, n est placé en haut à gauche de C tout en attachant k en bas à droite comme d’habitude. Si aucun pré-indice n’est nécessaire, laissez le deuxième argument vide, {}.

Le troisième est \shortintertext. \intertext d’amsmath permet d’insérer du texte entre des lignes tout en conservant l’alignement, mais l’espace au-dessus et au-dessous peut être un peu trop généreux. \shortintertext{…} en est une version resserrée, plus adaptée à une brève remarque entre deux lignes. \intertext et \shortintertext fonctionnent aussi dans l’environnement gather.

Matrices à colonnes alignées : la famille matrix*

Les environnements matriciels d’amsmath (matrix, pmatrix, bmatrix, etc.) composent chaque colonne toujours centrée. Quand des entrées avec et sans signe moins se mêlent, ce centrage décale les chiffres et nuit à la lecture. mathtools fournit les environnements étoilés correspondants — matrix*, pmatrix*, bmatrix*, Bmatrix*, vmatrix*, Vmatrix* — qui acceptent un argument optionnel choisissant l’alignement des colonnes. Écrivez \begin{pmatrix*}[r] avec le même spécificateur que dans array (r, l, c) ; la valeur par défaut est c.

latex
\[
  \begin{pmatrix*}[r]
    -1 & 3 \\
     2 & -4
  \end{pmatrix*}
\]

Ici, chaque colonne de la matrice entre parenthèses est alignée à droite : les bords droits de -1 et 2, ainsi que de 3 et -4, s’alignent, et les signes moins dépassent proprement vers la gauche. Avec un simple pmatrix, les entrées seraient centrées, faisant paraître les chiffres décalés de la largeur du signe moins. Pour les bases des matrices elles-mêmes, voir la page « Matrices et tableaux ».

Régler les options : \mathtoolsset

De nombreux comportements de mathtools se règlent par des interrupteurs, vrai/faux ou similaires. La commande qui centralise ces réglages est \mathtoolsset{…}, normalement placée dans le préambule pour agir sur tout le document. Les clés se listent séparées par des virgules, sous la forme key=value ou, quand la valeur est évidente, comme une clé nue key.

latex
\mathtoolsset{
  showonlyrefs = true,
  centercolon
}

Quelques clés courantes : showonlyrefs=true numérote seulement les équations référencées depuis le texte et masque les numéros des autres, à condition d’utiliser \eqref et non \ref. centercolon active le comportement qui place : à hauteur centrale comme relation. Il existe beaucoup d’autres clés fines, par exemple smallmatrix-align pour l’alignement par défaut des petites matrices, et prescript-sub-format / prescript-sup-format pour changer la police des indices de \prescript.

FonctionCommande / environnementRôle
coloneqq\coloneqq / \eqqcolon:= / =: avec deux-points centré
xrightarrow\xrightarrow[dessous]{dessus}Flèche qui s’étire aux étiquettes
overbracket\overbracket / \underbracketCrochets droits, épaisseur/hauteur réglables
DeclarePairedDelimiter\DeclarePairedDelimiterDéfinit \abs, \norm à taille automatique
mathclap\mathclap / \clapCentrage de largeur nulle pour indices propres
prescript\prescript{sup}{sub}{base}Place des scripts avant un symbole
matrix*matrix* / pmatrix*, etc.Environnements matriciels avec alignement de colonnes