为什么在证明环境中允许使用 \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

所有定理类环境以及centerflushleftflushrightquotequotation以及一些其他环境)都以列表形式实现。例如,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命令是假设的。内核目前不执行此操作(并且不会执行此操作,因为这可能会破坏现有文档)。

相关内容