使用考试类别生成包含各部分的成绩表

使用考试类别生成包含各部分的成绩表

我刚刚开始使用该类exam来排版考试,当使用该\gradetable命令创建最终成绩表时,它仅向我显示问题粒度的要点,但不显示该问题的部分(或子部分等),如下例所示:

\documentclass[addpoints]{exam}

\begin{document}

\begin{questions}
\question
What if there were no air?
\begin{parts}
\part[4]
Describe the effect on the balloon industry.
\part[6]
Describe the effect on the aircraft industry.
\end{parts}
\question
\begin{parts}
\part[12]
Define the universe.
Give three examples.
\part[8]
If the universe were to end, how would you know?
\end{parts}
\end{questions}

\gradetable

\end{document}

在此处输入图片描述

有没有办法让成绩表将分数分成几部分,还是我应该自己做?

答案1

抱歉,无法让成绩表列出各个部分。您可以按问题编号或页码列出分数,但这些是唯一的选择。

答案2

虽然考试类不提供此功能,因此很少无法在 LaTeX 中执行某些操作。问题更多的是做你想做的事情有多难,而在这个例子中,这并不难。

\part's 的标记添加到等级表的一种方法是重新定义\part命令,以便它提取每个部分的点数。这有点棘手,因为命令\part实际上是由环境(重新)定义的parts。但是,一旦您弄清楚该怎么做,您就可以使用每个部分的标记动态构建等级表,以便上面的 MWE 产生:

在此处输入图片描述

请注意,我已经沦为我自己偏好的牺牲品,并使用了书签创建由该\GradeTable命令生成的新成绩表。下面的代码可能会破坏考试包。例如,我注意到exam.cls“奖励标记”以某种方式得到支持,但我不知道它们是什么、它们如何工作,或者我的代码是否与它们兼容。但据我所知,我的代码不应该破坏任何东西。另一方面,该\GradeTable命令不支持命令的全部功能\gradetable。例如,无法按页码列出标记等。

\documentclass[addpoints]{exam}

\usepackage{xparse,booktabs,xpatch}

% redefine \part command to be \mypart
\appto\parts{\let\exampart\part\let\part\mypart}

\makeatletter
\ExplSyntaxOn
\tl_new:N \g_grade_table_tl% this will; become the new grade table

\int_new:N \g_score_int% this will be the exam score
\NewDocumentCommand\mypart{o}{
  \IfNoValueTF{#1}{\exampart}{
    % don't do anything special inside solutions
    \if@insolution\exampart[#1]
    \else\exampart[#1]
      \int_compare:nNnT {\arabic{partno}} = {1} {
        \tl_gput_right:Nn \g_grade_table_tl { \midrule }
      }
      \tl_gput_right:Nx \g_grade_table_tl {
        \arabic{question}\alph{partno}
      }
      \tl_gput_right:No \g_grade_table_tl  {& #1 & \\}
      \int_gadd:Nn \g_score_int {#1}
    \fi
  }
}
\NewDocumentCommand\GradeTable{}{% the new grade table
  \begin{tabular}{ccc}\toprule Question & Points & Score \\
  \tl_use:N \g_grade_table_tl \midrule
  Total & \int_use:N \g_score_int & \\\bottomrule
  \end{tabular}
}
\ExplSyntaxOff
\makeatother

\begin{document}

\begin{questions}
\question
What if there were no air?
\begin{parts}
\part[4]
Describe the effect on the balloon industry.
\part[6]
Describe the effect on the aircraft industry.
\end{parts}
\question
\begin{parts}
\part[12]
Define the universe.
Give three examples.
\part[8]
If the universe were to end, how would you know?
\end{parts}
\end{questions}

\GradeTable

\end{document}

相关内容