有人能解释一下下面这个例子中发生了什么吗?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
。