Symboles de relation

Le symbole de relation le plus utilisé des mathématiques a un auteur, et cet auteur a consigné sa raison. Robert Recorde imprima = pour la première fois dans The Whetstone of Witte (1557) en choisissant deux lignes parallèles, car rien, écrivait-il, ne saurait être plus égal. En LaTeX, ce signe est à la tête d'une famille : =, \neq, \leq, \approx et \equiv sont des relations, et ce qui compte n'est pas tant leur forme que leur classe. TeX les réunit en une seule classe et accorde à chacune la même espace, délibérément large — plus large que celle d'un opérateur binaire. Cette page parcourt la famille : l'égalité et ses approximations, les signes d'ordre, la négation, et la promotion d'un symbole personnel au rang de relation. Le fil conducteur : le sens relève de la convention, mais l'espacement se déclare dans le source, et cette déclaration est à la portée de chacun.

Pourquoi = a plus d'air que +

Parce que TeX choisit l'espace d'après la classe et non d'après la forme. Chaque symbole d'une formule appartient à l'une de quelques classes — ordinaire, opérateur binaire, relation, ouvrante, fermante, ponctuation, interne — et l'espace entre deux voisins se lit dans une table de paires de classes. Un opérateur binaire comme + reçoit \medmuskip, fixé par plain TeX à 4mu plus 2mu minus 4mu ; une relation comme = reçoit \thickmuskip, fixé à 5mu plus 5mu. Le signe égal part donc plus large et, contrairement au plus, conserve de quoi s'étirer lorsqu'il faut remplir une ligne. Rien de tout cela ne se tape : écrivez a+b=c sans le moindre espace, la composition sera correcte.

La preuve la plus nette que c'est la classe qui travaille, et non la forme, tient dans deux commandes qui dessinent exactement le même caractère. Dans fontmath.ltx, le fichier où LaTeX déclare ses symboles mathématiques, | s'écrit \DeclareMathDelimiter{|}{\mathord}…{symbols}{"6A} et \mid s'écrit \DeclareMathSymbol{\mid}{\mathrel}{symbols}{"6A} : la case "6A de la même fonte dans les deux cas, déclarée ordinaire d'un côté, relation de l'autre. Composez a | b à côté de a \mid b : c'est la même barre, entourée de quantités d'air différentes. Le couple \| et \parallel fonctionne pareillement, tous deux en case "6B : \parallel (∥) est une relation et peut affirmer « est parallèle à », tandis que \| est un délimiteur ordinaire, destiné aux normes comme \|x\|. Se tromper de membre dans un tel couple est la cause la plus fréquente d'un espacement vaguement faux et inexplicable.

latex
% same glyph, different class: | is ordinary, \mid is a relation
\[ a | b \qquad a \mid b \]
% a bare letter is ordinary; \mathrel promotes it
\[ A R B \qquad A \mathrel{R} B \]
% the colon trap: ":" is a relation, \colon is punctuation
\[ f : A \to B \qquad f\colon A \to B \]

En pratique, il suffit donc de déclarer la classe soi-même. \mathrel{...} fait de son contenu une relation, \mathbin{...} en fait un opérateur binaire ; les deux appartiennent au LaTeX standard. Une lettre nue est un symbole ordinaire : A R B colle le R à ses voisins, alors que A \mathrel{R} B lui donne l'espacement de =. Le piège en sens inverse, c'est le deux-points. LaTeX déclare le caractère : comme une relation, si bien que f : A \to B entoure d'une pleine espace de relation un deux-points qui n'est qu'une ponctuation ; \colon existe comme \mathpunct précisément pour ce cas, d'où la forme recommandée f\colon A \to B. Les flèches relèvent elles aussi de la classe des relations — c'est pourquoi \to exige le mode mathématique — mais elles ont leur propre page.

Choisir entre \approx, \sim, \simeq et \cong

Une règle qui suffit : \approx (≈) pour des nombres presque égaux, \sim (∼) pour une relation d'équivalence ou « même ordre de grandeur », \simeq (≃) pour l'égalité asymptotique et l'homéomorphisme, \cong (≅) pour la congruence en géométrie et l'isomorphisme en algèbre. Les quatre appartiennent au LaTeX standard et ne demandent aucun package. Leur ressemblance n'a rien d'accidentel : chacun est le signe égal dont la rigidité a été relâchée d'un cran différent — raison pour laquelle les lecteurs se fient au nom de la commande plutôt qu'au dessin. Autour d'eux se rangent \equiv (≡) pour l'identité et la congruence modulo n, \propto (∝) pour la proportionnalité, \asymp (≍) pour « du même ordre », et \doteq (≐), dont le nom Unicode est « approaches the limit » mais que bien des auteurs lisent « égal par définition ». Comme \doteq et \asymp se lisent différemment selon les domaines, mieux vaut préciser le sens dès la première occurrence.

