El otro día estaba escribiendo una prueba que contenía una lista y accidentalmente escribí \item
dentro del proof
entorno (desde el amsthm
paquete) pero fuera de cualquier entorno de lista. Para mi sorpresa, ¡LaTeX compuso el archivo sin quejarse! Pero tan pronto como salí \item
del proof
entorno, 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
( quotation
y algunos otros) se implementan como listas. Por ejemplo, center
está 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 \item
está 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 proof
se define con trivlist
.
Élpodríaser posible no permitirlo \item
en dichos entornos, haciendo que trivlist
se 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 trivlist
código como
\let\item\@defaultitem
donde los comandos \@itemerr
y \@defaultitem
son hipotéticos. Actualmente, el kernel no hace esto (y no lo hará, ya que podría dañar los documentos existentes).