Opérateurs binaires

« Je n'aime pas × comme signe de la multiplication, car on le confond trop aisément avec x » : ainsi écrivait Leibniz à Jean Bernoulli en 1698. Hésiter en LaTeX entre \times et \cdot — deux des opérateurs binaires que cette page recense — c'est prendre parti dans une querelle vieille de plus de trois siècles. Le véritable sujet, pourtant, n'est pas le dessin du signe. TeX range chaque symbole d'une formule dans une classe, et cette classe seule fixe l'espace alentour : voilà pourquoi le + de $+1$ et celui de $a+1$, pourtant identiques, ne sont pas composés à la même largeur. Cette page passe en revue les opérateurs — \times, \div, \cdot, \pm, \oplus, \cup, \setminus et les autres —, indique ceux qui réclament amssymb et montre comment passer outre à TeX avec \mathbin lorsqu'il se trompe de classe.

\cdot ou \times : quel signe de multiplication choisir

Par défaut, \cdot (⋅). Le point centré sert à multiplier des nombres ou des grandeurs à l'intérieur d'une formule ; \times (×) reste réservé au produit vectoriel, au produit cartésien, aux dimensions (matrices 3 \times 3) et aux puissances de dix (6.02 \times 10^{23}). Cette répartition découle directement de la plainte de Leibniz. C'est William Oughtred qui a imprimé le × dans la Clavis Mathematicae, parue à Londres en 1631 ; mais en algèbre, x était aussi le nom le plus courant d'une inconnue. Dans sa lettre du 29 juillet 1698, Leibniz a donc écarté la croix et recommandé un point intercalé. C'est lui qui l'a emporté : voilà pourquoi le × de la multiplication a presque disparu de la littérature mathématique moderne.

Le signe de division \div (÷) a une histoire parallèle. On l'appelle obèle, et le premier à l'employer pour la division fut Johann Rahn, dans la Teutsche Algebra de 1659. La norme ISO 80000-2, qui fixe la notation mathématique en sciences et en technique, prescrit pourtant la barre oblique / ou la barre de fraction pour la division, les deux-points : pour les rapports, et précise que ÷ ne devrait pas être utilisé. La conclusion pratique est simple : dans un article ou un document technique, on écrit \frac{a}{b} et non \div. \div ne sert plus guère qu'à l'enseignement élémentaire et aux calculatrices. Autre piège : remplacer \cdot par un point, comme dans a.b, ne marche pas. TeX ne considère pas le point comme un opérateur et n'ajoute donc aucune espace — mesuré dans un document en 10 pt, $a.b$ fait 12,36 pt contre 16,80 pt pour $a \cdot b$ —, si bien que le résultat se lit comme une virgule décimale et non comme un produit. Taper * directement, en revanche, ne pose aucun problème : en mode mathématique, * est exactement le même opérateur binaire que \ast et se compose à l'identique.

latex
% \cdot for ordinary products; \times for cross products, dimensions, powers of ten
\[ 2 \cdot 3 = 6, \qquad \mathbf{u} \times \mathbf{v}, \qquad 6.02 \times 10^{23} \]
% a period is not a multiplication dot: it gets no operator spacing
\[ a.b \qquad a \cdot b \]
% in scientific writing prefer a fraction to the obelus
\[ \frac{a}{b} \qquad a \div b \]
CommandeGlypheSignification / emploi
\pm±plus ou moins ; x = a \pm b
\mpmoins ou plus ; signe inverse de \pm
\times×produit vectoriel, produit cartésien, dimensions, puissances de dix
\div÷l'obèle ; en écriture scientifique, préférer \frac
\cdotpoint de multiplication par défaut ; produit scalaire
\astconvolution, etc. ; identique à * en mode mathématique
\starétoile à cinq branches ; souvent un produit défini pour l'occasion
\circcomposition de fonctions ; g \circ f
\bulletpoint plein ; pendant plus lourd de \circ
\diamondopérateur losange

Pourquoi le + de $+1$ est composé serré

Un opérateur binaire relie ce qui se trouve de part et d'autre ; si un côté n'offre rien à relier, TeX en conclut qu'il ne s'agit pas d'un opérateur binaire. Un + en tête de formule est rétrogradé au rang de signe — unaire — et ne reçoit aucune espace. Les chiffres le montrent nettement : dans un document en 10 pt, $+1$ mesure 12,78 pt ; qu'on place devant lui un groupe vide, en écrivant ${}+1$, et le + se voit doté d'un opérande à gauche, redevient un véritable opérateur binaire, et la largeur passe à 17,22 pt. Les 4,44 pt d'écart se répartissent en 2,22 pt de chaque côté. Ces 2,22 pt viennent du paramètre \medmuskip (valeur par défaut 4mu plus 2mu minus 4mu), plus étroit que le \thickmuskip (5mu plus 5mu, soit 2,78 pt par côté) réservé aux relations — d'où le fait que $a=b$ respire davantage que $a+b$. Aucune quantité d'espaces dans la source n'y change quoi que ce soit. Seule la classe détermine l'espacement.

