Почему \item разрешен в средах проверки?

Почему \item разрешен в средах проверки?

На днях я печатал доказательство, содержащее список, и случайно написал \itemвнутри proofсреды (из amsthmпакета), но вне среды списка. К моему удивлению, LaTeX набрал файл без жалоб! Но как только я вышел \itemза пределы proofсреды, LaTeX пожаловался на "одинокий \item''.

Итак, этот код выдает ошибку

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

в то время как этот код не

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

Что тут происходит?

решение1

Все среды, подобные теоремам, а также center, flushleft, flushright, quote, quotation(и некоторые другие) реализованы в виде списков. Например, centerопределяется как

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

и

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

не вызовет ошибку, поскольку \itemразрешено в trivlist(что является базовой средой, на которой основаны общие списки), но результат будет забавным.

Это делается для того, чтобы гарантировать, что списки внутри этих сред работают правильно. Также proofопределяется с помощью trivlist.

Этомощьможно запретить \itemв таких средах, сделав trivlistвосстановление правильного значения для \item. Что-то вроде

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

и добавление к коду trivlistтакого кода, как

\let\item\@defaultitem

где команды \@itemerrи \@defaultitemявляются гипотетическими. В настоящее время ядро ​​этого не делает (и не будет делать, так как это может нарушить существующие документы).

Связанный контент