Sommes, intégrales et grands opérateurs

Le 29 octobre 1675, Leibniz écrivit ∫ dans un manuscrit. C’est un s long — l’initiale de summa, « somme », étirée verticalement — et la forme dit encore ce que le signe d’intégration était à l’origine : une marque pour additionner. Le signe de sommation Σ vient d’Euler, au chapitre I de ses Institutiones calculi differentialis de 1755. En LaTeX, pourtant, ces deux symboles frères se comportent très différemment : en formule affichée, \sum empile sa plage au-dessus et au-dessous, tandis que \int la garde sur le côté. Cette asymétrie est inscrite dans la définition même de \int. Cette page traite des grands opérateurs — \sum, \prod, \int, \oint, \bigcup et les autres — : comment les limites s’attachent, comment les déplacer avec \limits et \nolimits, comment écrire une condition sur plusieurs lignes avec \substack, et comment déclarer son propre opérateur avec \DeclareMathOperator.

Ce qu’est un grand opérateur — et pourquoi les limites ne sont pas des indices

Un grand opérateur est un symbole que TeX a rangé dans la classe \mathop. \sum, \prod, \int et \bigcup en font partie, ce qui leur confère deux propriétés. D’abord, le signe bascule entre un grand et un petit glyphe selon le style environnant. Ensuite, un indice _ ou un exposant ^ qui lui est attaché n’est pas traité comme un indice ordinaire mais comme une limite. Le i de x_i se contente d’occuper le bas à droite de la lettre ; le k=0 et le n de \sum_{k=0}^{n} peuvent être empilés juste au-dessous et au-dessus du symbole. Ce qui l’emporte dépend du style et du type de symbole — sujet des sections suivantes.

Les symboles de base sont intégrés au LaTeX standard — en réalité au TeX sous-jacent — et ne demandent aucun package. Les intégrales multiples \iint et \iiint, l’indice multiligne \substack et \DeclareMathOperator, qui définit des opérateurs, exigent en revanche le package amsmath. Comme amsmath est le standard de fait, garder \usepackage{amsmath} dans le préambule est simplement la solution pratique dès qu’on compose sérieusement des mathématiques.

\sum et \prod : la plage au-dessus et au-dessous, ou à côté

Au-dessus et au-dessous en formule affichée, à côté dans le texte. La somme est \sum, le produit \prod, le coproduit \coprod, et l’on donne la plage par un indice _ et un exposant ^. Placez \sum_{k=0}^{n} a_k dans \[ … \] : le Σ est composé en grand, avec k=0 juste dessous et n juste dessus. Insérez la même formule dans le texte avec $ … $ : le Σ rapetisse et k=0 et n s’empilent à sa droite. Mesurer les boîtes rend l’écart évident : en affiché, 14,54521pt de large, 16,51393pt de haut et 13,02782pt de profondeur — haut et étroit ; en ligne, 25,6008pt de large, 8,04175pt de haut et 3,00005pt de profondeur — bas et large. Haut signifie empilé, large signifie à côté.

latex
% displayed: limits stack above and below
\[
  \sum_{k=0}^{n} a_k = a_0 + a_1 + \dots + a_n,
  \qquad \prod_{k=1}^{n} k = n!
\]

% inline: the same sum keeps its limits at the side
The series $\sum_{k=0}^{n} a_k$ fits inside the line.

Ce basculement entre « au-dessus/au-dessous » et « à côté » est le comportement par défaut, lié au style. Les symboles dits de classe sum — somme, produit, coproduit et apparentés — n’empilent leurs limites au-dessus et au-dessous qu’en style affiché ; en style texte, elles passent sur le côté. amsmath appelle ce schéma displaylimits. C’est une valeur par défaut bien choisie, qui évite d’écarter inutilement l’interlignage. Si la plage n’a qu’un bout, n’écrivez que celui-là ; vous pouvez aussi placer une condition en limite inférieure, comme \sum_{i \in S}. Attention : tout ce qui dépasse un token doit être entouré de { }. Écrivez \sum_k=1 et seul le k devient indice, tandis que =1 déborde à droite du symbole.

Mettre les bornes au-dessus d’une intégrale : pourquoi \int vaut \intop\nolimits

