
Я пытаюсь использовать окружение таблицы внутри solution
окружения exam
класса документа. К сожалению, это не работает так, как указано вэтотвопрос, так как table
это тоже число с плавающей точкой.
Среда решения внутренне использует \vbox, и это имеет следствием то, что плавающие элементы не допускаются внутри этой среды. Вместо использования таблицы плавающей среды вы можете использовать среду центра
Поскольку они работают вне solution
среды, я ищу способ модификации, \begin{table} ... \end{table}
чтобы они действовали так, как они действуют вне решения, а внутри заменяют себя на \begin{center}...\end{center}
.
К счастью, какэтотпост показывает, что легко узнать, находитесь ли вы внутри solution
среды. Я проверил это, и это работает.
Однако, поскольку документы, которые мне нужно адаптировать к exam
documentclass, многочисленны и также используются в других 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}