名前: 北見 けん 日時: 2007-10-24 16:31:26 IPアドレス: 211.128.71.*
>>49917 \index の引数は通常、 \@sanitize されてから読み込まれ、そのあと idx ファイルに書き出されます。 書き出すときにコントロールワードの後に区切りの空白を付け足さないためでしょうか。 なので、\index とその引数ともどもを、\footnote の引数として先にトークン化してしまうと、 \@sanitize される場合と異なりコントロールワードが認識されて、 idx ファイルへの書き出しの時に区切りの空白が追加されてしまうのだと思います。 なかなか厄介そうですが、\footnote の引数として読み取られる前に、 \index の引数を \@sanitize してしまえばよさそうです。 \footnote を使わない場合でも、とにかくマクロの引数になるなら似たようなことが 起こるわけなので、すべての場合に適合するように \index を改造するのも大変そうです。 それで、\@sanitize した引数を保存しておいて、 \footnote の中ではそれを使うようにするというのはどうでしょうか。 \documentclass{jbook} \usepackage{makeidx} \makeindex \makeatletter \def\saveindexentry#1{% \saveindexentry<保存先マクロ><\@sanitize する保存内容> \begingroup\@sanitize\@saveindexentry#1} \def\@saveindexentry#1#2{\gdef#1{#2}\endgroup} \def\useindexentry#1{% \useindexentry<保存先マクロ> \expandafter\index\expandafter{#1}} \makeatother \saveindexentry\test{tex@\TeX} \begin{document} \index{tex@\TeX}\TeX\footnote{\useindexentry\test\TeX} \printindex \end{document}
この書き込みへの返事: