我正在尝试在documentclasssolution
的环境中使用表格环境exam
。不幸的是,这不起作用,正如这问题是,table
它也是一个浮点数。
解决方案环境内部使用 \vbox,因此不允许在该环境中使用浮动。您可以使用中心环境,而不是使用浮动环境表
由于它们在环境之外工作,solution
我正在寻找一种方法来修改\begin{table} ... \end{table}
它,使其在解决方案之外运行,并在内部用它替换自身\begin{center}...\end{center}
。
幸运的是这帖子显示,很容易找出您是否处于solution
环境中。我测试了它,它有效。
但是,由于我必须适应exam
文档类的文档很多,并且也用于其他文档类,所以我最好不要创建新环境,而是适应table
与发生的情况类似的环境这里到figure
或这里到表格环境。这是我目前的代码:
更新:我不知道为什么,但用\center
而不是\begin{center}
错误就消失了,还允许一种方法来处理可选参数table
\documentclass{exam}
\let\oldtable\table
\let\endoldtable\endtable
\renewenvironment{table}[1][h]
{\ifinner \center \else \oldtable[#1] \fi}
{\ifinner \endcenter \else \endoldtable \fi}
\begin{document}
\begin{questions} %error is no \question
\printanswers
\question{Question featuring a table environment}
\begin{table}[h]
\begin{tabular}{|ll|}
Question & in \\
Question & part \\
\end{tabular}
\end{table}
\begin{solution}
Solution featuring a table environment
\begin{table}[h]
\begin{tabular}{|ll|}
Solution & in \\
Solution & part \\
\end{tabular}
\end{table}
\end{solution}
\end{questions}
\end{document}
但我担心我没有处理正确的参数table
,因为这会导致错误:未知的浮点选项“[”。 \begin{table}[
该解决方案在“内部”之外工作,并且可以处理可选参数table
,但是如果\ifinner
为真,我会收到错误
额外},或者被遗忘的\endgroup。\end{table}
table
有人对如何根据环境进行适应有什么建议吗?
非常感谢
答案1
我找到了一个解决方案,如果其他人也遇到这个问题,我会在这里发布它作为答案。问题(事后看来很明显)是\ifinner
一开始可以工作,因为它是一个浮动环境,但一开始就\table
不再是了。因此\endcenter
无法达到。我尝试了几种替代方法,发现最简单的方法是定义一个自定义布尔值来检查是否达到ifinner
修改的table
,并使用它来设置布尔值。\endtable
然后可以使用这个布尔值来正确结束它。
\let\oldtable\table
\let\endoldtable\endtable
\newif\ifinsidefloatingenv %set boolean for
\insidefloatingenvfalse %not necessary but to be sure its false
\renewenvironment{table}[1][h]
{\ifinner \center \insidefloatingenvtrue \else \oldtable[#1] \fi}
{\ifinsidefloatingenv \endcenter \insidefloatingenvfalse \else \endoldtable \fi}