如何在将定义作为参数提供给 exsheet 环境之前扩展定义

如何在将定义作为参数提供给 exsheet 环境之前扩展定义

我正在尝试以模块化的方式编写练习表:每个练习都有自己的文件,其中包含包提供的问题/解决方案环境exsheets

然后,练习表\input就是所需的练习。问题是,我希望能够在每张练习表中决定是否要打印解决方案。该exsheets软件包可以帮助您实现这一点,因为您可以为solution环境提供print=true/false选项。

因此,我自然而然地尝试在我的练习表文件中设置一个变量,该变量将由每个解决方案环境读取以决定是否应该打印它,但它不起作用,因为我认为给定的参数没有足够早地扩展。

以下是该表格文件的 MWE:

\documentclass{article}

\usepackage{exsheets}

\def\printsolutions{true}

\begin{document}
    Some text.  
    \input{Exercise1}
\end{document

下面是一个练习:

\begin{question}
    Question
\end{question}
\begin{solution}[print=\printsolutions]
    Solution
\end{solution}

现在的问题是 Latex 抱怨给出的选项print不是一个有效的选择:

! LaTeX error: "kernel/key-choice-unknown"
! 
! Key 'exsheets/solution/print' accepts only a fixed set of choices.

该如何解决呢?

提前致谢!

答案1

定义一个可以设置正确键的命令:

\documentclass{article}


\usepackage{exsheets}

\ExplSyntaxOn
\NewDocumentCommand\setsolutionprint { m }
{
 \keys_set:nn { exsheets / solution}{ print = #1 }
}

\ExplSyntaxOff



\begin{document}

    Some text.
\setsolutionprint{true}

    \input{exercise1}

\end{document}

注意力:

exsheets 不适用于当前的 expl3 版本。请参阅https://bitbucket.org/cgnieder/exsheets/issues/44/error-latex3-error-variant-form-n

答案2

以下是该表格文件的 MWE:

\documentclass{article}

\usepackage{exsheets}

\newcommand\Exchange[2]{#2#1}%
\def\printsolutions{true}

\begin{document}
    Some text.  
    \input{Exercise1}
\end{document}

下面是一个练习:

\begin{question}
    Question
\end{question}
\expandafter\Exchange\expandafter{\printsolutions]}{\begin{solution}[print=}%
    Solution
\end{solution}

相关内容