Использование таблицы внутри среды решения экзаменационного документакласса

Использование таблицы внутри среды решения экзаменационного документакласса

Я пытаюсь использовать окружение таблицы внутри solutionокружения examкласса документа. К сожалению, это не работает так, как указано вэтотвопрос, так как tableэто тоже число с плавающей точкой.

Среда решения внутренне использует \vbox, и это имеет следствием то, что плавающие элементы не допускаются внутри этой среды. Вместо использования таблицы плавающей среды вы можете использовать среду центра

Поскольку они работают вне solutionсреды, я ищу способ модификации, \begin{table} ... \end{table}чтобы они действовали так, как они действуют вне решения, а внутри заменяют себя на \begin{center}...\end{center}.

К счастью, какэтотпост показывает, что легко узнать, находитесь ли вы внутри solutionсреды. Я проверил это, и это работает.
Однако, поскольку документы, которые мне нужно адаптировать к examdocumentclass, многочисленны и также используются в других documentclass, я бы в идеале не создавал новую среду, а адаптировал среды, 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правильно, так как это приводит к ошибке: Неизвестная опция float `['. \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}

Связанный контент