Problema ao usar `totcount` para criar uma pergunta de contador de pontuação por exame

Problema ao usar `totcount` para criar uma pergunta de contador de pontuação por exame

Na folha de rosto de um exame, quero gerar uma tabulação das questões e seus totais de pontos. (Isso faz parte de um pacote que estou escrevendo. Conheço exam.sty, mas não me convém.) Tenho um loop que gera a tabela, mas no meu MWE abaixo, apenas tabulo manualmente: o problema está em o arquivo auxiliar.

Estou tentando usar totcount. Funciona bem para controlar o número de perguntas e a contagem de pontos, mas não consigo registrar o total de pontos de cada pergunta no aux.

NB: Não estou acima de apenas usar a \defpara manter a pontuação das perguntas, mas a ideia é poder adicionar subperguntas que incrementem o contador de perguntas.

Minhas perguntas

  1. Existe uma abordagem melhor do que no MWE abaixo
  2. O que está errado?
  3. Se não devo abandonar essa abordagem, como posso corrigi-la?

MWE

No MWE abaixo,

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

o total de pontos da questão final é simplesmente registrado com a multiplicidade do número de questões. Nesse caso específico de 3 perguntas, o arquivo aux diz:

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

e o documento (e registro) refletem a ausência de qpoints1e qpoints2:

insira a descrição da imagem aqui

Responder1

\global\expandafternão faz nada de útil. Você precisa expandir o argumento antes de passá-lo para \newtotcounterand \setcounter.

Você também precisa lidar com os contadores possivelmente ainda não existentes.

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

Depois de duas corridas você obterá

insira a descrição da imagem aqui

informação relacionada