如何在xsim中打印带有ID的解决方案?

如何在xsim中打印带有ID的解决方案?

我最近收养了xsim(的继任者exsheets,作者克莱门斯·尼德伯格),并有以下问题:如何通过 ID 选择解决方案? 我希望能够选择在哪里打印答案(不一定在问题下面,也不一定在最后),问题和答案存储在外部文件中。我还希望答案显示在彩色框中。

我很快就找到了如何通过 ID 选择问题(请参阅问题 383207)以及如何使用tcolorbox(作者 Thomas F. Sturm)制作精美的框架(参见问题 380959)。但我花了一段时间才弄清楚如何选择解决方案。下面我的解决方法是“回收”问题的 ID 来引用相应的解决方案(只要解决方案存储在问题正下方,这种方法就有效):问题:我可以为每个解决方案设置一个唯一的 ID 吗?

使用下面我建议的解决方法,我可以通过以下 ID 插入问题\includeQuestion{Q001}并且同样地,通过 ID 插入解决方案\includeSolution{Q001},其中 Q001 是问题的 ID(问题和解决方案共享一个 ID,这一点我并不完全满意)。

我的主要用例是,当某些解决方案与之前的解决方案太相似时,我希望能够忽略它们,并且能够在没有专门解决方案时插入其他问题的解决方案(某些问题仅在某些参数的值上有所不同,我可能没有时间为所有参数值重写模型答案)。因此,我可以在问题 10 下方插入问题 1 的解决方案,前面加上类似“以下解决方案适用于 a=1 的情况。我让您重新计算 a=2 的情况。”

在此处输入图片描述

我也使用了要点和标签,但我已将它们删除,以使此模板专注于当前的问题。

\documentclass{article}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{filecontents} % for self-contained example
\begin{filecontents}{QuestionBank.tex}
\begin{question}[ID=Q001]
First Question: Select one of the following solutions:
\begin{enumerate}
\item A
\item B
\end{enumerate}
\end{question}
\begin{answer}
Solution to First Question
\end{answer}
\begin{question}[ID=Q002]
Second Question: Select one of the following solutions:
\begin{enumerate}
\item C
\item D
\end{enumerate}
\end{question}
\begin{answer}
Solution to Second Question
\end{answer}
\end{filecontents}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{xsim}
\usepackage[most]{tcolorbox}

\newcommand*\includeQuestion[1]{%
\XSIMexpandcode{\printexercise{question}{\GetExerciseIdForProperty{ID}{#1}}}%
}

\newcommand*\includeSolution[1]{%
\XSIMexpandcode{\printsolution{question}{\GetExerciseIdForProperty{ID}{#1}}}%
}

\DeclareExerciseEnvironmentTemplate{tcb}
{%
    \tcolorbox[breakable,
        drop shadow,
        beforeafter skip = 1\baselineskip,
        fonttitle   = \bfseries,
        fontupper = \normalsize,
        valign = top,
        colframe = \IfInsideSolutionF{green!20!white}\IfInsideSolutionT{blue!20!white},
        colback = \IfInsideSolutionF{green!3!white}\IfInsideSolutionT{blue!3!white},
        coltext = black,
        coltitle = black,
        boxrule = 1pt,
        width = \linewidth,
        left = 2mm,
        title =
        \IfInsideSolutionT{\XSIMmixedcase{\XSIMtranslate{solution}}~to~}%
        \XSIMmixedcase{\XSIMtranslate{question}}~\GetExerciseProperty{counter}%
    ]%
}{\endtcolorbox}

\DeclareExerciseType{question}{
    exercise-env = question,
    solution-env = answer,
    exercise-name = question, % used with headings=true
    solution-name = solution,  % used with headings=true
    exercise-template = tcb,
    solution-template = tcb
}

\DeclareExerciseCollection{myCollection}



% comment/uncomment to print solutions
%\renewcommand*\includeSolution[1]{}

\begin{document}

\collectexercises{myCollection}
\input{QuestionBank.tex}
\collectexercisesstop{myCollection}

\section*{Instructions}
Answer all questions. Total number of questions: \numberofquestions.

\section*{Questions}
\includeQuestion{Q001}
\includeSolution{Q001}

\includeQuestion{Q002}
\includeSolution{Q002}


%\newpage % all solutions together at the end
%\printsolutions[headings=true]

\end{document}

相关内容