Le signe d’intégration \int garde ses bornes sur le côté même en formule affichée. Cette différence avec la somme n’a rien d’accidentel : elle est écrite directement dans la définition. Les lignes 253–254 de fontmath.ltx, dans LaTeX, portent \DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52} puis \DeclareRobustCommand\int{\intop\nolimits}. Autrement dit, \int est le glyphe d’intégrale \intop avec un \nolimits collé dessus — la convention mathématique gravée dans la commande. Les lignes 260–261 donnent à \oint la même forme : \ointop\nolimits. À l’inverse, cela offre une échappatoire : employer directement le glyphe nu \intop ou \ointop ramène au défaut de la classe sum. La mesure le confirme : un \int_0^1 affiché fait 14,48615pt de large et 15,65013pt de haut, alors que \intop_0^1 fait 10,00002pt de large, 21,12231pt de haut et 15,789pt de profondeur. L’un s’étale, l’autre s’élève.

latex
\[
  \int_{0}^{\infty} e^{-x}\,dx = 1,
  \qquad \oint_{C} \mathbf{F}\cdot d\mathbf{r},
  \qquad \intop_{0}^{1} x^2\,dx
\]

On peut composer une intégrale multiple en répétant le signe, \int\int, mais l’écart entre les signes paraît lâche. amsmath fournit des commandes dédiées à l’espacement resserré : la double \iint, la triple \iiint, la quadruple \iiiint, et \idotsint, qui place des points entre deux signes d’intégration (∫⋯∫). Le resserrement se mesure : en affiché, \int\int fait 21,66666pt de large et \iint 16,66678pt. Soit exactement 5pt, un demi-cadratin en corps 10. \iiint donne 23,33354pt, \iiiint 30,0003pt et \idotsint 34,9999pt. Pour les intégrales fermées de surface et de volume courantes en physique, le package esint ajoute \oiint (surface fermée), \varoiint, \sqint, \sqiint, \ointclockwise, \ointctrclockwise, \fint et quelques autres. \oiiint n’en fait pas partie : pour une intégrale fermée triple, il faut chercher un autre package de fontes. Nativement, LaTeX ne propose que \oint.

latex
% preamble: \usepackage{amsmath}
\[
  \iint_{D} f(x,y)\,dx\,dy,
  \qquad \iiint_{V} f\,dV,
  \qquad \iiiint f, \qquad \idotsint_{A} f\,dV
\]

\limits et \nolimits : forcer la position

Pour passer outre le défaut, on écrit après l’opérateur \limits (forcer au-dessus et au-dessous) ou \nolimits (forcer sur le côté). Pour empiler la plage d’une somme dans le texte : \sum\limits_{k=1}^{n} ; pour mettre les bornes au-dessus et au-dessous d’une intégrale affichée : \int\limits_0^1. Comme l’a montré la section précédente, ce dernier équivaut au \intop nu — à la mesure, les deux font 10,00002pt de large, 21,12231pt de haut et 15,789pt de profondeur. Pour revenir au défaut lié au style, on emploie \displaylimits.

latex
% force limits above and below inside running text
The partial sum $\sum\limits_{k=1}^{n} k$ sits in the line.

% force limits above and below on a displayed integral
\[
  \int\limits_{0}^{1} x^2\,dx = \frac{1}{3}
\]

