Que signifie l’erreur : « Something’s wrong–perhaps a missing \item
» ?#
Message :
Something's wrong--perhaps a missing \item
Origine : LaTeX
1. Cas où il manque réellement une commande \item
#
Parfois le message d’erreur indique bien l’erreur en cours : il manque
une commande \item
. L’exemple suivant va évidemment générer cette erreur :
\begin{itemize}
Et hop !
\end{itemize}
Vous pouvez également faire apparaître l’erreur alors que tout semble correct à première vue :
\begin{tabular}{l}
\begin{enumerate}
\item et toc !\\
\item et paf !
\end{enumerate}
\end{tabular}
L’erreur tombe au moment où la commande \\
tente d’agir. Si vous souhaitez
numéroter des cellules dans une table, il ne faut surtout pas agir ainsi.
Vous devez le faire un peu plus manuellement :
\newcounter{tablecell}
...
\begin{tabular}{l}
\stepcounter{tablecell}
\thetablecell. et toc !\\
\stepcounter{tablecell}
\thetablecell. et paf !
\end{tabular}
Il y a ici moyen de mieux présenter ce code. Définissons ici une commande
\numbercell
:
\newcounter{tablecell}
...
\newcommand*{\numbercell}{%
\stepcounter{tablecell}%
\thetablecell. % **
}
ce qui donnera le code principal suivant :
\setcounter{tablecell}{0}
\begin{tabular}{l}
\numbercell foo\\
\numbercell bar
\end{tabular}
Notez l’introduction délibérée d’un espace dans le cadre de la commande, marqué par des astérisques.
2. Cas où la commande \item
n’est pas liée à l’erreur#
L’erreur apparaît également régulièrement lorsque vous n’auriez jamais pensé
qu’une commande \item
puisse être appropriée.
Le message d’erreur est produit par une commande \addvspace
(qui ajoute
un espace vertical) rencontrée en mode horizontal. Par exemple, en oubliant
de refermer une accolade d’un \mbox
:
\mbox{Et voilà une \section{belle section} qui va tomber en erreur
Ici, la commande \section
qui exécute \addvspace
en interne
est maintenant utilisée en mode horizontal. Il convient d’identifier la commande
qui appelle le \addvspace
provoquant l’erreur, et de comprendre
pourquoi elle est mal utilisée.
En voici un exemple :
\fbox{%
\begin{alltt}
Et toc !
\end{alltt}%
}
L’erreur se produit aussi en remplaçant \fbox
par \mbox
, \framebox
ou \makebox
. En effet, l’environnement alltt
utilise une liste « triviale »,
cachée dans sa définition (d’ailleurs, l’environnement itemize
a également
cette construction à l’intérieur de lui-même et \begin{itemize}
ne fonctionnera pas non plus dans \fbox
). La construction de liste cherche
à se faire entre les paragraphes et crée un nouveau paragraphe
de son propre chef. Dans la commande \fbox
, cela ne fonctionne pas
et les commandes suivantes supposent qu’il manque une commande \item
.
Pour résoudre cette erreur plutôt cryptique, il faut mettre le alltt
dans une boîte autorisant des paragraphes :
\fbox{%
\begin{minipage}{0.75\textwidth}
\begin{alltt}
Et toc !
\end{alltt}
\end{minipage}
}
Le code ci-dessus produit une boîte beaucoup trop large pour le texte. Vous
pourriez vouloir utiliser quelque chose qui autorise
des boîtes de taille variable
à la place de l’environnement minipage
.
Curieusement, bien que l’environnement verbatim
ne fonctionne pas
dans un argument de commande \fbox
(consultez ici
« Pourquoi le mode verbatim ne marche pas toujours ? »),
vous obtenez une erreur qui se plaint de la commande \item
: la liste interne
de l’environnement remonte l’anomalie avant même que verbatim
n’ait eu
la chance d’agir.
Une autre utilisation (apparemment) évidente de \fbox
génère aussi cette erreur :
\fbox{\section{Un titre encadré}}
C’est un cas où vous devez simplement être plus subtil : vous devriez soit écrire vos propres commandes pour remplacer les commandes de sectionnement de LaTeX, soit chercher une alternative dans les extensions évoquées dans la question « Comment modifier le style des titres de sectionnement ? ».
Sources
FAQ erreurs - Lettre S, sur le site Developpez.com
LaTeX Companion, 2e édition, Frank Mittelbach, Michel Goossens, Johannes Braams, David Carlisle, Chris Rowley (Pearson, 2006)