Délimiteurs (parenthèses)

LaTeX n’a pas de notion de « parenthèse ». Il a une table de délimiteurs. Un caractère n’y figure que si la fonte fournit les morceaux permettant de l’allonger verticalement, et placer autre chose après \left fait répondre TeX sur-le-champ : ! Missing delimiter (. inserted). Autrement dit, les parenthèses disponibles sont décidées par la fonte, pas par le goût. Cette page sert à retrouver ce qui figure sur cette table : parenthèses, crochets, accolades, chevrons \langle et \rangle, le | et le \lvert de la valeur absolue, les parties entières \lfloor et \lceil, jusqu’à celles qu’on cherche en vain : les doubles crochets ⟦ ⟧ et les coins ⌜ ⌝. Le choix entre \left/\right et la famille \big pour ajuster une parenthèse à son contenu relève de la page mathématique dédiée.

! Missing delimiter (. inserted). — quels caractères ont le droit d’être des parenthèses

Le message signale qu’après \left ou \right se trouve quelque chose qui n’est pas un délimiteur. Sur TeX Live 2024, $\left\alpha x \right\alpha$ produit cette ligne deux fois. La raison se lit dans les déclarations du noyau. Un délimiteur se définit par \DeclareMathDelimiter{commande}{classe}{fonte petite}{position}{fonte grande}{position} : il désigne à la fois le glyphe employé en taille normale et l’emplacement des pièces extensibles. Voici la ligne réelle de fontmath.ltx : \DeclareMathDelimiter{\langle}{\mathopen}{symbols}{"68}{largesymbols}{"0A}. \alpha n’a pas de telle déclaration ; il n’y a donc rien à étirer.

Cette structure en deux volets explique tout le reste de la page. Un symbole doté d’une petite forme utilisable mais sans grande forme<, ou \mid — ne peut pas suivre \left ; inversement, un symbole qui n’a que la grande forme, comme \lgroup plus bas, n’imprime rien dans une formule ordinaire. La première colonne de chaque tableau porte en outre une seconde propriété, plus discrète : la classe nommée dans la déclaration. \langle est \mathopen, \rangle est \mathclose, et | est \mathord, un symbole ordinaire. Cette différence règle l’espacement alentour. Le délimiteur nul ., employé quand on ne veut rien tracer d’un côté, appartient à la même table ; la page liée détaille l’usage de \left.

latex
% a delimiter names a small glyph AND the growable pieces
% \DeclareMathDelimiter{\langle}{\mathopen}{symbols}{"68}{largesymbols}{"0A}
\[
  \langle a, b \rangle
  \qquad
  \left\langle \frac{a}{b} \right\rangle
\]
% $\left\alpha x\right\alpha$  ->  ! Missing delimiter (. inserted).

