名前: misc 日時: 2004-04-13 11:45:57 IPアドレス: 210.230.18.*
>>28067 >数値の区切りとして空白トークンは吸収されます。 そうですね. 数値 0 をわざわざ \z@ と書くことがある,というのはそのように 空白が不用意に失われることを回避する目的もあります. 一方,ボックス・レジスタについても,値のスコープは考慮されているようです. 確かに, \setbox0\hbox{A} {[\box0]} [\box0] という記述を行うと,2 度目の \box0 では何も出力されないので グループの中の \box0 によって \box0 の値が空になる影響が“グローバル”で あるかのように見えます. しかし,下記の例を考えてみると, (2) の行では \box0 は何も出力しない一方で (3) の行では \box0 の際に(外側の)グループの外部で代入された \hbox{A} が用いられます. \setbox0\hbox{A} {\setbox0\hbox{B} {[\box0]}%%% (1) [\box0]%%% (2) } [\box0]%%% (3) 結局,(2) の行では \box0 の値が空になっている,ということの理由は, ・(2) の行において有効である代入 \setbox0\hbox{B} によって 代入された値が (1) の行ですでに用いられた,ということ ・\box(あるいは \unhbox/\unvbox)によって値を用いるのは 1 回限り, ということ の 2 点になるのでしょう. # まあ,グルーピングが気になるほど“長期間”記憶しなければならない # 中身をもつボックスに対しては,それを保持するための専用の # ボックス・レジスタを割り当ててそれにグローバルに代入するのが # 一般的でしょうから,上記のようなことはあまり問題にならないと思います…
この書き込みへの返事: