嵌套列表环境的奇怪行为

嵌套列表环境的奇怪行为

有人能解释一下下面这个例子中发生了什么吗?exam在我看来,这看起来像是文档类中的一个错误。

\documentclass{exam}
\begin{document}
\begin{questions}
\question
This is a question.
\begin{parts}
\part
\begin{subparts}
Text in the wrong place.
\subpart
A subpart.
\end{subparts}
\end{parts}
\end{questions}
\end{document}

环境subparts是使用列表定义的,所以我预计“文本位置错误”会触发“缺少项目”错误,但事实并非如此。

考试错误

答案1

不,这不是类中的错误exam。这是列表的行为(也许是意外的?),如本例所示,在article标准itemize环境中;以下代码不会产生任何错误:

\documentclass{article}

\begin{document}

\begin{itemize}
\item
\begin{itemize}
Some test text here
\item First subitem?
\end{itemize}
\end{itemize}

\end{document}

在此处输入图片描述

但是请注意,“Some test here”和“First subitem?”现在具有二级缩进,并且前者有标签,而后者没有。

所发生的情况是,整个内部项目被\item外部项目化itemize,外部项目将挑选“此处有一些测试文本”,\item并且不会触发任何错误。

在 LaTeX 内核中可以发现(这里只显示一些相关部分):

def\item{%
\@inmatherr\item
\@ifnextchar [\@item{\@noitemargtrue \@item[\@itemlabel]}}

\def\@item[#1]{%
\if@noparitem
\@donoparitem
\else
\if@inlabel
\indent \par
\fi
\ifhmode
\unskip\unskip \par
\fi
\if@newlist
<some more code goes here>
}

当找到内部时\item,TeX 处于水平模式,因此唯一的效果就是命令的效果\par

当你为外部提供一些文本时,会发生一些不同的事情\item

\documentclass{article}

\begin{document}

\begin{itemize}
\item A
\begin{itemize}
Some test text here
\item First subitem?
\end{itemize}
\end{itemize}

\end{document}

这次出现了熟悉的错误

! LaTeX Error: Something's wrong--perhaps a missing \item.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.9 \item F
           irst subitem?
? 

被触发。

您的示例代码也发生了同样的情况,因为所涉及的环境是根据 定义的\list

相关内容