Re: 試験問題用の解答欄

名前: .
日時: 2008-01-25 20:38:06
IPアドレス: 59.134.169.*

>>50705 少し補足をします. まず,次の例の 2 個の表を比較するとわかるように, \relax のようなものがあるだけでも「最後の行は空ではない」とみなされます. そのため,表の中で何らかの処理を行う場合には,余計なものを残さないように 細心の注意が必要となります(実際,表の「中」では処理ができずに,\noalign を 用いるハメになることもあります). # ifthen パッケージ自体がまずいというつもりはありませんが, # なるべくシンプルなものを用いるほうが管理しやすいときもあるのは事実です. \documentclass{article} \begin{document} \begin{center} \begin{tabular}{|c|c|} \hline A & B \\ \hline \end{tabular} \bigskip \begin{tabular}{|c|c|} \hline A & B \\ \hline \relax \end{tabular} \end{center} \end{document} 次に,表の個々のセル(配列要素)の中のローカルな代入はそのセルの中でしか 有効になりません.そのため,「&」や「\\」をまたぐ形で条件処理を 行おうとするとしばしば失敗します. 実際,ループの制御変数への代入結果が「&」などをまたぐと失われることが あります(もっとも,\setcounter,\stepcounter などによる「\LaTeX のカウンタ」 への代入はグローバルな代入なので,\LaTeX のカウンタだけを扱う場合には うまくいくこともあります). ここでは,例えば, \begin{tabular}{|c|p{20zw}|} \hline 1 & \\ \hline 2 & \\ \hline ... \end{tabular} のような表を自動的に作成する際に,表の中身を「1 行ずつ」あるいは 「個々のセルを 1 個ずつ」順に作成しようとするのではなく, 表の中身を一気に作成するのが無難です. 実際,50705 で挙げたサンプルでは,表の中身「1 & \\ \hline ...」の 部分全体をあらかじめ \@ran@body というマクロとして作成して,それを tabular 環境の中で用いています. # 「1 & \\ \hline」という行を書いてから次の行「2 & \\ \hline」を書いて…… # とやるのでは *なく*,表の中身全体を一気に書き込んだわけです.

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)