确定考试类别部分的总分

确定考试类别部分的总分

在我写的考试中,我有一个简答题部分和一个多项选择题部分。每个部分都应该从 1 开始有题目。正如这个问题,如果您想这样做并避免出现有关问题标签名称冲突的警告,您需要修改问题标签以包含部分名称;我已经使用\xpatchcmd以下示例所示完成了此操作。修补成功(通过查看 .aux 文件和缺少警告消息进行验证)。

问题是我不想按页面或成绩编号组织成绩表,而是按部分组织。由于似乎没有内置的方法来以这种方式创建成绩表,因此我使用自定义表中的 、 和 手动创建成绩表\begingraderange\endgraderange\pointsinrange遇到的问题是总数\pointsinrange不准确。我认为这是因为在对范围内的点求和时,除了问题标签之外还存在某种名称冲突;我认为这与 .aux 文件中的命令有关\newlabel(下面用 标记<===),其中定义了唯一的问题标签,但每个标签的值都相同。

当我运行以下代码时,在成绩表中,我发现简答题和多项选择题的总分均为 2 分,但实际应该分别为 10 分和 4 分。我得到了正确的总分值 (14)。关于如何让这个程序正常工作,您有什么想法吗?同时还可以将每个部分的问题数量重置为 1

\documentclass[11pt,addpoints]{exam}

% The following patches avoid name collisions with questions
% of the same number in different sections by adding the section
% name to the question label.
\usepackage{xpatch}
\xpatchcmd{\questions}{question@\arabic{question}}
                      {question@\arabic{section}@\arabic{question}}{}{}
\xpatchcmd{\parts}{part@\arabic{question}@\arabic{partno}}
                  {part@\arabic{section}@\arabic{question}@\arabic{partno}}{}{}
\xpatchcmd{\first@questionobject}{question\arabic{question}}
                                 {question\arabic{section}@\arabic{question}}{}{}
\xpatchcmd{\addquestionobject}{question\arabic{question}}
                              {question\arabic{section}@\arabic{question}}{}{}
\xpatchcmd{\questionobject@pluspagecheck}{question\arabic{question}}
                                         {question\arabic{section}@\arabic{question}}{}{}

\begin{document}

\section{Short Answer}
\begin{questions}
\begingradingrange{section1}
\question[5] First Question
\question[5] Second Question
\endgradingrange{section1}
\end{questions}

\section{Multiple Choice}
\begin{questions}
\begingradingrange{section2}
\question[2] First Question
\question[2] Second Question
\endgradingrange{section2}
\end{questions}

\section{Extra Credit}
\begin{questions}
\bonusquestion[5] Bonus
\end{questions}

\begin{center}
\begin{tabular}{|r|c|c|}
 \hline
 \multicolumn{3}{|c|}{\textbf{Exam Score}}                           \\ \hline
 \textbf{Section} & \textbf{Points}                 & \textbf{Score} \\ \hline
 Short Answer     & \pointsinrange{section1}        &                \\ \hline
 Multiple Choice  & \pointsinrange{section2}        &                \\ \hline
 Bonus            & \numbonuspoints                 &                \\ \hline
 Total            & \numpoints                      &                \\ \hline
\end{tabular}
\end{center}

\end{document}

.aux 文件摘录:

...
\PgInfo{question@1@2}{1}
\PgInfo{question1@2@object1}{1}
\newlabel{question@1@2}{{2}{1}}  <=== Value same as question@2@2
...
\PgInfo{question@2@2}{1}
\PgInfo{question2@2@object1}{1}
\newlabel{question@2@2}{{2}{1}}  <=== Value same as question@1@2

答案1

这是另一种使用假计数器打印假问题号的解决方案。

首先,我们定义计数器(每次重置\section)以及标题问题和标题奖励问题的格式:

\newcounter{fakecount}[section]
\qformat{\thefakecount. (\thepoints) \thequestiontitle\hfill}
\bonusqformat{\thefakecount. (\thebonuspoints) \thequestiontitle\hfill}

一开始questions我们重新定义\titledquestion\bonustitledquestion增加假计数器:

\let\oldtitledquestion\titledquestion
\renewcommand{\titledquestion}{\stepcounter{fakecount}\oldtitledquestion}
\let\oldbonustitledquestion\bonustitledquestion
\renewcommand{\bonustitledquestion}{\stepcounter{fakecount}\oldbonustitledquestion}

此时,您只需使用\titledquestion而不是\question\bonustitledquestion而不是即可\bonusquestion使其发挥作用。

MWE(注意使用\leavevmode之前的EnvFullwidth环境来避免不必要的行为......)

\documentclass[11pt,addpoints]{exam}
\usepackage{lipsum}
\newcounter{fakecount}[section]
\qformat{\thefakecount. (\thepoints) \thequestiontitle\hfill}
\bonusqformat{\thefakecount. (\thebonuspoints) \thequestiontitle\hfill}

\begin{document}

\begin{questions}
\let\oldtitledquestion\titledquestion
\renewcommand{\titledquestion}{\stepcounter{fakecount}\oldtitledquestion}
\let\oldbonustitledquestion\bonustitledquestion
\renewcommand{\bonustitledquestion}{\stepcounter{fakecount}\oldbonustitledquestion}

\begin{EnvFullwidth}
\section{Short Answer}
\lipsum[2]
\end{EnvFullwidth}

\begingradingrange{section1}
\titledquestion{First Question}[5]
\titledquestion{Second Question}[5]
\endgradingrange{section1}

