Problema al utilizar "totcount" para crear un contador de puntuación por pregunta de examen

Problema al utilizar "totcount" para crear un contador de puntuación por pregunta de examen

En la portada de un examen, quiero generar una tabulación de las preguntas y sus puntos totales. (Esto es parte de un paquete que estoy escribiendo. Lo conozco exam.sty, pero no me conviene). Tengo un bucle que genera la tabla, pero en mi MWE a continuación, simplemente tabulo manualmente: el problema está en el archivo auxiliar.

Estoy intentando utilizar totcount. Funciona bien para realizar un seguimiento del número de preguntas y el recuento de puntos, pero no puedo hacer que registre el total de puntos de cada pregunta en el auxiliar.

NB: No estoy por encima de usar a \defpara mantener las puntuaciones de las preguntas, pero la idea es poder agregar subpreguntas que incrementen el contador de preguntas.

Mis preguntas

  1. ¿Existe un enfoque mejor que el siguiente MWE?
  2. ¿Qué está pasando mal?
  3. Si no debo abandonar este enfoque, ¿cómo lo soluciono?

MWE

En el siguiente 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}

el total de puntos de la pregunta final simplemente se registra con la multiplicidad del número de preguntas. En ese caso específico de 3 preguntas, el archivo auxiliar dice:

\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}

y el documento (y el registro) reflejan la ausencia de qpoints1y qpoints2:

ingrese la descripción de la imagen aquí

Respuesta1

\global\expandafterno hace nada útil. Debe expandir el argumento antes de pasarlo a \newtotcountery \setcounter.

También es necesario hacer frente a los contadores que posiblemente aún no existan.

\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}

Después de dos carreras obtendrás

ingrese la descripción de la imagen aquí

información relacionada