
Ich versuche, die Tabellenumgebung innerhalb der solution
Umgebung der exam
Dokumentklasse zu verwenden. Leider funktioniert dies nicht wie inDasFrage, da table
es sich auch um einen Float handelt.
Die Lösungsumgebung verwendet intern eine \vbox und dies hat zur Folge, dass Floats in dieser Umgebung nicht zulässig sind. Anstatt die Floating-Umgebungstabelle zu verwenden, können Sie eine Center-Umgebung verwenden.
Da sie außerhalb der solution
Umgebung arbeiten, suche ich nach einer Möglichkeit, sie so zu ändern, \begin{table} ... \end{table}
dass sie sich außerhalb der Lösung verhalten und sich innerhalb durch ersetzen \begin{center}...\end{center}
.
Zum GlückDasDer Beitrag zeigt, dass es einfach ist, herauszufinden, ob Sie sich in einer solution
Umgebung befinden oder nicht. Ich habe das getestet und es funktioniert.
Da die Dokumente, die ich an die Dokumentklasse anpassen muss, jedoch exam
zahlreich sind und auch in anderen Dokumentklassen verwendet werden, würde ich idealerweise keine neue Umgebung erstellen, sondern die table
Umgebungen ähnlich anpassen, wie es passiert istHierzum figure
oderHierzur tabellarischen Umgebung. Das ist mein Code bisher:
AKTUALISIEREN:Ich weiß nicht warum, aber mit \center
statt \begin{center}
ist der Fehler weg und ermöglicht auch eine Möglichkeit, das optionale Argument von zu verwenden.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}
Ich befürchte aber, dass ich den Parameter nicht richtig handhabe table
, da dies zu folgendem Fehler führt: Unbekannte Float-Option `['. \begin{table}[
Diese Lösung funktioniert außerhalb von „inner“ und kann das optionale Argument von verarbeiten table
. Wenn jedoch \ifinner
„true“ ist, erhalte ich den Fehler
Extra } oder vergessen \endgroup. \end{table}
Hat jemand einen Vorschlag zur Anpassung table
an die Umgebung?
Vielen Dank
Antwort1
Ich habe eine Lösung gefunden und poste sie hier als Antwort, falls jemand anderes dieses Problem hat. Das (im Nachhinein offensichtliche) Problem war, dass es \ifinner
am Anfang funktioniert, weil es eine schwebende Umgebung ist, aber sobald \table
es beginnt, funktioniert es nicht mehr. Daher konnte das \endcenter
nicht erreicht werden. Ich habe ein paar Alternativen ausprobiert und festgestellt, dass der einfachste Weg darin besteht, einen benutzerdefinierten Booleschen Wert zu definieren, der prüft, ob das ifinner
des geänderten Werts table
erreicht ist, und diesen zu verwenden, um einen Booleschen Wert festzulegen. \endtable
Daraufhin kann dieser Boolesche Wert verwendet werden, um dafür zu sorgen, dass es korrekt beendet wird.
\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}