¿Por qué se permite \item en entornos de prueba?

¿Por qué se permite \item en entornos de prueba?

El otro día estaba escribiendo una prueba que contenía una lista y accidentalmente escribí \itemdentro del proofentorno (desde el amsthmpaquete) pero fuera de cualquier entorno de lista. Para mi sorpresa, ¡LaTeX compuso el archivo sin quejarse! Pero tan pronto como salí \itemdel proofentorno, LaTeX se quejó de "soledad \item".

Entonces este código da un error.

\documentclass{article}
\usepackage{amsthm}
\begin{document}
\begin{proof}
Some text
\end{proof}
\item
\end{document}

mientras que este código no

\documentclass{article}
\usepackage{amsthm}
\begin{document}
\begin{proof}
\item
Some text
\end{proof}
\end{document}

¿Que está pasando aqui?

Respuesta1

Todos los entornos tipo teorema, junto con center, flushleft, flushright, quote( quotationy algunos otros) se implementan como listas. Por ejemplo, centerestá definido por

% latex.ltx, line 3965:
\def\center{\trivlist \centering\item\relax}
\def\endcenter{\endtrivlist}

y

\begin{center}
something
\item
\end{center}

no generaría un error, porque \itemestá permitido trivlist(que es el entorno básico en el que se basan las listas generales), pero el resultado sería divertido.

Esto se hace para garantizar que las listas dentro de estos entornos funcionen correctamente. También proofse define con trivlist.

Élpodríaser posible no permitirlo \itemen dichos entornos, haciendo que trivlistse restablezca el significado correcto de \item. Algo como

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

y agregando al código trivlistcódigo como

\let\item\@defaultitem

donde los comandos \@itemerry \@defaultitemson hipotéticos. Actualmente, el kernel no hace esto (y no lo hará, ya que podría dañar los documentos existentes).

información relacionada