侵入考试课堂中的(内部)参考资料

侵入考试课堂中的(内部)参考资料

到目前为止,我已经使用自制风格的文件来创建包含多组问题的试卷。

最近,我切换到exam课程,并非常享受它提供的额外力量。现在,如果进行多组练习,我会在某个点卡住。

我的设置(所有配件都带条纹)看起来是这样的。我使用宏\setcode,它与其他东西一起控制外部文件的包含和特定位置的字体使用。

\documentclass[addpoints]{exam}

\begin{document}

\def\setcode{1}
Total: \numpoints
\begin{questions}
  \question[5] First question in Set 1.
\end{questions}

\def\setcode{2}
Total: \numpoints
\begin{questions}
  \question[5] First question in Set 2.
\end{questions}

\end{document}

现在,上述场景的问题是,内部类似内容\numpoints不正确。正如输出和有关多重定义标签的警告消息所证明的那样。

我发现标签不再使用\labels 来处理。相反,它们直接写入 .aux 文件中。请参阅摘录 exam.cls

以前,这是通过\pageref命令完成的。当我停止使用时\pageref(为了使其与兼容 hyperref.sty),创建了以下内容:

\gdefexam@lastpage、、、、、和的命令通过写入 文件。exam@numpoints​ ​ exam@numbonuspointsexam@numquestionsexam@numpartsexam@numsubpartsexam@numsubsubparts.aux\AtEndDocument

我明白,如果我能侵入\setcode上述内部结构,我的问题就能解决了。

您认为您能为此提出一个解决方法吗?

我知道一个全新的设置,说点什么像这样,也许可以解决我的问题。但另一方面,我已经有一个十多年的大型设置,必须完全重新设计才能使新设置正常工作。

答案1

一个实验(根据评论部分解决)

我还没完成,但我正在向其他解算器展示我的发现,以节省一些时间。下面是我的补丁/样式文件,用于捕获和清除大多数计数器。未解决的问题是:

  • 如果需要,单个问题的分数和加分,\pointsofq@以及\bonuspointsofq@问题的分数等iii
  • 还缺少诸如考试最后一页之类的基本信息。它只需要\label一个独特的标记,例如考试计数器。
  • 如何卸载\AtEndDocument{}命令的内容而不触碰exam.cls文件,例如通过删除该部分代码。原因是我们不喜欢关于多重定义标签的警告。
  • \label例如,通过 s 实际捕获计数器,然后通过\ref或将其加载回去\pageref。此实验列出了值,但我们不能在实际考试的开始或中间使用它们。
  • 那个班还有其他计数器吗?:-)

这是mal-patch.sty包含两个命令的文件,正在自动\catchme调用\clearme,但我试图将这两个任务彼此分开。

\makeatletter

%\newcounter{pageof@pagepoints}
%\newcounter{pageof@pagebonuspoints}


\def\clearme{
\setcounter{numquestions}{0}
\setcounter{numparts}{0}
\setcounter{numsubparts}{0}
\setcounter{numsubsubparts}{0}
%
\set@hlfcntr{numpoints}{0}
\set@hlfcntr{numbonuspoints}{0}
\set@hlfcntr{pointsof@thisquestion}{0}
\set@hlfcntr{bonuspointsof@thisquestion}{0}
%
\set@hlfcntr{@pagepoints}{0}
\set@hlfcntr{@pagebonuspoints}{0}
\setcounter{pageof@pagepoints}{0}
\setcounter{pageof@pagebonuspoints}{0}
%
\set@hlfcntr{latest@points}{0}
\set@hlfcntr{latest@bonuspoints}{0}
}% End of \clearme...


\def\catchme{\indent\par
numquestions: \thenumquestions\par
numparts: \thenumparts\par
numsubparts: \thenumsubparts\par
numsubsubparts: \thenumsubsubparts\par
%
numpoints: \prtaux@hlfcntr{numpoints}\par
numbonuspoints: \prtaux@hlfcntr{numbonuspoints}\par
pointsofthisquestion: \prtaux@hlfcntr{pointsof@thisquestion}\par
bonuspointsofthisquestion: \prtaux@hlfcntr{bonuspointsof@thisquestion}\par
%
pagepoints: \prtaux@hlfcntr{@pagepoints}\par
pagebonuspoints: \prtaux@hlfcntr{@pagebonuspoints}\par
pageofpagepoints: \thepageof@pagepoints\par
pageofpagebonuspoints: \thepageof@pagebonuspoints\par
%
latestpoints: \prtaux@hlfcntr{latest@points}\par
latestbonuspoints: \prtaux@hlfcntr{latest@bonuspoints}\par
\clearme % before another set of questions...
}% End of \catchme...

\makeatother

到目前为止,这是从mal-exam.tex文件中使用它的方法:

%! *latex mal-exam.tex
\documentclass[addpoints]{exam}
\usepackage{mal-patch}

\begin{document}
\def\setcode{1}
\begin{questions}
  \question[5] First question in Set \setcode.
\end{questions}
\catchme
%%% Next set of questions...
\def\setcode{2}
\begin{questions}
  \question[5] First question in Set \setcode.
\end{questions}
\catchme
\end{document}

穆恩韦

相关内容