名前: 北見 けん 日時: 2001-11-22 09:40:31 IPアドレス: 202.25.71.*
>>3929へのレスです。 ## ちなみに>>3930kz さんのは、エラーではありません。 ありゃ、またやってしまいました。 ## 実は他のところで今回と同じ話題を扱ったことがあります。 この原因は、LaTeX の内部マクロである \@elt を勝手に使った後に、 きちっと元に戻しておかなかったことにあります。 が、 \@elt はリストを作るときに汎用的に使うマクロなので、 使う人が自己責任で使って欲しいものです。 例えば、\@tempdima なんかを使うときは、 その時点で \@tempdima がどうなっているかわからないので、 自分で値を設定してから使いますよね。そして、 他の人もそうしているだろうから、使い終わった後にいちいち元に戻しません。 ## いや、ホントは元に戻すのが一番良いのですが・・・ さて、話を元に戻しますが、 出力ルーチンで使われる \@makecol の定義の中に、 「\xdef\@freelist{\@freelist\@midlist}」という行があります。 LaTeX でもそうですし、pLaTeX でもそうです。 \@freelist はリストマクロで、中身は 「\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D」といった感じです。 つまり上の行では、\@freelist に新しい要素をくわえて再構成しているのです。 ここで、LaTeX の作成者は、\@elt が展開されないと暗黙裡に 仮定しているというわけです。 要するに、ホントは私が \@elt を使った後に、「\let\@elt\relax」なんてやって 元に戻しておかないのが悪かったのですが、 LaTeX の作成者のほうで、 「\xdef\@freelist{\@freelist\@midlist}」の代わりに 「{\let\@let\relax\xdef\@freelist{\@freelist\@midlist}}」 としておけば安全だったんじゃないの? という責任転嫁の戯言でした。 3922でせっかく本田さんも「ローカルに」って云ってくださっていたのに、 無にしてしまいました。すみませんm(..)m
この書き込みへの返事: