\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) を使っています.
以上