
Quiero poner las respuestas al final del documento, tal como lo hizo Martin Scharrer en su respuesta a la pregunta.tex core - Mostrando soluciones de las preguntas "por separado" - TeX - LaTeX Stack ExchangeAhora puedo poner las respuestas de preguntas del tipo "verdadero o falso" y las respuestas de preguntas de opciones múltiples, pero no tengo un método para poner las respuestas envueltas por el entorno de solución de la clase de examen.
Aquí está mi código.
%\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}
Y aquí está la captura de pantalla, solo quiero poner las respuestas (en color azul) al final del documento. Esas respuestas se colocan en el entorno de solución definido por la clase de examen, por lo que intento usar el \AtEndEnvironment{solution}{\xappto\answertext{\thequestion,\BODY\space}}
comando para agregar el cuerpo del entorno de solución a la variable global, pero seguramente \BODY
no está definido.
Otra mejora es que necesito poner diferentes tipos de respuestas en diferentes párrafos, no en la misma línea como se muestra actualmente en la imagen.