名前: みなも 日時: 2005-12-28 00:13:06 IPアドレス: 220.209.225.*
>>40149 ちょっと時間が空いたので,作ってみました。 すでにいくつか解答が提示されているようですが, まぁ別解ということで。 この「別解」の特徴は, ・ソースの行単位で別ファイルに転送すること(したがって,かなり長い解答でもOK) ・\ や & など特殊な意味を持つ(特殊なカテゴリーを割りふられている)文字の カテゴリーを変更して,不用意に展開されることを抑制している の2点です。ちなみにこのマクロの元ネタは TeX ブック Appendix E の終わりの方 (第2版第2刷だと p.569)に載っているものです。 (うちの環境固有の設定を除いていくとほぼオリジナルと同じになってしまいました。) \makeatletter \newwrite\tf@ans \immediate\openout\tf@ans=\jobname.ans \def\ans{% \immediate\write\tf@ans{\vskip 1ex plus 1pt\noindent}% \@copytoansfile} \def\@copytoansfile{\begingroup\setupc@py\@copyans} \chardef\other=12 \def\setupc@py{\def\do##1{\catcode`##1=\other}\dospecials \catcode`\|=\other \obeylines} {\obeylines \gdef\@copyans#1 {\def\@next{#1}% \ifx\@next\empty\let\@next=\endgroup % \else\immediate\write\tf@ans{\@next} \let\@next=\@copyans\fi\@next}} \def\makeanswer{\immediate\closeout\tf@ans\@input{\jobname.ans}} \makeatother %% 以上が書き出し・読み込みマクロ。以下はおまけ。 \newcounter{mon} \renewcommand{\themon}{\textbf{第\arabic{mon}問}} \def\mondai{\par \noindent\refstepcounter{mon}\hbox to 4zw{\themon\hss}} 使い方は以下の通り \mondai\label{q:foo} 次の二次方程式を解け。 $x^2 - 2x - 3 = 0$ \ans \ref{q:foo} p.\pageref{q:foo}\par $(x+1)(x-3)=0$\\ $x=-1$~, $x=3$ 使う上での注意点ですが, \ans は直後に半角空白を空け「同じ行」に答を書き始める必要があります。 以後,初めて「空行」が現れるまでを別ファイルに転送します。 したがって,答の中で改行あるいは改段落したいときは, \\ や \par を使ってください。 書き出したファイルを読み込むマクロは \makeanswer です。 なお,上の例では問題番号は \ref を使って出力していますが, 実際使うときはこれも \ans に組み込んだ方が良いと思います。
この書き込みへの返事: