Outro dia eu estava digitando uma prova contendo uma lista e acidentalmente escrevi \item
dentro do proof
ambiente (do amsthm
pacote), mas fora de qualquer ambiente de lista. Para minha surpresa, o LaTeX digitou o arquivo sem reclamar! Mas assim que saí \item
do proof
ambiente, o LaTeX reclamou de um "solitário \item
".
Então esse código dá um erro
\documentclass{article}
\usepackage{amsthm}
\begin{document}
\begin{proof}
Some text
\end{proof}
\item
\end{document}
embora este código não
\documentclass{article}
\usepackage{amsthm}
\begin{document}
\begin{proof}
\item
Some text
\end{proof}
\end{document}
O que está acontecendo aqui?
Responder1
Todos os ambientes semelhantes a teoremas, junto com center
, flushleft
, flushright
, quote
( quotation
e alguns outros) são implementados como listas. Por exemplo, center
é definido por
% latex.ltx, line 3965:
\def\center{\trivlist \centering\item\relax}
\def\endcenter{\endtrivlist}
e
\begin{center}
something
\item
\end{center}
não geraria um erro, porque \item
é permitido trivlist
(que é o ambiente básico no qual as listas gerais são baseadas), mas o resultado seria engraçado.
Isso é feito para garantir que as listas dentro desses ambientes funcionem corretamente. Também proof
é definido com trivlist
.
Istopoderser possível proibir \item
em tais ambientes, restabelecendo trivlist
o significado correto para \item
. Algo como
\def\center{\trivlist \centering\item\relax\let\item\@itemerr}
\def\endcenter{\endtrivlist}
e adicionando ao código um trivlist
código como
\let\item\@defaultitem
onde os comandos \@itemerr
e \@defaultitem
são hipotéticos. O kernel atualmente não faz isso (e não fará, pois isso pode quebrar os documentos existentes).