Que signifie l’erreur : « Argument of ⟨commande⟩ has an extra } » ?#
Message :
Argument of ⟨commande⟩ has an extra }
Origine : TeX
Une accolade droite a été utilisée à la place d’un argument obligatoire
de commande (par exemple, \mbox}
). Les commandes fragiles,
lorsqu’elles sont utilisées sans \protect
dans un argument mouvant,
sont souvent cassées sous une forme qui produit cette erreur
ou l’une des erreurs « Extra...
»
vues ailleurs.
Vous avez regardé votre code source et vous n’avez trouvé aucun signe
d’un « }
» mal placé… En fait, ce message est une manière un peu énigmatique
de vous dire que vous avez placé
une commande fragile
dans un argument mouvant. Si ces termes ne vous parlent pas, la question
« À quoi sert la « protection » ? » vous explique
ces deux concepts propres à LaTeX.
1. Quelques exemples#
La commande \footnote
est un cas classique de commande fragile et la mettre
dans l’argument d’une commande \section
, dont l’argument est
par défaut mouvant, va poser problème. En voici un exemple, ici nommé
le « cas \section
».
\section{Un beau titre\footnote{je n'ai pas mieux à proposer}}
Vous recevrez alors le message d’erreur suivant :
! Argument of \@sect has an extra }.
Ceci arrive de la même manière avec les légendes (l’exemple suivant est
une version simplifiée d’un exemple trouvé sur comp.text.tex
),
avec le « cas \caption
».
\caption{Énergie : \[ e=mc^2 \]}
Cet exemple va générer l’erreur suivante :
! Argument of \@caption has an extra }.
Le cas suivant, pourtant à peine différent, va donner une réponse autre.
\caption{Énergie : \( e=mc^2 \)}
Ce cas va s’avérer plus ennuyeux que ceux vus auparavant :
il n’y a pas d’erreur lors de la première exécution du code… mais,
lors de la deuxième exécution, l’erreur apparaît lors de la génération
de la liste des figures avec la commande \listoffigures
(ou des tables
avec la commande \listoftables
) :
! LaTeX Error : Bad math environment delimiter.
2. Quelques solutions#
2.1. Utiliser la commande \protect
#
La solution consiste normalement à remplacer votre commande fragile
par une commande robuste ou de forcer votre commande à devenir robuste
en la préfixant de la commande \protect
, ce qui donnerait
dans le cas \section
ci-dessus :
\section{Un beau titre\protect\footnote{je n'ai pas mieux à proposer}}
2.2. Ne pas utiliser de commande fragile#
Toutefois, dans le cas \section
comme dans le cas \caption
, vous pouvez
séparer l’argument mouvant en utilisant la syntaxe complète
de la commande \section[mouvant]{statique}
. Ceci donne
une autre solution classique : omettre tout simplement la commande fragile
de l’argument mouvant. De cette manière, le cas \caption
serait rédigé
ainsi :
\caption[Énergie (équation d'Einstein)]{Énergie : \( E=mc^2 \)}
2.3. Utiliser la commande \ensuremath
avec les mathématiques#
En pratique, l’insertion de mathématiques dans un argument mouvant
a été traitée en LaTeX avec la commande robuste \ensuremath
:
\caption{Energie : \ensuremath{E=mc^2}}
3. En conclusion#
Il est donc toujours intéressant de chercher des alternatives à l’utilisation
de la méthode \protect
.
Les notes de bas de page peuvent créer des cas encore plus complexes, la question « Comment mettre une note de bas de page dans un titre ? » traite spécifiquement de ces cas.
Sources
FAQ erreurs - Lettre A, sur le site Developpez.com
LaTeX Companion, 2e édition, Frank Mittelbach, Michel Goossens, Johannes Braams, David Carlisle, Chris Rowley (Pearson, 2006)