我最近收养了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}