我需要制作练习表,正在寻找提供练习/答案环境的软件包。我尝试了 nowexercise
和exsheets
软件包,几乎可以做我想做的事情,但总是有限制。
我想制作一份练习清单,例如:
- 一项练习可能只有一行“练习 1.Blah blah blah?”
- 练习可能会更长,包含多个问题。在这种情况下,第一行只是“练习 X。标题”,然后每个问题一行,并带有适当的编号。
- 我应该能够给出每个练习或问题的解决方案,并选择是否显示解决方案。
- 当有多个问题时,我应该能够为每个问题提供答案(而不仅仅是整个练习)。答案应该出现在每个问题之后。
- 练习和答案直接写在同一个源文件中。
- 可以自定义答案的书写方式(例如添加 fbox 或颜色)
- 理想情况下,还可以添加一些符号来指定难度,但这不是必需的。
您认为,实现这一目标的最佳方案是什么,或者需要尽可能少技巧的方案是什么?
答案1
所有提到的要点都应该可以使用该xsim
软件包(它是的后继者exsheets
)来实现。我对其他软件包的了解不够exercise
,无法判断它们是否允许类似的事情……
xsim
以下是关于如何使用来实现目标的建议。希望代码是不言自明的。
\documentclass{article}
\usepackage{xsim,tcolorbox,needspace}
% declare a boolean property:
\DeclareExerciseProperty*{short}
% declare a tag like property:
\DeclareExerciseTagging{level}
% declare a template which typesets exercises differently according to given
% properties:
\DeclareExerciseEnvironmentTemplate{exercise}
{%
\renewcommand*\theenumi{\theexercise.\arabic{enumi}}%
\par\addvspace{\baselineskip}
\Needspace*{2\baselineskip}
\noindent
\GetExercisePropertyT{level}{\marginpar{\sffamily Level: #1}}%
\textbf{\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}.} %
\GetExercisePropertyT{subtitle}{\textit{#1}}%
\IfExerciseBooleanPropertyF{short}{\par\noindent}%
}
{}
% declare a tcolorbox template for the solutions:
\DeclareExerciseEnvironmentTemplate{solution}
{\tcolorbox[colback=yellow,colframe=red]}
{\endtcolorbox}
% declare a user command for short answers:
\NewDocumentCommand\answer{m}{%
\IfSolutionPrintT{%
\UseExerciseTemplate{begin}{solution}%
#1%
\UseExerciseTemplate{end}{solution}%
}{}%
}
% setup exercises and solutions:
\SetExerciseParameters{exercise}{
exercise-template = exercise ,
solution-template = solution
}
% remove this option to hide the answers:
% \xsimsetup{solution/print=true}
\usepackage{lipsum}
\begin{document}
\begin{exercise}[level=hard,short]
Just a short exercise
\end{exercise}
\begin{solution}
The somewhat longer solution to the short exercise. \lipsum[1]
\end{solution}
\begin{exercise}[subtitle=This one has a title,level=easy]
Answer the following questions.
\begin{enumerate}
\item question \answer{answer}
\item question \answer{answer}
\end{enumerate}
\end{exercise}
\begin{exercise}
A long exercise. \lipsum[4]\answer{The answer}
\end{exercise}
\begin{exercise}[level=medium,short]
Another short exercise.\answer{The answer}
\end{exercise}
\end{document}
这给出
或者
取决于是否solution/print=true
已设置。