Создайте среду подсказок (появится с помощью чего-то вроде `\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}

Второй способ сделать это, который по духу ближе к вашему вопросу, — это использоватьокружающая средаpackage для определения вашей среды подсказок. При таком подходе вы сначала определяете новый оператор 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она имеет значение true.

Одним из преимуществ такого подхода является то, что вы можете включать и выключать подсказки в разных частях документа (это также можно считать недостатком, поскольку вам придется проверять все!).

Связанный контент