
solution
私はドキュメントクラスの環境内でテーブル環境を使用しようとしていますexam
。残念ながら、これは次のようには機能しません。これ質問はtable
float でもあるためです。
ソリューション環境は内部的に\vboxを使用しているため、この環境内ではフロートは使用できません。フローティング環境テーブルを使用する代わりに、センター環境を使用できます。
これらは環境外で動作するため、ソリューションの外部で動作し、内部では に置き換えられるようにsolution
変更する方法を探しています。\begin{table} ... \end{table}
\begin{center}...\end{center}
幸いなことにこれ投稿では、環境内にいるかどうかを簡単に確認できることを示していますsolution
。私はこれをテストしましたが、うまくいきました。
ただし、ドキュメントクラスに適合させる必要があるドキュメントはexam
多数あり、他のドキュメントクラスでも使用されているため、理想的には新しい環境を作成するのではなく、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}[
このソリューションは「inner」の外側で動作し、のオプションの引数を処理できますtable
が、が\ifinner
trueの場合、エラーが発生します。
余分な}、または忘れられた\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}