CommandeGlypheSignification / utilisation
==égalité ; se tape directement — classe relation
\neqdifférent de ; \ne est identique — LaTeX standard
\equividentiquement égal ; congruence a \equiv b \pmod n
\approxapproximativement égal ; numérique \pi \approx 3.14
\simrelation d'équivalence ou « même ordre de grandeur »
\simeqasymptotiquement égal ; homéomorphe
\congcongru ; isomorphe — \sim empilé sur =
\proptoest proportionnel à
\asympdu même ordre (analyse, théorie des nombres)
\dotequn point sur = ; « tend vers la limite » ou « égal par définition »

Trois des symboles qui viennent d'être cités n'existent dans aucune fonte. Ouvrez fontmath.ltx : \cong s'y révèle être \mathrel{\mathpalette\@vereq\sim}, un \sim empilé sur un = ; \doteq est \buildrel\textstyle.\over=, un point construit au-dessus du signe égal ; et \notin est un \in surimprimé d'une barre oblique. Le Computer Modern de Knuth ne contenait tout simplement pas ces glyphes, alors LaTeX les assemble au moment de la composition. L'anecdote a une portée pratique : un symbole assemblé se décale légèrement quand on change de fonte mathématique, et ce n'est pas un vrai caractère dans le PDF, donc il ne survit pas au copier-coller. Si cela compte — accessibilité, ou texte que les lecteurs extrairont —, compiler avec LuaLaTeX ou XeLaTeX plus unicode-math et une fonte mathématique OpenType transforme \cong en véritable caractère U+2245 et \doteq en U+2250.

\leq ou \leqslant : quelle forme de ≤ choisir

Les deux signifient exactement la même chose ; la différence relève du style maison, et \leqslant coûte un package. \leq (≤) et \geq (≥) sont du LaTeX standard, et les alias courts \le et \ge désignent rigoureusement le même caractère. \leqslant (⩽) et \geqslant (⩾) viennent d'amssymb et tracent le trait inférieur incliné, parallèle à l'angle qui le surmonte. Unicode traite les deux formes comme des points de code distincts — U+2264 « less-than or equal to » et U+2A7D « less-than or slanted equal to » — et non comme un caractère dans deux fontes : la préférence est donc une convention réelle, pas un caprice. Tranchez une fois pour tout le document. Sur une même page, ≤ mêlé à ⩽ passe simplement pour une coquille.

Pour « très inférieur à » et « très supérieur à », il y a \ll (≪) et \gg (≫), également en LaTeX standard. Chacun est un symbole unique et non deux < accolés : ne les fabriquez pas à la main. < et > se tapent directement — mais uniquement en mode mathématique. Écrivez A<B>C dans le texte courant avec le codage de fonte OT1 par défaut et vous obtiendrez A¡B¿C, car OT1 loge à ces deux emplacements un point d'exclamation et un point d'interrogation renversés. Lorsque l'ordre visé n'est pas une grandeur numérique — ordre partiel, priorité, raffinement —, la famille prec/succ est le choix conventionnel : \prec (≺), \succ (≻) et les formes avec égalité \preceq (⪯), \succeq (⪰), toutes standard. Enfin, si vous avez opté pour les inégalités inclinées, inutile de tout réécrire : un \let\leq\leqslant dans le préambule bascule le document entier et laisse le source lisible.

CommandeGlypheSignification / utilisation
<<inférieur à ; se tape directement en mode mathématique
>>supérieur à ; en mode texte, donne ¿
\leqinférieur ou égal ; \le est identique — LaTeX standard
\geqsupérieur ou égal ; \ge est identique — LaTeX standard
\lltrès inférieur à ; un seul symbole
\ggtrès supérieur à ; un seul symbole
\leqslantvariante inclinée de ≤ — exige amssymb
\geqslantvariante inclinée de ≥ — exige amssymb
\precprécède ; pour un ordre qui n'est pas une grandeur
\preceqprécède ou égale ; \succ ≻ et \succeq ⪰ en sont les miroirs
latex
\usepackage{amssymb}   % \leqslant, \geqslant, \nleq, \nmid ...
% decide the shape once, in the preamble
\let\leq\leqslant
\let\geq\geqslant
\[ 0 \leq x \leq 1, \qquad n \ll N, \qquad a \prec b \preceq c \]

