创建提示环境(以类似“\ifhints”的形式出现)

创建提示环境(以类似“\ifhints”的形式出现)

exam经常使用 -class,我特别喜欢解决方案环境。我的文档包含问题和解决方案,但通过更改\printanswers序言,我可以轻松切换是否显示解决方案。

我也想为提示. 我想要类似的东西:

\documentclass[11pt]{exam}
%\ifprintanswers
\ifprinthints

\begin{document}
  \begin{questions}
    \question Prove $e^{i\pi} +1 = 0$.

    \begin{hints}
      Consider $e^{i\theta} = \cos \theta + i\sin \theta$.
    \end{hints}

    \begin{solution}
      duh.
    \end{solution}
  \end{questions}
\end{document}

我创建了一个基于该类的自定义类,exam但加载了一些包和自定义命令,我应该添加哪些命令来实现此功能?有人能帮忙吗?

答案1

一个非常简单的方法是使用版本包。如果您添加以下行:

\newenvironment{hints}{\textbf{Hint}}{}
\excludeversion{hints}

那么你的提示就不会出现。注释掉\excludeversion{hints}(或使用\includeversion{hints}),它们就会神奇地重新出现。这里是完整的 MWE:

\documentclass[11pt]{exam}
\usepackage{version}

\newenvironment{hints}{\textbf{Hint}}{}
\excludeversion{hints}% turn hints off

\begin{document}
  \begin{questions}
    \question Prove $e^{i\pi} +1 = 0$.

    \begin{hints}
      Consider $e^{i\theta} = \cos \theta + i\sin \theta$.
    \end{hints}

    \begin{solution}
      duh.
    \end{solution}
  \end{questions}
\end{document}

第二种方法在本质上更接近你的问题,就是使用环境包来定义提示环境。使用此方法,您首先定义一个新的 if 语句,例如\ifhinting,然后使用\hintingtrue\hintingfalse来打开和关闭提示:

\documentclass[11pt]{exam}
\usepackage{environ}

\newif\ifhinting\hintingtrue % hints are on by defautl
\NewEnviron{hints}{\ifhinting\textbf{Hint} \BODY\fi}

\begin{document}
  \begin{questions}
    \question Prove $e^{i\pi} +1 = 0$.

    \begin{hints}
      Consider $e^{i\theta} = \cos \theta + i\sin \theta$.
    \end{hints}

    \begin{solution}
      duh.
    \end{solution}
  \end{questions}
\end{document}

\NewEnviron命令定义了一个新的环境,但它将环境的内容吸收到宏中\BODY,因此您可以使用它来执行操作,例如在\hintingfalse为真时忽略它。

这种方法的一个优点是您可以在文档的不同部分打开或关闭提示(这也可以看作是一个缺点,因为您必须到处检查!)。

相关内容