exsheet 環境に引数として渡す前に定義を展開する方法

exsheet 環境に引数として渡す前に定義を展開する方法

私は演習シートをモジュール方式で作成しようとしています。各演習には、パッケージによって提供される質問/解決環境を含む独自のファイルがありますexsheets

練習シートは\input必要な練習になります。問題は、各練習シートで解答を印刷するかどうかを決められるようにしたいことです。パッケージは、環境にオプションexsheetsを与えることができるので、その点に役立ちます。solutionprint=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}

そして、ここで問題となるのは、与えられたオプションprintが有効な選択肢ではないと LaTeX が警告することです。

! 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}

関連情報