\leavevmode
\begin{EnvFullwidth}
\section{Multiple Choice}
\lipsum[2]
\end{EnvFullwidth}

\begingradingrange{section2}
\titledquestion{First Question}[2]
\titledquestion{Second Question}[2]
\endgradingrange{section2}

\leavevmode
\begin{EnvFullwidth}
\section{Extra Credit}
\lipsum[2]
\end{EnvFullwidth}

\bonustitledquestion{Bonus}[5]
\end{questions}

\begin{center}
\begin{tabular}{|r|c|c|}
 \hline
 \multicolumn{3}{|c|}{\textbf{Exam Score}}                           \\ \hline
 \textbf{Section} & \textbf{Points}                 & \textbf{Score} \\ \hline
 Short Answer     & \pointsinrange{section1}        &                \\ \hline
 Multiple Choice  & \pointsinrange{section2}        &                \\ \hline
 Bonus            & \numbonuspoints                 &                \\ \hline
 Total            & \numpoints                      &                \\ \hline
\end{tabular}
\end{center}

\end{document} 

输出:

在此处输入图片描述

答案2

我知道这并不是您所寻找的,但是课堂积分计算背后的机制exam非常复杂,因此我向您提出了一种不同的解决方案。

您可能知道,当您使用多个环境时就会出现问题,因此我的建议是仅在一个环境内的环境中questions嵌入\sections 和其他内容。EnvFullwidthquestions

通过这种方式,您还可以消除序言中的补丁。

梅威瑟:

\documentclass[11pt,addpoints]{exam}
\usepackage{lipsum}

\begin{document}

\begin{questions}
\begin{EnvFullwidth}
\section{Short Answer}
\lipsum[2]
\end{EnvFullwidth}

\begingradingrange{section1}
\question[5] First Question
\question[5] Second Question
\endgradingrange{section1}

\begin{EnvFullwidth}
\section{Multiple Choice}
\lipsum[2]
\end{EnvFullwidth}

\begingradingrange{section2}
\question[2] First Question
\question[2] Second Question
\endgradingrange{section2}

\begin{EnvFullwidth}
\section{Extra Credit}
\lipsum[2]
\end{EnvFullwidth}

\bonusquestion[5] Bonus
\end{questions}

\begin{center}
\begin{tabular}{|r|c|c|}
 \hline
 \multicolumn{3}{|c|}{\textbf{Exam Score}}                           \\ \hline
 \textbf{Section} & \textbf{Points}                 & \textbf{Score} \\ \hline
 Short Answer     & \pointsinrange{section1}        &                \\ \hline
 Multiple Choice  & \pointsinrange{section2}        &                \\ \hline
 Bonus            & \numbonuspoints                 &                \\ \hline
 Total            & \numpoints                      &                \\ \hline
\end{tabular}
\end{center}

\end{document} 

输出(表格):

在此处输入图片描述

答案3

抱歉,我对包一无所知。我只保留了示例代码中的标记,exam并定义了序列\begingradingrange、、、,以及它们的工作方式。我完全忽略了的功能。这可能是错误的,因为您需要将功能与此处描述的功能联系起来。但我的示例表明,如果我们知道 TeX 基元\endgradingrange,那么我们就不需要使用外部包并对该包进行复杂的修补,因为编写自己的代码更简单。\question\bonusquestion \pointsinrange\numbonuspoints\numpointsexamexam

\documentclass[11pt,addpoints]{exam}

\newcount\qnum \newcount\points \newcount\totpoints
\def\begingradingrange#1{\bgroup\def\currrange{#1}}
\def\endgradingrange#1{%
   \expandafter\xdef\csname p:\currrange\endcsname{\the\points}%
   \egroup\vskip2\baselineskip}
\def\question[#1]{\par\everypar={}\smallskip
  \advance\qnum by1 \advance\points by#1 \global\advance\totpoints by#1
  \indent\llap{\the\qnum. }(#1 point\ifcase#1s\or\else s\fi)
  \ignorespaces
}
\def\bonusquestion[#1]{%
  \expandafter\gdef\csname p:bonus\endcsname{#1}% 
  \question[#1]%
}
\def\pointsinrange#1{\csname p:#1\endcsname}
\def\numpoints{\the\totpoints}
\def\numbonuspoints{\csname p:bonus\endcsname}

\begin{document}

\section{Short Answer}
%\begin{questions}
\begingradingrange{section1}
\question[5] First Question
\question[5] Second Question
\endgradingrange{section1}
%\end{questions}

\section{Multiple Choice}
%\begin{questions}
\begingradingrange{section2}
\question[2] First Question
\question[2] Second Question
\endgradingrange{section2}
%\end{questions}

\section{Extra Credit}
%\begin{questions}
\bonusquestion[5] Bonus
%\end{questions}
\bigskip

\begin{center}
\begin{tabular}{|r|c|c|}
 \hline
 \multicolumn{3}{|c|}{\textbf{Exam Score}}                           \\
\hline
 \textbf{Section} & \textbf{Points}                 & \textbf{Score} \\
\hline
 Short Answer     & \pointsinrange{section1}        &                \\
\hline
 Multiple Choice  & \pointsinrange{section2}        &                \\
\hline
 Bonus            & \numbonuspoints                 &                \\
\hline
 Total            & \numpoints                      &                \\
\hline
\end{tabular}
\end{center}

\end{document}

相关内容