1

I use the exam class to produce exams for students, and I want to make a kind of questions, which puts in front the total points, but given detailed. I give an example:

\documentclass[addpoints]{exam}

\pointformat{}
\qformat{\textbf{Question \thequestion}. [Points of question \thequestion: \totalpoints]\hfill}

\begin{document}
\begin{questions}
\question
\begin{parts}
\part[3]
\part[2]
\end{parts}
\end{questions}
\end{document}

which gives this output:

enter image description here

I want to obtain, as output, the detailed points of the question, so precisely something like:

[Points of question 1: 3+2=5 points]

How can I obtain this ?

10
  • The information is stored on the aux files as \gdef\pointsofq@i{5}. Alas, no points per part are so saved. Nov 24, 2017 at 18:00
  • So we must install a similar command storing the information on the aux file for parts... something like \gdef\pointsofpartofq{.}.. I'm not a programmer but I think that it's not very difficult.. It's surprising that this macro does not exist because it's useful, I think ! Nov 24, 2017 at 18:38
  • For idea ! I found in exam.cls the command \def\do@cvloop{...} which seems to do the loops for computing \totalpoints Nov 24, 2017 at 18:49
  • I haven't found exercise@parts in exam.cls. where is it ? Nov 25, 2017 at 6:33
  • The macro \def\begingradingrange seems to do something like my purpose Nov 25, 2017 at 7:16

1 Answer 1

3

The key was figuring out the \@doitem was actually processing the argument. While it is defined globally, I only want to modify/replace it for parts.

The \expandafters are to expand \else and \fi first.

\documentclass[addpoints]{exam}

\pointformat{}
\qformat{\textbf{Question \thequestion}. [Points of question \thequestion: \details\totalpoints]\hfill}

\makeatletter
\newcommand{\details}{\@ifundefined{details@\roman{question}}{}{\csname details@\roman{question}\endcsname =}}

\newcommand{\@details}{}% reserve global name

\let\normal@parts=\parts
\let\endnormal@parts=\endparts
\renewenvironment{parts}% no arguments?
 {\xdef\@details{\@empty}% initialize
  \normal@parts
  \let\normal@part=\@doitem
  \let\@doitem=\my@part
 }{%
  \endnormal@parts
  \ifx\@empty\@details
  \else
    \immediate\write\@auxout{\string\gdef\string\details@\roman{question}{\@details}}
  \fi
 }

\newcommand{\my@part}[1][\@empty]{%
  \ifx\@empty#1\relax
    \expandafter\normal@part
  \else
    \ifx\@empty\@details
      \xdef\@details{#1}%
    \else
      \xdef\@details{\@details +#1}%
    \fi
    \expandafter\normal@part\expandafter[\expandafter#1\expandafter]%
  \fi
}%
\makeatother  

\begin{document}

\begin{questions}
\question[5]
\question
\begin{parts}
\part[3]
\part[2]
\end{parts}
\end{questions}
\end{document}
4
  • I just saw your answer. Thank you for your ingenious answer Dec 2, 2017 at 20:36
  • if there is macros like this one in "Oathbringer"'s I'll read all of them in one night Dec 2, 2017 at 20:39
  • I don't know how many pages it comes to but the Kindle was 22MB. Dec 2, 2017 at 20:54
  • If I count about 15-20 Ko for a mathematical pdf page, it will be inhuman to read all this in one night ! Dec 2, 2017 at 21:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .