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 \def
para mantener las puntuaciones de las preguntas, pero la idea es poder agregar subpreguntas que incrementen el contador de preguntas.
Mis preguntas
- ¿Existe un enfoque mejor que el siguiente MWE?
- ¿Qué está pasando mal?
- 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 qpoints1
y qpoints2
:
Respuesta1
\global\expandafter
no hace nada útil. Debe expandir el argumento antes de pasarlo a \newtotcounter
y \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