@currenvir 检查是否返回 false

@currenvir 检查是否返回 false

再会,

我正在尝试检查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}

相关内容