
Я хочу показать ключи ответов в конце страницы экзамена (с множественным выбором). У меня есть банк вопросов и ответов (всегда первый ответ в банке считается правильным выбором), а также несколько макросов для перемешивания вопросов и ответов. Все файлы прикреплены (здесь). Результат также показан ниже. Проблема в том, что я не могу показать правильные ответы в конце страницы.
решение1
Существуют различные пакеты, которые помогут вам создавать экзамены и тесты. Я не очень хорошо с ними знаком, потому что я создал свой собственный. Вот очень упрощенная версия того, что я использую:
\documentclass{article}
\makeatletter
\newcounter{ae@prob@cnt}
\let\ae@answer@key\relax
\newcommand\problem[1][a]{%%
\stepcounter{ae@prob@cnt}%%
\edef\ae@tmp{\theae@prob@cnt/#1}%%
\ifx\relax\ae@answer@key
\edef\ae@answer@key{\ae@tmp}%%
\else
\edef\ae@answer@key{\ae@answer@key,\ae@tmp}%%
\fi
Problem \theae@prob@cnt\hspace{1em}%%%
}
\newcommand\presentanswerkey{%%
\expandafter\ae@present@answers\ae@answer@key,\relax\@nil}
\def\ae@present@answers#1,#2\@nil{%%
\def\ae@continue{}%%
\ae@parse@pair#1\@nil
\ifx\relax#2
\else
\def\ae@continue{\ae@present@answers#2\@nil}%%
\fi
\ae@continue}
\def\ae@parse@pair#1/#2\@nil{%%
#1\hspace{0.25cm}#2\par}
\makeatother
\begin{document}
\problem[a] This is a question
\problem[b] This is another question
\problem[d] This is the penultimate question
\problem[c] My favorite question.
\presentanswerkey
\end{document}
ОБНОВЛЯТЬ
Вот измененная версия вышеизложенного:
\makeatletter
\let\ae@answer@key\relax
\newcommand\buildanswerkey[2]{%%
\typeout{===>#1:#2}%%
\edef\ae@tmp{#1/#2}%%
\ifx\relax\ae@answer@key
\xdef\ae@answer@key{\ae@tmp}%%
\else
\xdef\ae@answer@key{\ae@answer@key,\ae@tmp}%%
\fi}
\newcommand\presentanswerkey{%%
\typeout{===>\detokenize\expandafter{\ae@answer@key}}%%
\expandafter\ae@present@answers\ae@answer@key,\relax\@nil}
\def\ae@present@answers#1,#2\@nil{%%
\def\ae@continue{}%%
\ae@parse@pair#1\@nil
\ifx\relax#2
\else
\def\ae@continue{\ae@present@answers#2\@nil}%%
\fi
\ae@continue}
\def\ae@parse@pair#1/#2\@nil{%%
#1\hspace{0.25cm}#2\par}
\makeatother
Сохраните его в файле с именем buildanswerkey.tex
и загрузите в свой commandsPerm.tex
файл.
В commandsPerm.tex
, я переписал несколько строк следующим образом:
%%-----------------------------------------
\pgfmathrandomitemwithoutreplacement\j{tmp}
\sbox\answera{\ifx\j\correctAnswer * \expandafter\buildanswerkey\expandafter{\thequestion}{a}\fi\ifcase\j\relax\or#1\or#2\or#3\or#4\fi}%
\ifx\j\javab \questionhaspoints{\thequestion = 1} \fi
%%-----------------------------------------
\pgfmathrandomitemwithoutreplacement\j{tmp}
\sbox\answerb{\ifx\j\correctAnswer * \expandafter\buildanswerkey\expandafter{\thequestion}{b}\fi\ifcase\j\relax\or#1\or#2\or#3\or#4\fi}%
\ifx\j\javab \questionhaspoints{\thequestion = 2} \fi
%%-----------------------------------------
\pgfmathrandomitemwithoutreplacement\j{tmp}
\sbox\answerc{\ifx\j\correctAnswer * \expandafter\buildanswerkey\expandafter{\thequestion}{c}\fi\ifcase\j\relax\or#1\or#2\or#3\or#4\fi}%
\ifx\j\javab \questionhaspoints{\thequestion = 3} \fi
%%-----------------------------------------
\pgfmathrandomitemwithoutreplacement\j{tmp}
\sbox\answerd{\ifx\j\correctAnswer * \expandafter\buildanswerkey\expandafter{\thequestion}{d}\fi\ifcase\j\relax\or#1\or#2\or#3\or#4\fi}%
\ifx\j\javab \questionhaspoints{\thequestion = 4} \fi
Затем, когда вы компилируете свой файл, вы получаете ключ ответа. Я не стал выяснять, как вы намеревались создать свой ключ ответа, но, вызвав \presentanswerkey
перед выходом из своей mcquestions
среды, вы получите правильный ключ: