Re: aux ファイルで multiply-defined labels になる

名前: .
日時: 2005-08-16 21:36:45
IPアドレス: 210.224.215.*

>>37483 amsmath パッケージによる align などの環境は, 環境の中身を複数回処理します. そして,amsmath パッケージが内部処理で用いているフラグ \ifmeasuring@ は“測定中”のときに真になるように設定されています (その管理は amsmath パッケージ側が行っています). そこで,(ユーザ自身が独自のフラグを導入しなくても) \ifmeasuring@\else <適当な処理> \fi とでも記述すれば,<適当な処理> の部分を実際に出力されるときに限り 実行されるようにできるわけですが… 単純にこうするのは, amsmath パッケージを読みこんでいないときに不都合があります. # もっとも, # \@ifundefined{measuring@true}% # {\expandafter\let\csname ifmeasuring@\expandafter\endcsname # \csname iffalse\endcsname}\relax # あたりの記述を \AtBeginDocument で仕込めば,amsmath パッケージ # 不使用時にも対処できるでしょうけれども. >\immediateをとるということはそれよりも前にやってみたのですが、 >いざ参照してみるとラベルが全部同じ(最後のもの)になってしまい駄目でした. これが,先に申し上げた“\alph{No} の展開のタイミング”の問題になります. “\immediate なしの \write を用いつつマクロ実行時の情報を書き出す”には, 書き出すべき情報を“マクロ実行時に展開して”\write に渡せばよい, ということになります. # \protected@write が行っているのは,概ねそういうことです(cf. latex.ltx).

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)