Ce mécanisme peut aussi se retourner contre soi, car les accolades détruisent la classe d'un symbole. $a\times b$ mesure 21,80 pt, mais qu'on écrive $a{\times}b$ et la largeur tombe à 17,36 pt : ce qui se trouve dans un groupe est traité comme un unique symbole ordinaire (classe Ord) et oublie qu'il fut un opérateur binaire. Lorsqu'une macro écrite de sa main produit un symbole à qui l'espace manque mystérieusement, c'est presque toujours la cause. Le remède est \mathbin{...} : $a\mathbin{\times}b$ mesure de nouveau 21,80 pt, exactement comme $a\times b$ sans habillage. En sens inverse, \mathord{...} supprime l'espace et \mathrel{...} compose le symbole en relation — $a\mathrel{\times}b$ donne 22,91 pt, soit très précisément la largeur de $a=b$.

latex
% a leading + has nothing to bind: TeX makes it a sign and sets it tight
% an empty group gives it a left operand and the medium space comes back
\[ +1 \qquad {}+1 \]
% braces strip the class; \mathbin puts it back, \mathrel makes it a relation
\[ a \times b \qquad a {\times} b \qquad a \mathbin{\times} b \qquad a \mathrel{\times} b \]
% always declare the class when you define an operator of your own
\newcommand{\op}{\mathbin{\triangle}}
\[ x \op y \]
CommandeClasse imposéeEspace de chaque côté (texte en 10 pt)
\mathbinopérateur binaire2,22 pt (\medmuskip = 4mu)
\mathrelrelation2,78 pt (\thickmuskip = 5mu)
\mathordsymbole ordinaire (Ord)aucun ; même résultat qu'un groupe entre accolades

Opérateurs cerclés et encadrés : lesquels réclament amssymb

Tous les opérateurs cerclés relèvent du LaTeX standard ; tous les encadrés exigent amssymb. Cette seule phrase règle l'essentiel. La somme directe \oplus (⊕), le produit tensoriel \otimes (⊗), \odot (⊙) pour le produit de Hadamard et ses parents, ainsi que \ominus, \oslash et \bigcirc, fonctionnent sans charger le moindre package. La famille encadrée — \boxplus (⊞), \boxminus (⊟), \boxtimes (⊠), \boxdot (⊡) — et les ajouts AMS à la famille cerclée, \circledast (⊛) et \circledcirc (⊚), supposent en revanche \usepackage{amssymb} dans le préambule. Faute de quoi la compilation s'arrête sur ! Undefined control sequence. Quant au choix, il obéit à une convention : ⊕ pour une opération additive, ⊗ pour une opération multiplicative. La théorie des catégories et la théorie des représentations suivent cette lecture à de rares exceptions près.

CommandeGlyphePackageSignification / emploi
\oplussomme directe ; opérations additives
\ominusmoins cerclé
\otimesproduit tensoriel ; opérations multiplicatives
\oslashbarre oblique cerclée ; division terme à terme
\odotproduit de Hadamard ou terme à terme
\bigcircgrand cercle
\circledastamssymbastérisque cerclé
\circledcircamssymbanneau cerclé
\boxplusamssymbplus encadré
\boxminusamssymbmoins encadré
\boxtimesamssymbmultiplié encadré
\boxdotamssymbpoint encadré
latex
% circled operators are standard; boxed ones come from amssymb
\usepackage{amssymb}
% ...
\[ V \oplus W, \qquad u \otimes v, \qquad A \boxplus B \]

Les versions agrandies des mêmes formes — \bigoplus (⨁), \bigotimes, \bigodot, \biguplus — ne sont pas des opérateurs binaires. Elles rejoignent \sum dans la classe des grands opérateurs : elles reçoivent des limites au-dessus et au-dessous et changent de corps entre formule en ligne et formule hors texte. Agrandir \oplus avec \Large ou équivalent déplace les limites au mauvais endroit ; il faut employer \bigoplus. La page consacrée aux sommes, intégrales et grands opérateurs entre dans le détail.

Opérateurs d'ensembles et de treillis : \cup, \cap, \setminus

Tout ce qui figure dans cette section relève du LaTeX standard ; aucun package n'est nécessaire. Intersection \cap (∩), réunion \cup (∪), somme de multiensembles \uplus (⊎), différence \setminus (∖). Dans les treillis et les ensembles ordonnés s'ajoutent les formes carrées \sqcap (⊓) et \sqcup (⊔) ; en logique, \wedge (∧) et \vee (∨), qui portent les alias \land et \lor. Les glyphes sont identiques : la seule différence tient à ce que les noms logiques se lisent mieux dans un contexte logique. L'accident le plus fréquent ici consiste à écrire une différence d'ensembles avec \backslash. Cette commande est un symbole ordinaire (classe Ord) et ne reçoit donc pas l'espacement d'un opérateur binaire : mesuré en 10 pt, $A \backslash B$ fait 20,59 pt contre 25,03 pt pour $A \setminus B$ — soit 2,22 pt de moins de chaque côté. Pour une différence d'ensembles, toujours \setminus. Avec amssymb chargé, on dispose en outre du plus fin \smallsetminus (∖).

CommandeGlyphePackageSignification / emploi
\capintersection
\cupréunion
\uplussomme de multiensembles ; union disjointe
\sqcapborne inférieure dans un treillis
\sqcupborne supérieure dans un treillis
\wedgeet logique, ou borne inférieure ; alias \land
\veeou logique, ou borne supérieure ; alias \lor
\setminusdifférence d'ensembles ; \backslash ne convient pas
\wrproduit en couronne
\smallsetminusamssymbdifférence d'ensembles plus fine
\Capamssymbdouble intersection
\Cupamssymbdouble réunion
latex
% a set difference needs \setminus, not \backslash
\[ A \setminus B \qquad A \cup (B \cap C) \]
% \land and \lor are aliases of \wedge and \vee
\[ p \wedge q \iff p \land q \]

Les autres opérateurs et l'erreur \lhd not provided in base LaTeX2e

Le reste forme un ensemble disparate, mais chaque signe y a sa place. Le coproduit ou union disjointe \amalg (⨿) ; la dague \dagger (†) et la double dague \ddagger (‡) pour les adjoints et les duaux ; les triangles \triangleleft (◁) et \triangleright (▷) pour les sous-groupes distingués et les actions — tous en LaTeX standard. S'y ajoutent les habitués d'amssymb : les produits semi-directs \ltimes (⋉) et \rtimes (⋊) de la théorie des groupes, \intercal (⊺) pour une transposée, le \dotplus (∔) pointé et \divideontimes (⋇). Un document d'algèbre finira toujours par réclamer un produit semi-direct : placer \usepackage{amssymb} dans le préambule dès le départ reste le chemin le plus court.

CommandeGlyphePackageSignification / emploi
\amalg⨿coproduit ; union disjointe
\daggerdague ; adjoint ou transconjuguée
\ddaggerdouble dague
\trianglelefttriangle gauche ; sous-groupes distingués, etc.
\trianglerighttriangle droit ; actions de groupe, etc.
\dotplusamssymbplus pointé
\intercalamssymbmarque de transposée en exposant
\ltimesamssymbproduit semi-direct à gauche
\rtimesamssymbproduit semi-direct à droite
\divideontimesamssymbsigne de multiplication pointé
\lhdlatexsym / amssymbtriangle gauche plus gras ; indisponible en LaTeX seul
\rhdlatexsym / amssymbtriangle droit plus gras

Les deux dernières lignes recèlent un piège. Taper \lhd pour un signe de sous-groupe distingué plus gras et le LaTeX nu s'arrête sur ! LaTeX Error: Command \lhd not provided in base LaTeX2e. Les noms \lhd, \rhd, \unlhd et \unrhd sont simplement réservés dans le noyau ; les symboles eux-mêmes résident dans un autre package. Charger \usepackage{latexsym} ou \usepackage{amssymb} suffit à faire fonctionner les quatre, et si amssymb est déjà chargé, il n'y a rien à ajouter. À l'inverse, si le \triangleleft (◁) standard convient, on ne rencontre jamais cette erreur.

Au moment de définir un opérateur maison, il faut se rappeler l'histoire des classes exposée en tête de page. Déclarez la classe explicitement, comme dans \newcommand{\op}{\mathbin{\triangle}}, et il suffira ensuite d'écrire x \op y : TeX se charge de l'espace de part et d'autre. Une macro qui oublie sa classe est traitée comme un symbole ordinaire (Ord), et l'on se retrouve à glisser un \, à la main à chaque emploi. Fixer la classe avant d'ajouter le symbole : ce seul geste évite presque tous les accidents d'espacement autour des opérateurs binaires.