演習問題の解答スペースと解答例をpLaTeXで作る

授業で時々実施する小テストや少し大きい演習課題、期末試験問題をLaTeXで作っている。

問題文の下に解答を手書きするスペースを作るだけなら、例えば、 \vspace{3cm} などとしておくだけでよいのだが、

  • 通常は 3cm 空ける
  • 条件によってその 3cm の中に解答例を作っておく

と採点や後日解説するのにそのまま使えて便利だなぁと思いながら10年ぐらい手を付けずにいた。

ここ1週間、ちょっとがんばってみたら最低限のことはできたと思う。きっと、肝心なことを忘れて、余計なこともしているはず。

\newif\if解答例
\解答例false % 通常
% \解答例true % 解答例を見せたい

\newlength{\heightofkaitoubox}
\newlength{\kaitouskip}
\newsavebox{\kaitoubox}
%%%% \Kaitourei{space}{解答例の中身}
\newcommand{\Kaitourei}[2]{%
\if解答例
\setlength{\kaitouskip}{#1}
\savebox{\kaitoubox}{%
\mbox{}\vspace{2em}\par%
\begin{minipage}{0.8\textwidth}
{#2}%
\end{minipage}}
\begin{center}
\usebox{\kaitoubox}
\end{center}
\settoheight{\heightofkaitoubox}{\usebox{\kaitoubox}}
\heightofkaitoubox=\ht\kaitoubox
\advance\kaitouskip by -\heightofkaitoubox
\vspace{\kaitouskip}
\else
\vspace{#1}
\fi
}

使用例

問:あれをああしてこうしてそうするとどうなるか?

\解答例true
\Kaitourei{3cm}{

あれをああしてこうしてそうすると、こうなります。

}

問題点

問題文と解答例の間を少し空けたいが空かない。