名前: 北見 けん 日時: 2006-06-23 15:26:12 IPアドレス: 211.128.71.*
>>43548 <識別番号>が未定義のときに \hoge<識別番号> が \hoge になってしまって、 意図しないところで \hoge が呼び出されてしまうのが原因でしたね。 そこで、もともとの \hoge との関係を絶つべく、 \hoge<識別番号> の代わりに \unique-string@hoge<識別番号> を用いるという回避策を採ったというわけですね。 ## この回避策でもよいですが、<識別番号>が未定義の場合の処理を見直すのが ## 本来的だろうと思います。 ## \ref@csname の定義を変更して、ラベルが未定義のときには“@undefined”のような ## 文字列に展開されるようにした上で、\unique-string@hoge@undefined を ## 警告やエラーを出すようなマクロとして定義しておくようなこともできます。 さて次の問題 > LaTeX Warning: Reference `hoge1' on page 1 undefined on input line 52. については、aux ファイルを確認してどんなラベルが定義されているか調べてみます。 すると、「\newlabel{hoge:hoge1}{{1}{1}}」という行があるのが分かります。 つまり、“hoge1”として参照したいのに実際のラベルは“hoge:hoge1”となっているのです。 ソースを見ると、\label の引数と \ref(あるいは \ref@csname)の引数とがうまくあっていませんよね。 ## ここを直すと次の問題は、 ## 「保存してあるはずの hoge 環境の中身が、\hogeuse でうまく取り出せない」 ## ということになろうかと思います。 ## これは、保存しているつもりでもうまく保存できていないからです。 ## グループの中でローカルに保存してもだめなのと、 ## \def\aaa{\contents} のようにしてもその時点での \contents の中身を \aaa に ## 与えたことにはならないのが問題点です。
この書き込みへの返事: