Por que \item é permitido em ambientes de prova?

Por que \item é permitido em ambientes de prova?

Outro dia eu estava digitando uma prova contendo uma lista e acidentalmente escrevi \itemdentro do proofambiente (do amsthmpacote), mas fora de qualquer ambiente de lista. Para minha surpresa, o LaTeX digitou o arquivo sem reclamar! Mas assim que saí \itemdo proofambiente, 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( quotatione 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 \itemem tais ambientes, restabelecendo trivlisto significado correto para \item. Algo como

\def\center{\trivlist \centering\item\relax\let\item\@itemerr}
\def\endcenter{\endtrivlist}

e adicionando ao código um trivlistcódigo como

\let\item\@defaultitem

onde os comandos \@itemerre \@defaultitemsão hipotéticos. O kernel atualmente não faz isso (e não fará, pois isso pode quebrar os documentos existentes).

informação relacionada