Le placement obéit à une règle. \limits doit suivre un \mathop ; sinon la compilation s’arrête sur ! Limit controls must follow a math operator. (TeX ajoute I'm ignoring this misplaced \limits or \nolimits command.). x\limits^2 comme \frac{1}{2}\limits déclenchent l’erreur. On lit souvent, en revanche, qu’écrire la commande après les indices serait fautif — c’est inexact. \sum_{k=1}\limits^{n} compile sans problème et donne, à la mesure, exactement la même boîte que \sum\limits_{k=1}^{n} : 14,54521pt de large, 16,51393pt de haut, 13,02782pt de profondeur. L’atome qui précède reste l’opérateur. Il n’empêche : juste après l’opérateur est plus clair pour vos lecteurs comme pour vous, autant en faire une habitude. Enfin, quand plusieurs \limits, \nolimits ou \displaylimits se suivent, le dernier l’emporte : \sum\limits\nolimits_{k=1}^{n} est sorti sur le côté, \sum\nolimits\limits_{k=1}^{n} au-dessus et au-dessous. Cette règle souffre une exception : après un nom de fonction comme \log ou \lim, \limits est silencieusement ignoré dès qu'amsmath est chargéamsopn.sty l'avale au moyen de \@ifnextchar\limits{\nolimits\@gobble}, sans erreur ni avertissement. Mesure faite : sans amsmath, la profondeur de \log\limits_{k}x vaut 9,4722pt ; avec amsmath, elle reste à 2,44443pt, exactement comme \log_{k}x. Pour placer un indice sous un nom de fonction, utilisez \DeclareMathOperator*.

Pour changer la politique à l’échelle d’un document entier, il existe des options de package amsmath, au lieu d’écrire la commande à chaque fois. Les lignes 46–49 d’amsmath.sty déclarent intlimits, nointlimits, sumlimits et nosumlimits, et le \ExecuteOptions des lignes 92–93 fixe les valeurs par défaut à nointlimits, sumlimits — exactement le comportement décrit jusqu’ici. Écrivez \usepackage[intlimits]{amsmath} et toute intégrale affichée du document empile ses bornes au-dessus et au-dessous. À l’essai, un \int_0^1 affiché mesure alors 10,00002pt de large, 21,12231pt de haut et 15,789pt de profondeur, soit la même chose que \intop_0^1. À l’inverse, nosumlimits déplace aussi les bornes des sommes sur le côté. Avant de semer des \limits dans les formules une à une, il vaut la peine d’envisager cette décision au niveau du document.

Symbole / commandeStyle affichéStyle en ligne
\sum, \prod, \bigcupempilées au-dessus et au-dessousà droite
\int, \oint, \iintà droite (un \nolimits est inscrit dans la définition)à droite
\intop, \ointopempilées au-dessus et au-dessous (le glyphe nu, sans \nolimits)à droite
\limitsforce au-dessus et au-dessous ; à placer juste après l’opérateurforce au-dessus et au-dessous
\nolimitsforce sur le côté ; à placer juste après l’opérateurforce sur le côté
\displaylimitsretour au défaut lié au style (empilées)retour au défaut lié au style (sur le côté)

La famille \lim : des noms en romain, la condition dessous

\lim (limite), \limsup (limite supérieure) et \liminf (limite inférieure) sont des opérateurs composés en romain droit, comme les noms de fonctions, mais leurs indices suivent le régime de la classe sum : en affiché, l’indice se place juste dessous ; en ligne, en bas à droite. \limsup et \liminf sont composés en deux mots, « lim sup » et « lim inf », avec l’espace voulue entre eux. \sup, \inf, \max et \min appartiennent à la même famille et placent l’indice dessous (les noms de fonctions sont aussi rassemblés sur la page « Bases du mode mathématique »). La flèche → s’écrit \to et l’infini \infty.

latex
\[
  \lim_{n \to \infty} \frac{1}{n} = 0,
  \qquad \limsup_{n \to \infty} a_n \ge \liminf_{n \to \infty} a_n,
  \qquad \sup_{x \in X} f(x)
\]

La famille \bigcup : préfixer un opérateur binaire par big

Les opérateurs n-aires de la théorie des ensembles, de la logique et de l’algèbre ont eux aussi des versions composées en grand, comme \sum. La nomenclature est mécanique : on prend le nom de l’opérateur binaire correspondant et on le préfixe par big. À l’union binaire \cup (A ∪ B) correspond la version de taille variable \bigcup. Tous relèvent de la classe sum : en affiché, ils empilent leurs limites au-dessus et au-dessous ; en ligne, ils les mettent sur le côté. À la mesure, un \bigcup_{i=1}^{n} affiché fait 12,95433pt de large, 16,51393pt de haut et 12,79865pt de profondeur — pratiquement la même boîte haute et étroite que \sum.

CommandeSignificationContrepartie binaire
\bigcupréunion (n-aire)\cup (∪)
\bigcapintersection (n-aire)\cap (∩)
\bigsqcupréunion disjointe\sqcup (⊔)
\biguplusréunion de multiensembles\uplus (⊎)
\bigveeOU logique / borne supérieure\vee (∨)
\bigwedgeET logique / borne inférieure\wedge (∧)
\bigoplussomme directe (plus cerclé)\oplus (⊕)
\bigotimesproduit tensoriel (fois cerclé)\otimes (⊗)
\bigodotpoint cerclé (n-aire)\odot (⊙)
latex
\[
  \bigcup_{i=1}^{n} A_i, \qquad
  \bigcap_{i \in I} A_i, \qquad
  V = \bigoplus_{k} V_k
\]

Deux lignes de conditions sous une somme : \substack et subarray

On place \substack{…} d’amsmath en bloc à la position de l’indice. Chaque ligne séparée par \\ est empilée et centrée : on peut ainsi aligner « 0 ≤ i ≤ m » et « 0 < j < n » sur deux lignes juste sous le Σ. Ne mettez pas de \\ après la dernière ligne. Pour aligner les lignes à gauche, utilisez l’environnement plus général subarray : \begin{subarray}{l} … \end{subarray}. {l} aligne à gauche, {c} centre, et les lignes se coupent avec \\ exactement comme dans \substack. De fait, la définition de \substack est \subarray{c}…\endsubarray : ce sont deux visages du même mécanisme. À noter : poser une accolade ou un trait au-dessus ou au-dessous d’un symbole — \overbrace, \underbrace, \overline — est une autre question, traitée sur la page distincte « Au-dessus et au-dessous ». Il n’est question ici que des limites d’un opérateur.

latex
% preamble: \usepackage{amsmath}
\[
  \sum_{\substack{0 \le i \le m \\ 0 < j < n}} P(i,j)
  \qquad
  \sum_{\begin{subarray}{l} i \in \Lambda \\ 0 < j < n \end{subarray}} P(i,j)
\]

Définir argmax soi-même : à quoi sert l’étoile de \DeclareMathOperator*

L’étoile décide si la condition se place juste dessous ou en bas à droite. Quand il faut un nom d’opérateur absent de la liste standard — argmax, argmin, esssup —, composé en romain et avec son indice juste dessous comme \lim, on le déclare une fois dans le préambule avec \DeclareMathOperator* d’amsmath, puis on l’appelle dans le corps comme une commande courte. Sans étoile, l’indice se loge en bas à droite du nom. La mesure le montre : la boîte de \operatorname*{argmax}_{\theta} a 9,4722pt de profondeur — elle croît vers le bas — tandis que \operatorname{argmax}_{\theta} sans étoile fait 37,05215pt de large pour seulement 2,44443pt de profondeur, croissant donc vers la droite. Pour un usage unique, on peut aussi écrire directement \operatorname{rank} sans rien déclarer (ou \operatorname*{…} pour placer la limite dessous).

latex
% in the preamble:
\usepackage{amsmath}
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator{\rank}{rank}

% in the body:
\[
  \hat{\theta} = \argmax_{\theta} L(\theta),
  \qquad \rank A \le n,
  \qquad \sideset{}{'}\sum_{n} a_n
\]

Le texte du nom suit des conventions particulières : un trait d’union - est composé comme un trait d’union de texte (et non comme un signe moins), et un astérisque * comme un astérisque de texte surélevé (et non comme l’étoile binaire centrée). Le \, de arg\,max est l’espace fine qui sépare les deux mots. Les noms de fonctions se composent avec \DeclareMathOperator ou \mathrm, pas avec \text{…} ; l’espacement alentour s’ajuste alors tout seul et ils restent droits même dans un contexte italique comme un environnement de théorème. Enfin, pour placer des indices aux quatre coins d’un symbole de classe sum — un prime (′) sur une somme, par exemple —, amsmath propose \sideset. \sideset{}{'}\sum_{n} a_n ajoute un prime en haut à droite du Σ tout en gardant la limite dessous. Le premier argument règle les deux coins gauches, le second les deux coins droits ; dans chacun, on écrit _{bas}^{haut}. À noter : cela ne vaut que pour les symboles de classe sum.