如何在將定義作為參數傳遞給 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}

相關內容