使用考试文档类的解决方案环境内的表

使用考试文档类的解决方案环境内的表

我正在尝试在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}

相关内容