為什麼在證明環境中允許 \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命令是假設的。核心目前不會這樣做(而且也不會這樣做,因為這可能會破壞現有文件)。

相關內容