
Estoy intentando utilizar el entorno de tabla dentro del solution
entorno de la exam
clase de documento. Desafortunadamente esto no funciona como se indica enestePregunta ya que table
también es un flotador.
El entorno de la solución utiliza internamente un \vbox y esto tiene como consecuencia que no se permiten flotantes dentro de este entorno. En lugar de utilizar la mesa de entorno flotante, puedes utilizar un entorno central.
Dado que funcionan fuera del solution
entorno, estoy buscando una manera de modificarlos \begin{table} ... \end{table}
para que actúen como si estuvieran fuera de la solución y por dentro se reemplacen con \begin{center}...\end{center}
.
Afortunadamente comoesteLa publicación muestra que es fácil saber si estás o no dentro de un solution
entorno. Probé esto y funciona.
Sin embargo, dado que los documentos que tengo que adaptar a la exam
clase de documentos son numerosos y también se usan en otras clases de documentos, lo ideal sería no crear un entorno nuevo, sino adaptar los table
entornos de manera similar a lo que sucedió.aquíal figure
oaquíal entorno tabular. Este es mi código hasta ahora:
ACTUALIZAR:No sé por qué, pero en \center
lugar del \begin{center}
error desapareció y también permite una forma de analizar el argumento opcional detable
\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}
Pero me temo que no estoy manejando el parámetro table
correcto, ya que esto genera el error: Opción flotante desconocida `['. \begin{tabla}[
Esta solución funciona fuera de "interno" y puede manejar el argumento opcional de table
, sin embargo, si \ifinner
es cierto, aparece el error.
Extra } u olvidado \endgroup. \mesa final}
¿Alguien tiene alguna sugerencia sobre cómo adaptarse table
en función del entorno?
Muchas gracias
Respuesta1
Encontré una solución y la publiqué aquí como respuesta si alguien más enfrenta este problema. El problema (obvio en retrospectiva) fue que \ifinner
funciona al principio, porque es un entorno flotante, pero tan pronto como \table
comienza ya no lo es. Por lo tanto \endcenter
no se pudo alcanzar. Probé algunas alternativas y descubrí que la forma más fácil es definir un booleano personalizado que verifique si se alcanza el ifinner
valor modificado table
y usarlo para establecer un booleano. En este caso, \endtable
este valor booleano se puede utilizar para encargarse de finalizarlo correctamente.
\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}