有一天,我正在输入包含列表的证明,我不小心在环境\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
命令是假设的。内核目前不执行此操作(并且不会执行此操作,因为这可能会破坏现有文档)。