Saisir (, [, \{ et \langle — et pourquoi jamais <

Les parenthèses ( ) et les crochets [ ] se tapent directement ; les accolades non. { et } sont dans LaTeX des caractères réservés au groupement des arguments : tapés seuls, ils ne produisent rien sur la page ; on écrit \{ et \}. Les chevrons sont plus délicats : les < et > du clavier sont des signes d’inégalité (\mathrel) et non des parenthèses. Pour les produits scalaires et la notation bra-ket, on emploie \langle (⟨) et \rangle (⟩). Les formes longues \lbrack, \rbrack, \lbrace et \rbrace sont des alias qui donnent les mêmes caractères que [ ] \{ \} ; elles se révèlent utiles dans un argument de macro, où un [ nu pourrait passer pour un argument optionnel. Avec mathtools, \lparen et \rparen s’utilisent de la même façon.

EntréeGlypheClasseUsage / notes
( )( )open / closesaisie directe ; la paire ordinaire
[ ][ ]open / close\lbrack et \rbrack sont des alias
\{ \}{ }open / close{ est réservé ; \lbrace et \rbrace équivalents
\langle \rangle⟨ ⟩open / closeproduits scalaires, bra-ket ; < > sont des relations
\lparen \rparen( )open / closealias de mathtools ; sortie identique à ( )
.(rien)nulldélimiteur nul ; laisse vide un côté de \left/\right

Les chevrons dans le texte courant recèlent un piège de plus. Sous OT1, le codage par défaut de pdfLaTeX, les positions de < et > contiennent ¡ et ¿. Écrivez A <x> B dans le corps sur TeX Live 2024 : la chaîne extraite du PDF est A ¡x¿ B. C’est là tout le fameux bogue où la ponctuation inversée espagnole surgit de nulle part. Deux remèdes : charger \usepackage[T1]{fontenc}, qui remet < et > à leur place, ou dire ce que l’on veut dire avec \textless et \textgreater pour les signes d’inégalité, ou \textlangle et \textrangle pour de vrais chevrons 〈 〉. Ces derniers relèvent de TS1, mais le noyau les contient depuis 2020 : aucun package supplémentaire.

|, \vert, \mid, \Vert, \|, \lvert : six façons de tracer un trait

Elles se ressemblent, mais les six se répartissent en trois groupes. D’abord le glyphe. Dans fontmath.ltx, |, \vert et le \arrowvert évoqué plus bas pointent tous vers la même position ("6A dans cmsy) ; mesurés, les trois font 2,77779 pt. \|, \Vert et \Arrowvert partagent de même la position "6B, à 5,00002 pt. Autrement dit, écrire \| ou \Vert ne change pas un seul caractère de la sortie. Ensuite la classe. Toutes sont \mathord, des symboles ordinaires : ni ouvrants ni fermants. Les \lvert/\rvert et \lVert/\rVert d’amsmath reprennent les mêmes glyphes et leur donnent une classe ouvrante et une classe fermante, ce que réclament précisément la valeur absolue et la norme.

Le troisième groupe se réduit à \mid. Il ne diffère pas par le glyphe mais par la classe : il est déclaré \mathrel, une relation. Dans la notation en compréhension — « les x tels que… » —, le trait n’est pas une parenthèse mais une relation signifiant « tel que » ; \mid est donc le bon choix. L’écart se mesure : sur TeX Live 2024, $\{x \mid x>0\}$ fait 48,09702 pt tandis que $\{x | x>0\}$ et $\{x \vert x>0\}$ font tous deux 42,5416 pt. Les 5,55542 pt d’écart sont exactement les 5 mu d’espace de relation de chaque côté. Si un ensemble écrit avec un | nu paraît étrangement serré, c’est cet espace qui manque.

EntréeGlypheClasseUsage / notes
| \vert|ordle même caractère ; 2,77779 pt ; ni ouvrant ni fermant
\| \Vertordle même caractère ; 5,00002 pt ; la double barre de la norme
\mid|rel« tel que » ; le bon choix en notation par compréhension
\lvert \rvert| |open / closevaleur absolue ; exige amsmath
\lVert \rVert‖ ‖open / closenormes ; exige amsmath
\arrowvert \Arrowvert| ‖ordidentiques à \vert/\Vert en taille normale ; seules les pièces extensibles diffèrent
latex
\usepackage{amsmath}   % \lvert \rvert \lVert \rVert
\[
  \lvert x \rvert \;=\; \lvert -x \rvert,
  \qquad
  \lVert v \rVert \;=\; \sqrt{\langle v, v \rangle},
  \qquad
  \{\, x \mid x > 0 \,\}
\]

Partie entière : \lfloor, \lceil, et ce que signifient l et r

L’arrondi par défaut, ⌊x⌋, s’écrit \lfloor et \rfloor ; l’arrondi par excès, ⌈x⌉, \lceil et \rceil. Les quatre sont en LaTeX standard. Les l et r initiaux valent pour left (ouvrant) et right (fermant), règle qui vaut aussi pour \lbrack/\rbrack, \langle/\rangle et \lvert/\rvert. Retenez que seul le bas a des coins pour la partie entière inférieure et seul le haut en a pour la supérieure, et vous ne confondrez pas non plus les glyphes. Les deux symboles ont été introduits par Kenneth E. Iverson dans son livre A Programming Language de 1962. Auparavant, [x] portait le sens d’arrondi par défaut, sans symbole correspondant pour l’arrondi par excès — et [x] se confondait avec un crochet ordinaire. Scinder la forme en une moitié haute et une moitié basse : voilà l’invention.

latex
\[
  \lfloor x \rfloor \le x \le \lceil x \rceil,
  \qquad
  \left\lfloor \frac{n}{2} \right\rfloor
  \qquad
  \left\lceil \log_2 n \right\rceil
\]

Les flèches et les barres sont aussi des délimiteurs : \uparrow, /, \backslash

La table des délimiteurs ne contient pas que des parenthèses. Les six flèches verticales\uparrow (↑), \downarrow (↓), \updownarrow (↕) et les formes à double trait \Uparrow (⇑), \Downarrow (⇓), \Updownarrow (⇕) — sont déclarées avec \DeclareMathDelimiter dans fontmath.ltx : après \left/\right, elles s’allongent à la hauteur du contenu. Leur classe est toutefois \mathrel : employées normalement dans une formule, elles se comportent en flèches. Une même commande est flèche ou parenthèse selon l’endroit où elle se trouve. On les rencontre pour marquer une plage à côté d’une matrice, ou en guise de trait signalant une limite.

Les barres obliques appartiennent à la même table. La barre / se tape directement ; la barre inverse s’écrit \backslash (\), car un \ nu est la commande de saut de ligne. On les emploie pour les ensembles quotients, G \backslash H, ou dans une paire \left. … \right/ qui donne un séparateur s’étirant en diagonale. L’opérateur de différence ensembliste \setminus lui ressemble mais constitue une autre commande, de classe \mathbin — voir la page des symboles d’ensembles et de logique.

EntréeGlypheClasseUsage / notes
\uparrow \downarrow↑ ↓reltrait simple ; bidirectionnel : \updownarrow
\Uparrow \Downarrow⇑ ⇓reldouble trait ; bidirectionnel : \Updownarrow
//ordsaisie directe ; s’étire en séparateur diagonal
\backslash\ordensembles quotients ; un \ nu est le saut de ligne

$\lgroup$ n’imprime rien : les délimiteurs qui n’existent qu’en grande taille

Cinq commandes — \lgroup, \rgroup, \lmoustache, \rmoustache et \bracevertn’ont aucun glyphe en taille normale. Dans la déclaration vue en tête de page, leur position « petite » ne désigne pas un caractère d’une fonte ordinaire mais une pièce servant à assembler un grand symbole. Vérifié sur TeX Live 2024, le symptôme est spectaculaire : $\lgroup x \rgroup$ occupe 23,49307 pt (contre 13,49307 pt pour $( x )$), mais pdftotext n’en extrait qu’un caractère, x. Les deux parenthèses atterrissent dans la zone privée d’Unicode (U+F8F3 et U+F8FE) et ne ressemblent pas davantage à des parenthèses sur la page. $\lmoustache x \rmoustache$ fait pire : l’extraction donne zx{, les numéros de position des pièces se lisant directement comme z et {.

La conclusion est simple : toujours employer ces cinq-là dans une paire \left/\right ou avec \bigl/\Bigl \lgroup et \rgroup sont des parenthèses plus épaisses aux coins plus anguleux, efficaces dans une grande formule hors texte. \lmoustache et \rmoustache sont les moitiés supérieure et inférieure d’une grande accolade, utiles pour des besoins particuliers comme séparer les lignes d’une disjonction de cas. \bracevert, \arrowvert et \Arrowvert sont littéralement les pièces droites qui servent à prolonger verticalement accolades et flèches. Pour la même raison, mieux vaut ne pas écrire ces trois-là en ligne non plus.

latex
% these have no text-size glyph — always pair them with \left/\right or \big
\[
  \left\lgroup \frac{a}{b} \right\rgroup
  \qquad
  \left\lmoustache \frac{a}{b} \right\rmoustache
\]
% $\lgroup x \rgroup$ alone prints no brackets at all

⟦ ⟧ et ⌜ ⌝ : dans quel package trouver les parenthèses absentes du standard

Les doubles crochets de la sémantique dénotationnelle, ⟦M⟧, sont \llbracket et \rrbracket de stmaryrd ; les coins ⌜ ⌝ de la théorie de la démonstration et de la citation à la Quine sont \ulcorner et \urcorner d’amssymb (la paire inférieure étant \llcorner et \lrcorner). Ni les uns ni les autres ne figurent dans le LaTeX standard : écrits sans le package, ils donnent ! Undefined control sequence. Sous XeLaTeX ou LuaLaTeX avec unicode-math, les doubles crochets prennent les noms \lBrack et \rBrack (U+27E6 et U+27E7).

Un piège ici reste invisible tant qu’on n’ouvre pas le package : au sein d’un même package, certains symboles sont déclarés comme délimiteurs et d’autres non. Dans stmaryrd.sty, \llbracket et \rrbracket sont des \DeclareMathDelimiter, tandis que \llparenthesis / \rrparenthesis (⦇ ⦈) et \Lbag / \Rbag (⟅ ⟆) sont des \DeclareMathSymbol — donc des symboles de taille fixe. Sur TeX Live 2024, $\left\llparenthesis \frac{a}{b} \right\rrparenthesis$ renvoie sans surprise ! Missing delimiter (. inserted). Retenir que \llbracket s’étire et que \llparenthesis ne s’étire pas évite une déconvenue.

CommandeGlyphePackageExtensible ? / notes
\llbracket \rrbracket⟦ ⟧stmaryrds’étire ; le ⟦M⟧ de la sémantique dénotationnelle
\ulcorner \urcorner⌜ ⌝amssymbtaille fixe ; citation de Quine, numérotation de Gödel
\llcorner \lrcorner⌞ ⌟amssymbtaille fixe ; les coins inférieurs
\llparenthesis \rrparenthesis⦇ ⦈stmaryrdne s’étire pas ; erreur après \left
\Lbag \Rbag⟅ ⟆stmaryrdne s’étire pas ; parenthèses de multiensembles
\lBrack \rBrack⟦ ⟧unicode-mathle nom des doubles crochets sous XeLaTeX/LuaLaTeX

Un dernier mot sur ce qui subsiste dans le PDF. Extrayez le texte d’un PDF contenant \langle : vous obtenez U+27E8, MATHEMATICAL LEFT ANGLE BRACKET, qui se recolle bien en chevron. Les ⟦ ⟧ de stmaryrd, au contraire, exposent les numéros de position bruts de leur propre fonte : sur TeX Live 2024, pdftotext les extrait sous la forme J et K. La différence compte lorsque des relecteurs copient des formules depuis le PDF pour en discuter ; un article usant beaucoup de doubles crochets gagne donc à passer sur un moteur Unicode avec unicode-math.

document.tex
\usepackage{amssymb}    % \ulcorner \urcorner \llcorner \lrcorner
\usepackage{stmaryrd}   % \llbracket \rrbracket \Lbag \Rbag
% ...
\[
  \llbracket M \rrbracket_\rho
  \qquad
  \left\llbracket \frac{a}{b} \right\rrbracket
  \qquad
  \ulcorner \varphi \urcorner
\]