
我想把答案放在文件的末尾,就像 Martin Scharrer 在回答問題時所做的那樣tex core - “單獨”顯示問題的解決方案,我現在可以放置「對或錯」類問題的答案,以及多項選擇題的答案,但我沒有辦法將答案放在考試類別的解決方案環境中。
這是我的程式碼
%\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}
這是螢幕截圖,我只想將答案(藍色)放在文件的末尾。這些答案放在考試類別定義的解決方案環境中,因此我嘗試使用命令\AtEndEnvironment{solution}{\xappto\answertext{\thequestion,\BODY\space}}
將解決方案環境的主體附加到全域變量,但肯定\BODY
沒有定義。
另一個改進是我需要將不同類型的答案放在不同的段落中,而不是像當前圖像中所示的那樣放在同一行中。