Usando tabela dentro do ambiente de solução do exame documentclass

Usando tabela dentro do ambiente de solução do exame documentclass

Estou tentando usar o ambiente de tabela dentro do solutionambiente da examdocumentclass. Infelizmente isso não funciona conforme indicado emessepergunta, já que tabletambém é um carro alegórico.

O ambiente da solução utiliza internamente um \vbox e isso tem como consequência que floats não são permitidos dentro deste ambiente. Em vez de usar a tabela de ambiente flutuante você pode usar um ambiente central

Como eles funcionam fora do solutionambiente, estou procurando uma maneira de modificar \begin{table} ... \end{table}para agir como está fora da solução e por dentro se substitui por \begin{center}...\end{center}.

Felizmente comoessepost mostra que é fácil descobrir se você está ou não dentro de um solutionambiente. Eu testei isso e funciona.
No entanto, como os documentos que tenho que adaptar à examdocumentclass são numerosos e também são usados ​​em outras documentclasses, o ideal seria não criar um novo ambiente, mas adaptar os tableambientes de forma semelhante ao que aconteceuaquipara o figureouaquipara ambiente tabular. Este é o meu código até agora:
ATUALIZAR:Não sei por que, mas em \centervez de \begin{center}o erro desapareceu e também permite uma maneira de seguir o 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}

Mas temo não estar manipulando o parâmetro tablecorreto, pois isso leva ao erro: Unknown float option `['. \begin{tabela}[

Esta solução funciona fora do "interno" e pode lidar com o argumento opcional de table, no entanto, se \ifinnerfor verdade, recebo o erro

Extra } ou esquecido \endgroup. \mesa final}

Alguém tem alguma sugestão de como se adaptar tablecom base no meio ambiente?

Muito obrigado

Responder1

Encontrei uma solução e postei aqui como resposta se alguém estiver enfrentando esse problema. O problema (em retrospectiva, óbvio) é que \ifinnerfunciona no começo, porque é um ambiente flutuante, mas assim que \tablecomeça não é mais. Portanto, \endcenternão foi possível alcançá-lo. Eu tentei algumas alternativas e descobri que a maneira mais fácil é definir um booleano personalizado que verifica se o ifinnermodificado tablefoi alcançado e usar isso para definir um booleano. No \endtablethis boolean pode então ser usado para terminar corretamente.

\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}

informação relacionada