我想同时使用documentclass\question
和 ,而不弄乱成绩表。从\titledquestion
exam
这个问题我们知道如何修补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}