\index
を使ったときの挙動について質問させてください.以下のような例を処理したとき,
.idx ファイルに書き出される
\indexentry
の内容を見ると,tabularx 環境内の
\index
では内容のマクロが展開されてしまい,異なる索引項目となってしまいます.
マクロ
\hoge
の定義方法を \DeclareRobustCommand
に変更したところ,マクロの展開は防げましたが,余計な空白が入ってしまい,
やはり異なる索引項目となってしまいます.
テキスト処理で .idx ファイル中の余計な空白を取り除けば応急処置にはなりますが,
作業が増えてわずらわしいので,もっとうまい解決方法はないでしょうか.
\documentclass[a4paper, 10pt]{jsarticle} \usepackage{tabularx} \usepackage{makeidx} \makeindex \def\hoge#1{\sffamily #1} %\DeclareRobustCommand{\hoge}[1]{\sffamily #1} \begin{document} \index{hoge@\hoge{hoge}}% hoge \begin{tabularx}{\textwidth}{llX} \index{hoge@\hoge{hoge}}% hoge & hoge & hoge \\ \end{tabularx} \printindex \end{document}
上記により生成された .idx ファイルの内容
\indexentry{hoge@\hoge{hoge}}{1} \indexentry{hoge@\sffamily hoge}{1}
\hoge
を \DeclareRobustCommand
で定義したときの .idx ファイルの内容\indexentry{hoge@\hoge{hoge}}{1} \indexentry{hoge@\hoge {hoge}}{1}
なお,環境は Debian (lenny) で ptexlive (for TeX Live 2009) を使っています.
以上