시험별 점수 카운터를 생성하기 위해 'totcount'를 사용하는 문제

시험별 점수 카운터를 생성하기 위해 'totcount'를 사용하는 문제

시험 표지에 문제와 총점을 표로 작성하고 싶습니다. (이것은 제가 작성 중인 패키지의 일부입니다. 알고 있지만 exam.sty저에게는 적합하지 않습니다.) 테이블을 생성하는 루프가 있지만 아래 MWE에서는 수동으로 표를 작성합니다. 문제는 다음과 같습니다. aux 파일입니다.

을 사용하려고 합니다 totcount. 질문 수와 점수 집계를 추적하는 데는 잘 작동하지만 각 질문의 총 점수를 Aux에 기록하도록 할 수는 없습니다.

NB: 질문 점수를 유지하기 위해 a를 사용하는 것 이상은 아니지만 \def질문 카운터를 증가시키는 하위 질문을 추가할 수 있기를 원합니다.

내 질문

  1. 아래 MWE보다 더 나은 접근 방식이 있습니까?
  2. 무슨 일이 일어나고 있나요?
  3. 이 접근 방식을 포기하지 않으려면 어떻게 해결해야 합니까?

MWE

아래 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}

최종 질문의 총점은 질문 수의 다양성으로 간단히 기록됩니다. 3가지 질문이 있는 특정 사례에서 aux 파일은 다음과 같습니다.

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

문서(및 ​​로그)는 qpoints1및 의 부재를 반영합니다 qpoints2.

여기에 이미지 설명을 입력하세요

답변1

\global\expandafter아무것도 유용하지 않습니다. 인수를 \newtotcounterand 에 전달하기 전에 인수를 확장해야 합니다 \setcounter.

또한 아직 존재하지 않는 카운터에도 대처해야 합니다.

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

두 번 실행하면 얻을 수 있습니다.

여기에 이미지 설명을 입력하세요

관련 정보