
Ich möchte die Antworten ans Ende des Dokuments stellen, so wie es Martin Scharrer in seiner Antwort auf die Frage getan hat.tex core - Lösungen der Fragen „separat“ anzeigen - TeX - LaTeX Stack Exchange, ich kann jetzt die Antworten auf Fragen des Typs „Richtig oder Falsch“ und die Antworten auf Fragen mit Mehrfachauswahl eingeben, habe aber keine Methode, um die Antworten in die Lösungsumgebung der Prüfungsklasse einzubetten.
Hier ist mein Code
%\documentclass[answers,12pt]{exam}
\documentclass[12pt]{exam}
\usepackage{environ}
\usepackage[normalem]{ulem}
\usepackage{etoolbox}
\usepackage{amssymb}
\newcommand\False{$\times$}
\newcommand\True{$\checkmark$}
\newlength\answerspace
\setlength\answerspace{0.5in}
\newcommand\dottedanswerline[1][{}]{%
% One optional argument, the default value of which is empty.
\unskip\linebreak[0]\enspace
\hbox{}\nobreak\dotfill
\ifprintanswers %whether to show the answers or leave it as a blank
\hbox to \answerspace{(\hfil#1\hfil)}%
% \xappto\answertext{\expandonce{\thequestion\theanswer}}
%\xappto\answertext{\thequestion,#1\space}
\else
\hbox{(\hskip 0.5in)}%
\xappto\answertext{\thequestion,#1\space}
\fi
}% dottedanswerline
\newcommand{\answertext}{}
\usepackage{etoolbox}
\NewEnviron{answer}{\xappto\answertext{\expandonce{\BODY}}}%
\makeatletter
\AtEndEnvironment{solution}{\xappto\answertext{\BODY\space}}
%\AtEndEnvironment{solution}{\xappto\answertext{\thequestion,\BODY\space}}
\newlength\choiceitemwidth
\newif\ifshowsolution \showsolutiontrue
\newcounter{choiceitem}%选项的序号计数单元
\def\thechoiceitem{\Alph{choiceitem}}%用ABCD来显示选项序号
\def\makechoicelabel#1{#1\uline{\thechoiceitem.}\else\thechoiceitem.\fi\space} %答案显示下划线+字母或者字母,用于最终显示
\def\choice@mesureitem#1{\cr\stepcounter{choiceitem}\makechoicelabel#1}%计数器加1,同时显示ABCD标签,是用于测量长度的
%这个是用来进行测量用的,第一遍\BODY的parse
\def\choicemesureitem{\@ifstar
{\choice@mesureitem\ifprintanswers \xappto\theanswer{\thechoiceitem}}%
{\choice@mesureitem\iffalse}}%
\def\choice@blockitem#1{%
\ifnum\value{choiceitem}>0\hfill\fi
\egroup\hskip0pt
\hbox to \choiceitemwidth\bgroup\hss\refstepcounter{choiceitem}\makechoicelabel#1}
\def\choiceblockitem{\@ifstar
{\choice@blockitem\ifprintanswers}%
{\choice@blockitem\iffalse}}
\def\choice@paraitem#1{%
\par\refstepcounter{choiceitem}\makechoicelabel#1}
\def\choiceparaitem{\@ifstar
{\choice@paraitem\ifprintanswers}%
{\choice@paraitem\iffalse}}
\NewEnviron{mychoices}{%
\def\theanswer{}
\begingroup
\let\item\choicemesureitem
\setcounter{choiceitem}{0}%
\settowidth{\global\choiceitemwidth}{\vbox{\halign{##\hfil\cr\BODY\crcr}}}%
\endgroup
\dottedanswerline[\theanswer]
\trivlist\item\relax
\parindent0pt
\setcounter{choiceitem}{0}%
\ifdim\choiceitemwidth<0.24\linewidth
\choiceitemwidth=0.25\linewidth
\let\item\choiceblockitem
\bgroup\BODY\hfill\egroup
\else\ifdim\choiceitemwidth<0.48\linewidth
\choiceitemwidth=0.5\linewidth
\let\item\choiceblockitem
\bgroup\BODY\hfill\egroup
\else % \choiceitemwidth > 0.5\linewidth
\let\item\choiceparaitem
\BODY
\fi\fi
\endtrivlist
}
\makeatother
\begin{document}
\section{True OR False questions}
\begin{questions}
\question text text text text text text text text text text text text.\dottedanswerline[\True]
\question text text text text text text text text text text text text.\dottedanswerline[\True]
\question text text text text text text text text text text text text.\dottedanswerline[\False]
\end{questions}
\section{Multiply choices questions}
\begin{questions}
\question Why is there air?
\begin{mychoices}
\item To blow up volleyballs.
\item* To fill an unneeded void.
\end{mychoices}
\question text text text text text text text text text text text text text text text text text text text text
\begin{mychoices}
\item foo
\item bar
\item*baz
\end{mychoices}
\end{questions}
\section{Other questions}
\begin{questions}
\question[5] text text text text text text text text text text text text text text text text?
\begin{solution}[2cm]
1, text answer1
2, text answer2
\end{solution}
\question text text text text text text text text text text text text text text text text?
\begin{parts}
\part[2]
part one?
\part[2]
part two?
\end{parts}
\begin{solution}[2cm]
1, answer to part1
2, answer to part2
\end{solution}
\end{questions}
\section{Answers}
% \newpage
% Some time later
\answertext
\end{document}
Und hier ist der Screenshot. Ich möchte nur die Antworten (in blauer Farbe) am Ende des Dokuments einfügen. Diese Antworten werden in die von der Prüfungsklasse definierte Lösungsumgebung eingefügt. Daher versuche ich, den \AtEndEnvironment{solution}{\xappto\answertext{\thequestion,\BODY\space}}
Befehl zu verwenden, um den Hauptteil der Lösungsumgebung an die globale Variable anzuhängen, aber sie \BODY
ist sicherlich nicht definiert.
Eine weitere Verbesserung besteht darin, dass ich verschiedene Arten von Antworten in unterschiedliche Absätze einfügen muss und nicht in dieselbe Zeile, wie derzeit im Bild gezeigt.