Problem bei der Verwendung von „totcount“, um einen Punktezähler pro Prüfungsfrage zu erstellen

Problem bei der Verwendung von „totcount“, um einen Punktezähler pro Prüfungsfrage zu erstellen

Auf dem Deckblatt einer Prüfung möchte ich eine tabellarische Auflistung der Fragen und ihrer Gesamtpunktzahlen erstellen. (Dies ist Teil eines Pakets, das ich schreibe. Ich weiß davon exam.sty, aber es passt mir nicht.) Ich habe eine Schleife, die die Tabelle generiert, aber in meinem MWE unten tabelliere ich einfach manuell: Das Problem liegt in der AUX-Datei.

Ich versuche, zu verwenden totcount. Damit kann ich die Anzahl der Fragen und die Punktzahl im Auge behalten, aber ich schaffe es nicht, die Gesamtpunktzahl jeder Frage im AUX aufzuzeichnen.

NB: Ich bin nicht abgeneigt, einfach ein zu verwenden, \defum die Punktzahlen der Fragen zu speichern, aber die Idee ist, dass ich Unterfragen hinzufügen können möchte, die den Zähler der Frage erhöhen.

Meine Fragen

  1. Gibt es einen besseren Ansatz als den unten stehenden MWE
  2. Was läuft schief?
  3. Wenn ich diesen Ansatz nicht aufgeben möchte, wie kann ich das Problem beheben?

MWE

Im folgenden MWE,

\documentclass{article}

\RequirePackage{totcount}

\newcounter{questioncount}
\setcounter{questioncount}{0}
\regtotcounter{questioncount}%
\newcounter{scoretotal}
\setcounter{scoretotal}{0}
\regtotcounter{scoretotal}%

\newcommand{\setquestionpoints}[2]{%
  \global\expandafter\newtotcounter{qpoints#1}%
  \global\expandafter\setcounter{qpoints#1}{#2}%
}
\newcommand{\getquestionpoints}[1]{%
  \ifnum\value{qpoints#1}>0
    \arabic{qpoints#1}%
  \else
    0%
  \fi
}

\newcommand{\nquestion}[1]{%
  \stepcounter{questioncount}%
  \setquestionpoints{\thequestioncount}{#1}%
  \addtocounter{scoretotal}{#1}%
  Question~\thequestioncount (#1 marks.)%
}

\begin{document}

\begin{tabular}{r@{:\quad}l}
    Number of Questions & \total{questioncount} \\
    Total points        & \total{scoretotal} \\
    Question 1 max      & \total{qpoints1} \\
    Question 2 max      & \total{qpoints2} \\
    Question 3 max      & \total{qpoints3} \\
\end{tabular}

\vspace{2cm}

\nquestion{10}

\nquestion{12}

\nquestion{15}

\end{document}

Die Gesamtpunktzahl der letzten Frage wird einfach mit dem Vielfachen der Anzahl der Fragen aufgezeichnet. In diesem speziellen Fall von 3 Fragen lautet die AUX-Datei:

\relax 
\expandafter\ifx\csname c@questioncount@totc\endcsname\relax\newcounter{questioncount@totc}\fi\setcounter{questioncount@totc}{3}
\expandafter\ifx\csname c@scoretotal@totc\endcsname\relax\newcounter{scoretotal@totc}\fi\setcounter{scoretotal@totc}{37}
\expandafter\ifx\csname c@qpoints3@totc\endcsname\relax\newcounter{qpoints3@totc}\fi\setcounter{qpoints3@totc}{15}
\expandafter\ifx\csname c@qpoints3@totc\endcsname\relax\newcounter{qpoints3@totc}\fi\setcounter{qpoints3@totc}{15}
\expandafter\ifx\csname c@qpoints3@totc\endcsname\relax\newcounter{qpoints3@totc}\fi\setcounter{qpoints3@totc}{15}
\gdef \@abspage@last{1}

und das Dokument (und das Protokoll) spiegeln das Fehlen von qpoints1und wider qpoints2:

Bildbeschreibung hier eingeben

Antwort1

\global\expandaftertut nichts Nützliches. Sie müssen das Argument erweitern, bevor Sie es an \newtotcounterund übergeben \setcounter.

Auch mit den möglicherweise noch nicht vorhandenen Zählern muss gerechnet werden.

\documentclass{article}

\RequirePackage{totcount}

\newcounter{questioncount}
\setcounter{questioncount}{0}
\regtotcounter{questioncount}%
\newcounter{scoretotal}
\setcounter{scoretotal}{0}
\regtotcounter{scoretotal}%

\newcommand{\setquestionpoints}[2]{%
  \expanded{\noexpand\newtotcounter{qpoints#1}}%
  \expanded{\noexpand\setcounter{qpoints#1}}{#2}%
}
\newcommand{\getquestionpoints}[1]{%
  \ifnum\value{qpoints#1}>0
    \arabic{qpoints#1}%
  \else
    0%
  \fi
}

\newcommand{\nquestion}[1]{%
  \stepcounter{questioncount}%
  \setquestionpoints{\arabic{questioncount}}{#1}%
  \addtocounter{scoretotal}{#1}%
  Question~\thequestioncount (#1 marks.)%
}

\newcommand{\TOTAL}[1]{%
  \ifcsname c@#1@totc\endcsname
    \total{#1}%
  \else
    ??%
  \fi
}

\begin{document}

\begin{tabular}{r@{:\quad}l}
    Number of Questions & \TOTAL{questioncount} \\
    Total points        & \TOTAL{scoretotal} \\
    Question 1 max      & \TOTAL{qpoints1} \\
    Question 2 max      & \TOTAL{qpoints2} \\
    Question 3 max      & \TOTAL{qpoints3} \\
\end{tabular}

\vspace{2cm}

\nquestion{10}

\nquestion{12}

\nquestion{15}

\end{document}

Nach zwei Durchläufen erhältst du

Bildbeschreibung hier eingeben

verwandte Informationen