我有一个问题(代码如下),它有子部分。部分 (a) 进一步分为 3 个部分:i、ii 和 iii,而部分 (b) 不包含任何子部分。此问题的总分为 15 分,其中部分 (a) 为 11 分,部分 (b) 为 4 分。
考试类包中有一个宏\totalpoints
,它能为整个问题给出 11 + 4 = 15 分。但是没有宏可以只计算部分 (a) 的分数(分数)。我想要一个宏,它还能将部分 (a) 的分数相加,即 2 + 6 + 3,得到 11 分。按照今天的代码,我必须手动编写\part[11]
,即我必须手动进行 2 + 6 + 3 的加法。我想要一个可以直接使用的宏,因为\part[\mymacro]
它相当于\part[11]
。
\totalpoints
还应该识别宏,这样我仍然可以得到 11 + 4 = 15 作为该问题的总分。宏可能只对整个问题的一个子问题可见,以便它可以在其他问题的其他子问题中用于计算那里的相应总和。
\documentclass[addpoints,12pt]{exam}
\begin{document}
\pointpoints{mark}{marks}
\begin{questions}
\qformat{Question: \thequestion \dotfill {\bfseries \totalpoints\ marks}}
\question
\begin{parts}
\addpoints
\boxedpoints
\part[11]
\noboxedpoints
\noaddpoints
Some background words about the first question.\\[-6.5mm]
\begin{subparts}
\subpart[2] Show that John is a boy.
\subpart[6] Show that Jane is a girl.
\subpart[3] Show that Janice is a monkey.
\end{subparts}
\vspace{5mm}
\addpoints
\boxedpoints
\part[4]
\noboxedpoints
My second question is here and it is worth 4 points. There are no subparts.
\end{parts}
\end{questions}
\end{document}
根据@John Kormylo 提出的答案,为了让宏也能满足半点要求,无法获得正确的输出。请参阅下面的输出:
我们确实得到了 9 1/2 分,这是该子部分总分的要求subtotal
。然而,第 (ii) 部分和第 (iii) 部分之间插入了三个附加内容 1/2。而且现在\totalpoints
忽略了1/2的分数.aux
文件显示如下:
\relax
\gdef\subtotal@i@i{9\half}
\gdef\pointsofq@i{13}
\gdef\bonuspointsofq@i{0}
\PgInfo{question@1}{1}
\PgInfo{question1@object1}{1}
\newlabel{question@1}{{1}{1}}
\PgInfo{part@1@1}{1}
\PgInfo{question1@object2}{1}
\newlabel{part@1@1}{{a}{1}}
\PgInfo{subpart@1@1@1}{1}
\PgInfo{question1@object3}{1}
\newlabel{subpart@1@1@1}{{i}{1}}
\newlabel{firstpoints@onpage@1}{{i}{1}}
\PgInfo{subpart@1@1@2}{1}
\PgInfo{question1@object4}{1}
\newlabel{subpart@1@1@2}{{ii}{1}}
\PgInfo{subpart@1@1@3}{1}
\PgInfo{question1@object5}{1}
\newlabel{subpart@1@1@3}{{iii}{1}}
\PgInfo{part@1@2}{1}
\PgInfo{question1@object6}{1}
\newlabel{part@1@2}{{b}{1}}
\gdef\exam@lastpage{1}
\gdef\exam@lastcoverpage{0}
\gdef\exam@totalpages{1}
\gdef\exam@numpoints{13}
\gdef\exam@numbonuspoints{0}
\gdef\exam@numquestions{1}
\gdef\exam@numparts{2}
\gdef\exam@numsubparts{3}
\gdef\exam@numsubsubparts{0}
\gdef\pointsonpage@i{13}
\gdef\lastpage@withpoints{1}
\gdef\lastpage@withbonuspoints{0}
编译是TeXLive 2014
使用dvi > ps > pdf
工作流完成的。
答案1
我添加了一个\subtotal
与问题和部分相关的宏。它的工作原理是在辅助文件中存储一个数字,与\totalpoints
(more of less)相同。
有趣的是,这个数字被忽略了\addpoints
。
\documentclass[addpoints,12pt]{exam}
\makeatletter
\newcommand{\subtotal}{\@ifundefined{subtotal@\roman{question}@\roman{partno}}%
{}%
{\csname subtotal@\roman{question}@\roman{partno}\endcsname}}
\new@hlfcntr{part@subtotal}
\let\normal@subparts=\subparts
\let\endnormal@subparts=\endsubparts
\renewenvironment{subparts}% no arguments?
{\set@hlfcntr{part@subtotal}{0}%
\normal@subparts
\let\normal@subpart=\@doitem
\let\@doitem=\my@subpart
}{%
\endnormal@subparts
\ifnum\c@part@subtotal>0
\immediate\write\@auxout{\string\gdef\string\subtotal@\roman{question}@\roman{partno}%
{\prtaux@hlfcntr{part@subtotal}}}%
\fi
}
\newcommand{\my@subpart}[1][\@empty]{%
\ifx\@empty#1\relax
\expandafter\normal@subpart
\else
\ifx\@empty\@details
\else
\addto@hlfcntr{part@subtotal}{#1}%
\fi
\expandafter\normal@subpart\expandafter[\expandafter#1\expandafter]%
\fi
}%
\makeatother
\begin{document}
\pointpoints{mark}{marks}
\begin{questions}
\qformat{Question: \thequestion \dotfill {\bfseries \totalpoints\ marks}}
\question
\begin{parts}
\addpoints
\boxedpoints
\part[\subtotal]
Some background words about the first question.\\[-6.5mm]
\begin{subparts}
\noboxedpoints
\subpart[2] Show that John is a boy.
\subpart[6] Show that Jane is a girl.
\subpart[3 \half] Show that Janice is a monkey.
\end{subparts}
\vspace{5mm}
\boxedpoints
\part[4]
\noboxedpoints
My second question is here and it is worth 4 points. There are no subparts.
\end{parts}
\end{questions}
\end{document}