有一天,我正在輸入包含列表的證明,我不小心在環境\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
命令是假設的。核心目前不會這樣做(而且也不會這樣做,因為這可能會破壞現有文件)。