再会,
我正在尝试检查solution
环境,如果环境已打开,则将其关闭。我试过了这个答案并直接检查使用考试文档类时环境@insolution
设置的切换solution
,但都返回 false。
我很确定我犯了一些非常愚蠢的错误,但却找不到它。
这是一个最小的工作示例:
\documentclass{exam}
\printanswerstrue
\begin{document}
\begin{questions}
\question
\emph{TEST QUESTION}
\end{questions}
\begin{solution}
% Use @currenvir to check if we are in the solution environment
\ifx\@currenvir\@solution
currenvir is solution
\else
currenvir is not solution
\fi
% Use @insolutiontrue to check if we are in the solution environment
\if@insolution
in solution is TRUE
\else
in solution is FALSE
\fi
\emph{TEST SOLUTION}
\end{solution}
\end{document}
以下是它的结果:
我们可以看出,两个检查都返回 FALSE,而它们应该返回 TRUE。
我在这里做错了什么?
答案1
带有字符的命令@
只能在\makeatletter
和之间调用\makeatother
(参见答案这里以获得更详细的解释)。
实现此处尝试执行的操作的正确方法是在前导码中\makeatletter
和之间定义新命令\makeatother
。此外,该命令\@solution
实际上未定义,因此您必须定义它。这是一个完整的示例。
\documentclass{exam}
\printanswerstrue
\makeatletter
\newcommand*{\@solution}{TheSolution}
\newcommand{\ifcurrenvirsolution}{%
\ifx\@currenvir\@solution
currenvir is solution
\else
currenvir is not solution
\fi
}
\newcommand{\ifinsolution}{%
\if@insolution
in solution is TRUE
\else
in solution is FALSE
\fi
}
\makeatother
\begin{document}
\begin{questions}
\question
\emph{TEST QUESTION}
\end{questions}
\begin{solution}
\ifcurrenvirsolution
\ifinsolution
\emph{TEST SOLUTION}
\end{solution}
\end{document}