Nier une relation : \neq, \not et amssymb

Utilisez la commande dédiée quand il en existe une — \neq, \notin, et la famille amssymb \nleq, \nmid, \nsubseteq — et ne repliez sur \not qu'à défaut. Voici toutefois la surprise : en LaTeX standard, \neq n'est pas du tout un glyphe distinct. fontmath.ltx contient la ligne \DeclareRobustCommand\neq{\not=}, \ne étant défini de la même façon ; \not= et \neq produisent donc une sortie identique au bit près. Le conseil habituel de « préférer \neq à \not= » porte ainsi sur le source et non sur le PDF : \neq énonce l'intention, se retrouve par une recherche, et c'est ce qu'un coauteur s'attend à lire. Il se transpose aussi mieux vers unicode-math, où \ne devient le vrai caractère U+2260 au lieu d'une surimpression.

Là où \not échoue vraiment, c'est sur les symboles pour lesquels il n'a jamais été ajusté. C'est un caractère unique — case "36 de la fonte des symboles — posé sur ce qui suit à taille, pente et position fixes, calibrées pour des signes à peu près aussi larges que =. Sur une relation large, la barre reste trop courte ; sur une relation haute ou inhabituelle, elle traverse au mauvais endroit. Comparez \not\leq à \nleq (≰), ou \not\subseteq à \nsubseteq (⊈) : les glyphes AMS dessinés exprès l'emportent à chaque fois. \not reste pourtant utile pour les combinaisons que personne n'a dessinées : \nequiv n'existe pas, aussi x \not\equiv y \pmod p est-il la façon standard d'écrire une non-congruence. Notez enfin que \notin (∉) a l'air d'un symbole AMS mais ne demande aucun package.

CommandeGlypheSignification / package requis
\neqdifférent ; LaTeX standard (se développe en \not=)
\notinn'appartient pas ; LaTeX standard (\in surimprimé d'une barre)
\nleqnon inférieur ou égal ; amssymb
\ngeqnon supérieur ou égal ; amssymb
\nsimnon semblable ; amssymb
\ncongnon congru / non isomorphe ; amssymb
\nsubseteqpas un sous-ensemble ; amssymb
\nparallelnon parallèle ; amssymb
\nmidne divise pas ; amssymb
\nprecne précède pas ; amssymb

Composer := correctement et définir sa propre relation

Pour « égal par définition », chargez mathtools et écrivez \coloneqq (≔) plutôt que de taper :=. Le défaut de la version tapée n'est pas l'espacement : LaTeX déclare : comme une relation et TeX ne met rien entre deux relations voisines, si bien que := sort bien serré. Le défaut est la hauteur. Le caractère : provient de la fonte de texte, où ses points sont bas, tandis que = chevauche l'axe mathématique — le deux-points paraît donc avoir glissé. mathtools fournit \coloneqq avec le deux-points relevé, son miroir \eqqcolon pour =:, et une option centercolon qui relève tous les deux-points du document. \coloneqq vient de mathtools et non d'amssymb : quand ! Undefined control sequence désigne \coloneqq, c'est en général cette confusion.

Pour placer quelque chose au-dessus d'une relation, le classique est \stackrel{\mathrm{def}}{=}. latex.ltx le définit comme \mathrel{\mathop{#2}\limits^{#1}} : quoi que l'on empile, le résultat est une relation. Le \overset d'amsmath fait le même travail mais conserve la classe du symbole de base au lieu d'imposer une relation — c'est ce qu'on veut lorsque la base est un opérateur binaire ; \underset s'occupe de l'autre côté. Et pour tout symbole employé plus de deux fois, définissez-le une fois et laissez la classe voyager avec lui : \newcommand{\divides}{\mathrel{|}} donne un signe de divisibilité toujours bien espacé, et si le dessin change plus tard, toutes les occurrences suivent. Voilà toute cette page en une phrase : ne rapiécez jamais l'espacement avec \, ou \; au point d'usage ; déclarez la classe et laissez TeX faire les comptes.

latex
\usepackage{mathtools}  % \coloneqq and \eqqcolon (loads amsmath too)
\newcommand{\divides}{\mathrel{|}}
\[ f(x) \coloneqq x^2 + 1, \qquad y \eqqcolon g(t) \]
% \stackrel always yields a relation; \overset keeps the base class
\[ a \stackrel{\mathrm{def}}{=} b, \qquad a \overset{\mathrm{def}}{=} b \]
\[ 2 \divides 10, \qquad x \not\equiv y \pmod{p} \]