我很乐意使用exam
文档类来创建考试和测验。我经常将考试的一部分设为多项选择题,我希望能够
- 通过排列答案选项来生成多个版本的考试(自动生成,而不是像我现在这样手动生成),并且
- 在编写带有答案的考试时,为每个版本生成一个答案。
你们当中有谁这样做过或者对我如何实现这一点有什么建议吗?
答案1
我很了解这个问题。我有自己的软件包可以解决这个问题,还有几份充满乱七八糟代码的文档。我可以告诉你我的实现:
排列答案选项:
- 使用
pgfmath
列表存储答案选项 - 做一个克努斯洗牌在该列表上对其进行排列
- 浏览列表并打印出每个选项
你可能会发现\pgfmathsetseed
命令很有用,因为您想要随机选择,但每次编译时都是相同的随机选择!您可能还会发现http://random.org/适合获取足够随机的种子。
为了生成多个版本和答案,我使用docstrip
。我的主要文件是一个文档文件,例如exam.dtx
,我使用如下的保护程序
%<A>\pgfmathsetseed{1001} % seed for A version
%<B>\pgfmathsetseed{1010} % seed for B version
%<*key>
% commands that alter whether the key is shown
%</key>
到诸如、等\generate
文件。这样每个文件就有一个文档,而无需手动重复代码。exam-A.tex
exam-A-key.tex
我没有使用这个exam
课程,但我认为这可以发挥作用。
答案2
在 ConTeXt 中,itemize
环境(相当于 LaTeX 的itemize
和enumerate
)支持random
键。因此,要获得选项的随机排列,请使用。但是,您必须使用\startitem
...\stopitem
而不是\item
来捕获项目。
\starttext
\startitemize[n,random]
\startitem First item \stopitem
\startitem Second item \stopitem
\startitem Third item \stopitem
\stopitemize
\stoptext
我还没有检查随机化算法有多好。当然,你可以很容易地在 LuaTeX 中实现它。(ConTeXt 解决方案早于 lua,并在 eTeX 中实现)
答案3
虽然这是一个比较老的问题,但描述了一个可能的答案,无需使用任何包或类这里。它依靠 Python 和一些 bash 脚本来生成不同的版本。问题及其可能的答案在每个版本中都会自动打乱,并且密钥会打印在生成的 tex 文件的末尾(\end{document} 之后)。