名前: . 日時: 2008-10-20 11:32:13 IPアドレス: 59.134.169.*
>>52167 >\begin{testone}[] > & & {\sqrt{n^2 + 1}} - n \cr > & = & \sqrt{n^2 + 1} + n >\end{testone} の場合,\testone の第 2 オプション引数の読み取り時に \@let@token が & のコピーになってしまいます. その状態のままで \sqrt に伴って現れる \@ifnextchar の展開結果に \@let@token(= &)が現れると,\halign の各配列項目の範囲が誤認されるようです. %%% もっとも,「なぜ testone 環境内の 1 行目のように {,} で囲むと %%% エラーが生じないか」という点についてはもう少し調べないと判然としませんが. %%% 「\halign の中の & はグルーピングを考慮する」ということに基づいて %%% 理解できなくもないようです. ここでは,array 環境などと同様にオプション引数の後に何らかの必須の引数を 導入するか,amsmath パッケージが用いているような「空白文字をスキップせずに 次の文字を調べるマクロ」を用いるとよいのではないでしょうか. %%% なお,array 環境や tabular 環境でこの種の問題が生じないのは, %%% \begin{array}[c]{lcr} や \begin{array}{lcr} のように必ず必須の引数があり, %%% オプション引数の有無によらず \@let@token が & のような「危険な」ものに %%% なった状態で \halign を処理することにはならないことによるものと思われます.
この書き込みへの返事: