Décorations au-dessus et au-dessous

Jusqu'où \widehat s'étire-t-il ? Réponse : jusqu'à 1,44 cadratin, pas davantage. Le grand chapeau de LaTeX ne possède que trois glyphes dans la fonte cmex10, larges de 5,55557 pt, 10,00002 pt et 14,44447 pt en corps 10. Il n'y en a pas de quatrième : posez-le sur quelque chose de long comme \widehat{f(x+y+z)} et le chapeau cesse tout bonnement de grandir, perché au milieu. \overline, \overbrace et \overrightarrow, eux, sont assemblés à partir de filets et s'allongent sans limite. Tout ce qui se place au-dessus ou au-dessous d'une expression tombe d'un côté ou de l'autre de cette frontière — extensible ou fixe — et se tromper de côté, c'est ce qui casse la composition. Cette page trace la frontière avec des mesures et la prolonge jusqu'à \overset, \stackrel et \xrightarrow.

Extensible ou fixe : la différence entre \hat, \widehat et \overline

Les trois diffèrent par l'endroit d'où ils tirent leur forme. Dans fontmath.ltx, \hat est un accent issu d'operators (le romain du texte courant) à la largeur d'une lettre, \widehat un accent de largeur variable issu de largesymbols (cmex10), et \overline n'est pas un caractère du tout mais un filet. Ainsi \hat{x} reste figé sur une largeur de lettre, \widehat{xy} retient la plus grande des trois glyphes qui tient encore, et \overline{xyz} est tracé exactement à la largeur de son contenu. Mesuré : appliqué à un matériau large de 60 pt, \overline donne un filet de 60 pt tout juste ; \widehat sur le même matériau reste à 14,44447 pt.

GroupeCommandesComportement
rules & braces\overline \underline \overbrace \underbraceassemblés à partir de filets — s'allongent sans limite
extensible arrows\overrightarrow \overleftarrow \overleftrightarrowla hampe est remplie par \rightarrowfillsans limite
wide accents\widehat \widetildetrois glyphes seulement — plafonné à 14,44447 pt
fixed accents\hat \tilde \bar \vec \dot \ddot, etc.taillés pour une lettre — aucun étirement
arbitrary material\overset \underset \stackrel \xrightarrown'importe quel symbole, en petit ; seul \xrightarrow allonge sa hampe

Un trait sur toute l'expression : \overline et \underline

\overline{…} trace un filet au-dessus de son argument et \underline{…} en dessous, exactement à la largeur du contenu. Les deux appartiennent au LaTeX standard et ne demandent aucun package. On les emploie pour un complémentaire, un conjugué complexe, ou simplement pour signaler « lire ce passage comme un tout ». Le filet d'\underline est placé de façon à éviter les jambages descendants — les lettres comme y et g qui plongent sous la ligne de base — et ne les coupe donc jamais. Ce sont en outre l'une des très rares décorations qui s'imbriquent proprement : \overline{\overline{z}} compose une vraie double barre. Mesuré, \overline{z} fait 6,30544 pt de haut et la forme doublée 8,30533 pt — environ 2 pt par couche.

latex
\[
  \overline{a + b} = \overline{a} + \overline{b}, \qquad
  \underline{x + y}, \qquad \overline{\overline{z}} = z
\]

Marquer une portée avec une accolade : \overbrace{…}^{…} et \underbrace{…}_{…}

Une accolade horizontale court au-dessus ou au-dessous d'une expression, et ^ ou _ y accroche une étiquette juste au-delà. \overbrace et \underbrace appartiennent au LaTeX standard, et l'accolade s'étire sur toute la largeur du contenu. Si l'on peut les étiqueter, c'est parce que leur définition dans fontmath.ltx se termine par \mathop{…}\limits. C'est le \mathop qui rend ^ et _ disponibles ; c'est le \limits inscrit en dur qui maintient l'étiquette au-dessus ou au-dessous même en mode en ligne. Autrement dit, \overbrace porte son étiquette par la même mécanique qu'un signe de sommation.

latex
\[
  \underbrace{1 + 2 + \cdots + n}_{n \text{ terms}}
  = \frac{n(n+1)}{2}
  \qquad
  \overbrace{x + x + \cdots + x}^{k}
\]

Si l'étiquette contient des mots, enveloppez-la dans \text{…} (d'amsmath), puisqu'on est en mode mathématique. Et ce \limits a un coût. Mesuré, $\underbrace{a+b}_{n}$ a une profondeur de 14,19992 pt. Un simple $a+b$ fait 0,83333 pt, et le \baselineskip d'un document en 10 pt vaut 12 pt : en ligne, l'accolade descend donc plus bas qu'un interligne entier et écarte les lignes voisines. Voilà pourquoi les accolades ont leur place dans les formules hors texte. S'il en faut absolument une en ligne, \underbrace{a+b}\nolimits_{n} déplace l'étiquette à droite et ramène la profondeur à 8,53328 pt. Sujet voisin : \substack, qui empile deux conditions sous un signe de sommation, relève de la page consacrée aux grands opérateurs.

\widehat et \widetilde cessent de grandir

Le plafond est de 14,44447 pt, soit environ 1,44 cadratin dans un document en 10 pt. La déclaration de fontmath.ltx, \DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62}, pointe vers la glyphe "62 de cmex10, qui s'enchaîne vers "63 puis "64. Mesurées avec \fontcharwd, les trois largeurs valent 5,55557 pt, 10,00002 pt et 14,44447 pt. TeX retient la plus grande glyphe qui ne dépasse pas la largeur du noyau : tout ce qui est plus étroit que 14,44447 pt reçoit donc un chapeau plus petit, et tout ce qui est plus large — quelle que soit la marge — garde le plus grand, centré. Les trois glyphes de \widetilde ont les mêmes largeurs. \widehat{x} et \widehat{xy} paraissent donc naturels, tandis que dans \widehat{f(x+y+z)} le chapeau ne couvre qu'une partie de l'expression.

latex
\[
  \widehat{x + y} \neq \hat{x} + \hat{y}, \qquad
  \widetilde{ab}, \qquad
  \overline{f(x+y+z)}   % use a rule once the hat runs out
\]

Une flèche au-dessus de l'expression : \overrightarrow et le piège de \vec

