如何在第一次编译时正确修补 \totalpoints 命令而不出现错误

如何在第一次编译时正确修补 \totalpoints 命令而不出现错误

我的目标是让半个点以逗号作为小数符号打印(例如 2,5 个点)。因此,我使用了一种变通方法,将所有点乘以 10,然后使用 etoolbox 中的 patchmd 命令以及 fp 和 numprint 包中的 FPDiv 和 numprint 命令分别除以 10 并打印带有正确小数符号的数字(请参阅考试包小数点)。但是,我还想在标题处打印点数\titledquestion。为此,我使用命令\qformat{\Large \textbf{Aufgabe \thequestion: \thequestiontitle~(\totalpoints~Punkte)} \hfill}。这里的问题是我不知道如何正确修补命令\totalpoints。查看 exam.cls 源代码后,我看到定义为\pointsofquestion{\arabic{question}}。我尝试修补它们两个,但第一次编译总是失败。只有当我第二次编译它时,当第一次编译时注释掉 patch 命令时,它才会起作用。我将不胜感激任何帮助。

这是一个展示我的问题的最小工作示例:

\documentclass[addpoints, 10pt, answers]{exam}
\usepackage{etoolbox}
\usepackage{fp}
\usepackage{numprint}
\npdecimalsign{,}
\nprounddigits{1}

% Only works on 2nd compile
\patchcmd{\totalpoints}{\pointsofquestion{\arabic{question}}}{\FPdiv\pointdiv{\pointsofquestion{\arabic{question}}}{10}\numprint{\pointdiv}}{}{}

\qformat{\Large \textbf{Task \thequestion: \thequestiontitle~(\totalpoints~Points)} \hfill}
\begin{document}

\newpage
\begin{questions}
    \titledquestion{Question 1}
    \begin{parts}
    \part[20] Subtask 1
    \part[15] Subtask 2
    \end{parts}
\end{questions}

\end{document}

答案1

作为一种快速解决方法,你可以修改定义以\pointsofquestion输出 -10(如果尚未计算点)(即,在第一次运行),而不是??这让人困惑\FPdiv

\documentclass[addpoints]{exam}
\usepackage{etoolbox}
\usepackage{fp}
\usepackage{numprint}
\npdecimalsign{,}
\nprounddigits{1}

\patchcmd{\pointsofquestion}{\mbox{\normalfont\bfseries ??}}{-10}{}{}
\patchcmd{\totalpoints}{\pointsofquestion{\arabic{question}}}{\FPdiv\pointdiv{\pointsofquestion{\arabic{question}}}{10}\numprint{\pointdiv}}{}{}

\qformat{\Large \textbf{Task \thequestion: \thequestiontitle~(\totalpoints~Points)} \hfill}
\begin{document}

Points of question 1: \pointsofquestion{1}
\begin{questions}
    \titledquestion{Question 1}
    \begin{parts}
    \part[20] Subtask 1
    \part[15] Subtask 2
    \end{parts}
\end{questions}

\end{document}

第一次编译:

在此处输入图片描述

第二次编译:

在此处输入图片描述

相关内容