使用 \question 和 \titledquestion 与考试文档类

使用 \question 和 \titledquestion 与考试文档类

我想同时使用documentclass\question和 ,而不弄乱成绩表。从\titledquestionexam这个问题我们知道如何修补questions环境,以便保留带有问题编号的成绩表。但是,该问题的解决方案仅适用于,如果使用没有标题的命令\titledquestion排版某些问题,它就会失效。\question

例如,使用\question命令输入问题 2(参见下面的 MWE)将产生一行“问题 2:2...”。我们看到它将exam问题的编号视为其标题,因此将其打印两次。在这种情况下,我希望将其缩减为“问题 2...”,但同时我希望保留标题问题的行为。


我尝试将宏与 if 语句进行比较:

\if\thequestiontitle\thequestion ...

但这种方法似乎太简单了,无论如何我都无法让它发挥作用。附上我的 MWE:

\documentclass[addpoints]{exam}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\questions}
  {\def\@currentlabel{\thequestiontitle}}
  {\def\@currentlabel{\thequestion}}
  {}
  {}
\makeatother
\qformat{Question~\thequestion:~\thequestiontitle\dotfill (\thepoints)}

\begin{document}
\begin{questions}
\titledquestion{Wood}[15]
How much wood would a woodchuck chuck if a woodchuck could chuck
wood?
\question[10] Here the problem turns up!
\end{questions}
\gradetable[v][questions]
\end{document}

答案1

假设您反对的是问题标题中的多余的“2”......

\documentclass[addpoints]{exam}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\questions}
  {\def\@currentlabel{\thequestiontitle}}
  {\def\@currentlabel{\thequestion}}
  {}
  {}
\patchcmd{\questions}
  {\def\question{%
    \@bonusfalse
    \def\thequestiontitle{\csname p@question\endcsname
                          \csname thequestion\endcsname}%
    \process@question
  }}%
  {\def\question{%
    \@bonusfalse
    \def\thequestiontitle{\csname p@question\endcsname}%
    \process@question
  }}%
  {}
  {FAILED}
\makeatother
\qformat{Question~\thequestion:~\thequestiontitle\dotfill (\thepoints)}

\begin{document}
\begin{questions}
\titledquestion{Wood}[15]
How much wood would a woodchuck chuck if a woodchuck could chuck
wood?
\question[10] Here the problem turns up!
\end{questions}
\gradetable[v][questions]
\end{document}

相关内容