Pour le segment orienté AB, écrivez \overrightarrow{AB} et non \vec{AB}. \vec est déclaré dans fontmath.ltx par \DeclareMathAccent{\vec}{\mathord}{letters}{"7E} : c'est un accent fixe taillé pour une lettre, si bien que \vec{AB} pose la petite flèche pratiquement sur le seul B. \overrightarrow, lui, construit la flèche : la hampe est \rightarrowfill, qui juxtapose des signes moins avec \cleaders et les coiffe d'une pointe ; elle n'a donc aucune limite de largeur. Vers la gauche, c'est \overleftarrow ; dans les deux sens, \overleftrightarrow. Les formes du dessous — \underrightarrow, \underleftarrow, \underleftrightarrow — réclament amsmath.

latex
\usepackage{amsmath}   % needed for \underrightarrow and friends
\[
  \vec{a} \quad \text{vs.} \quad \overrightarrow{AB},
  \qquad \overleftrightarrow{PQ}, \qquad \underrightarrow{x}
\]

Accents fixes pour une seule lettre : \dot, \bar, \hat et \imath

Les accents fixes sont des outils pour orner une seule lettre : \dot pour une dérivée temporelle, \ddot pour la seconde, \bar pour une moyenne ou un conjugué, \hat pour un estimateur, \tilde pour une approximation — les marques qui reviennent sans cesse en sciences et en ingénierie. Toutes appartiennent au LaTeX standard ; appliquées à plusieurs lettres, elles ne s'étirent pas mais restent centrées à la taille d'un symbole. Une convention classique existe : poser une marque sur i ou j entre en collision avec le point de la lettre, d'où l'usage des \imath et \jmath sans point. Écrivez \hat{\imath} et vous obtenez le seul accent circonflexe, proprement posé.

CommandeCe qui est placéExtensible ?
\hatun accent circonflexefixe ; la version large est \widehat
\tildeun tildefixe ; la version large est \widetilde
\barun trait court (macron)fixe ; pour toute une expression, \overline
\vecune petite flèche vers la droitefixe ; la flèche large est \overrightarrow
\dot \ddotun point, deux pointsfixe ; \dddot et \ddddot exigent amsmath
\acute \graveaccents aigu et gravefixe
\check \breveun caron (ˇ) et une brève (˘)fixe
\mathringun petit rond (˚)fixe
\imath \jmathi et j sans pointla base d'un accent, comme dans \hat{\imath}

Un avertissement. Les accents ne s'empilent pas proprement. En superposer deux, comme dans \hat{\vec{x}}, laisse souvent la marque supérieure flotter, monter trop haut ou se décaler — les seules qui s'imbriquent confortablement sont les \overline et \underline vus plus haut. Si vous voulez simplement plus de points, prenez \ddot, ou \dddot et \ddddot d'amsmath. S'il faut vraiment deux marques différentes, construisez-les explicitement avec le \overset de la section suivante, ou confiez la tâche à un package dédié. Pour ajuster finement la position, fontmath.ltx fournit aussi \skew.

latex
\[
  \dot{x}, \quad \ddot{x}, \quad \bar{x}, \quad \hat{p},
  \quad \tilde{a}, \quad \check{s}, \quad \hat{\imath}, \quad \vec{\jmath}
\]

\overset contre \stackrel : 1,11109 pt d'écart à la mesure

La différence tient à la reprise ou non de la classe de la base. \stackrel est défini dans latex.ltx par \mathrel{\mathop{#2}\limits^{#1}} : quoi qu'on lui donne, le résultat est toujours une relation. Le \overset d'amsmath examine la base à l'aide de \binrel@ et la recompose en opérateur binaire si c'en était un, en relation si c'en était une. Mesuré : a\overset{f}{+}b fait 21,79968 pt, exactement comme a\mathbin{+}b, tandis que a\stackrel{f}{+}b fait 22,91077 pt, exactement comme a\mathrel{+}b. L'écart de 1,11109 pt est la différence entre l'espace moyenne (4 mu) et l'espace forte (5 mu), comptée des deux côtés. Si la base est déjà une relation comme =, les deux coïncident — dans le doute, \overset.

latex
\usepackage{amsmath}   % \overset, \underset, \overunderset
\[
  A \overset{f}{\longrightarrow} B, \qquad
  X \underset{n \to \infty}{\longrightarrow} x, \qquad
  a \overset{\text{def}}{=} b, \qquad
  \overunderset{a}{b}{X}
\]

\overset{dessus}{base} place n'importe quel symbole ou expression en petit au-dessus de la base, et \underset{dessous}{base} en dessous. Le second argument est la base, le premier ce qu'on ajoute ; l'ajout est composé en scriptstyle — la taille des indices — et ressort donc petit sans effort. Pour mettre du matériel des deux côtés, on peut les imbriquer, mais amsmath propose aussi \overunderset{dessus}{dessous}{base}, plus lisible. La différence avec les accents fixes : c'est vous qui choisissez ce qui se pose dessus. Et notez le contraste avec les indices : ^ et _ se placent en haut et en bas à droite d'un symbole, tandis que \overset et \underset posent le matériel juste au-dessus et juste au-dessous.

Des flèches qui s'allongent pour leur étiquette : \xrightarrow et \xleftarrow

Quand une flèche mérite un nom, employez \xrightarrow{…} d'amsmath plutôt que \stackrel. La raison tient à la largeur. Avec une étiquette longue, A\xrightarrow{\text{very long label}}B mesure 79,12704 pt, car la hampe elle-même s'allonge à la largeur de l'étiquette. Posez la même étiquette sur un \longrightarrow avec \stackrel : l'ensemble fait 72,7536 pt, mais la flèche dessous garde ses 37,25343 pt fixes — le texte déborde donc des deux côtés de la flèche. \xrightarrow accepte de plus un argument optionnel entre crochets : \xrightarrow[n \to \infty]{f} place le nom de l'application au-dessus et la condition en dessous en même temps. La forme vers la gauche est \xleftarrow.

latex
\usepackage{amsmath}
% mathtools adds \xLeftarrow, \xhookrightarrow, \xmapsto and more
\[
  A \xrightarrow{\;f\;} B \xleftarrow{\;g\;} C,
  \qquad a_n \xrightarrow[n \to \infty]{} L
\]
  • Orner une seule lettre → un accent fixe (\hat, \bar, \dot, \vec)
  • Couvrir toute une expression\overline, \overrightarrow ; \widehat plafonne à 14,44447 pt
  • Marquer une portée avec une accolade\overbrace{…}^{…}, \underbrace{…}_{…} ; à réserver au hors-texte
  • Un \underbrace en ligne → ses 14,19992 pt de profondeur écartent les lignes ; \nolimits déporte l'étiquette
  • N'importe quel symbole dessus ou dessous\overset, \underset, \overunderset d'amsmath
  • Nommer une flèche\xrightarrow{…} ; \stackrel ne peut pas allonger sa hampe
  • Accentuer i ou j → partir des \imath et \jmath sans point