exsheets 重新排序问题

exsheets 重新排序问题

我正在使用出色的 exsheets 包,并且我希望在测试的不同版本中有不同的问题顺序。也就是说,我想\variant{1}打印一个顺序的问题,\variant{2}打印另一个顺序的问题,等等。因此,给定一个文档,如下所示:

\documentclass[12pt]{article}
\usepackage{exsheets}

\SetVariations{2}
\variant{1}

\begin{document}

\begin{question}
foo
\end{question}

\begin{question}
bar
\end{question}

\begin{question}
baz
\end{question}

\end{document}

因为\variant{1}我希望它呈现类似这样的效果:

Exercise 1.
foo
Exercise 2.
bar
Exercise 3.
baz

因为\variant{2}我希望它按其他顺序呈现,所以说:

Exercise 1.
baz
Exercise 2.
bar
Exercise 3.
foo

我已经设法通过定义类似以下命令来实现类似的目的,\varyreversethree其工作方式如下:

\documentclass[12pt]{article}
\usepackage{exsheets}

\SetVariations{2}
\variant{2}

\newcommand{\varyreversethree}[3]{\vary{#1#2#3}{#3#2#1}}

\begin{document}

\varyreversethree{
\begin{question}
foo
\end{question}
}{
\begin{question}
bar
\end{question}
}{
\begin{question}
baz
\end{question}
}

\end{document}

我不喜欢这个解决方案的某些方面是,我必须为可能被逆转的每种可能数量的事情定义一个新版本,并且我不能在参数之间(例如问题之间)留下任何空行,否则后面的参数会丢失。

在 exsheets 中有没有更好的方法可以做到这一点?

答案1

有了exsheets继任者xsim,这样的事情就有可能了:

\documentclass{article}
\usepackage{xsim}

\DeclareExerciseCollection{exam}

\begin{document}

\collectexercises{exam}
\begin{exercise}
  foo
\end{exercise}
\begin{exercise}
  bar
\end{exercise}
\begin{exercise}
  baz
\end{exercise}
\collectexercisesstop{exam}

\printrandomexercises[sort=false,collection=exam]{3}

\end{document}

在此处输入图片描述

aux上面示例的文件有

\XSIM {random}{a}{3,1,2}

删除aux文件或手动更改此行中的数字顺序将导致另一个顺序。(也就是说,删除文件可能会导致与第一次相同的顺序……)。例如\XSIM {random}{a}{1,3,2}现在给出:

在此处输入图片描述

如果您想要更好地控制练习的打印顺序,您可以执行以下操作:

\documentclass{article}
\usepackage{xsim,pgffor}

\DeclareExerciseCollection{exam}

\begin{document}

\collectexercises{exam}
\begin{exercise}
  foo
\end{exercise}
\begin{exercise}
  bar
\end{exercise}
\begin{exercise}
  baz
\end{exercise}
\collectexercisesstop{exam}

\foreach \x in {3,1,2}{
  \XSIMexpandcode{\printexercise{exercise}{\x}}
}

\end{document}

相关内容