我的文档包含一些我在命令中设置的横向表格\afterpage
。当我尝试索引这些表格中出现的内容时,有时会出现重复的索引条目标题。从查看文件来看.idx
,这显然是因为通过删除命令并引入多余的空格来重写我的命令\afterpage
的参数。这是一个最小工作示例:\index
\protect
\documentclass{article}
\usepackage{afterpage,makeidx}\makeindex
% For indexing material in tables
\newcommand{\tab}[1]{\emph{#1}}
% Stand-in example for a fragile command that needs \protection
\newcommand\fragilecmd{FragileCommand}
\begin{document}
\fragilecmd\index{FragileCommand@\protect\fragilecmd}
\fragilecmd-x\index{FragileCommand@\protect\fragilecmd!\protect\fragilecmd-x}
\afterpage{
\begin{table}
\begin{tabular}{l}
\fragilecmd \\
\fragilecmd-x \\
\end{tabular}
\index{FragileCommand@\protect\fragilecmd|tab}
\index{FragileCommand@\protect\fragilecmd!\protect\fragilecmd-x|tab}
\end{table}
}
\newpage\printindex
\end{document}
我期望最终的索引如下所示:
指数
FragileCommand,1,2
FragileCommand-x, 1,2
然而,它却看起来像这样:
指数
脆弱的命令,2
FragileCommand-x,2
FragileCommand,1
FragileCommand-x,1
.idx
以下是makeindex 生成的文件的内容:
\indexentry{FragileCommand@\protect\fragilecmd}{1}
\indexentry{FragileCommand@\protect\fragilecmd!\protect\fragilecmd-x}{1}
\indexentry{FragileCommand@\fragilecmd |tab}{2}
\indexentry{FragileCommand@\fragilecmd !\fragilecmd -x|tab}{2}
我如何才能正确地索引出现在中的此类条目\afterpage
?
答案1
\protect
在前两种情况下您不需要:\index
在顶层(不在宏的参数内)使用逐字模式在文件中写入条目.idx
。
您需要的是\string
其中的条目\afterpage
,因为\index
现在是在另一个命令的参数中。
\documentclass{article}
\usepackage{afterpage,makeidx}\makeindex
% For indexing material in tables
\newcommand{\tab}[1]{\emph{#1}}
% Stand-in example for a fragile command that needs \protection
\newcommand\fragilecmd{FragileCommand}
\begin{document}
\fragilecmd\index{FragileCommand@\fragilecmd}
\fragilecmd-x\index{FragileCommand@\fragilecmd!\fragilecmd-x}
\afterpage{%
\begin{table}
\begin{tabular}{l}
\fragilecmd \\
\fragilecmd-x \\
\end{tabular}%
\index{FragileCommand@\string\fragilecmd|tab}%
\index{FragileCommand@\string\fragilecmd!\string\fragilecmd-x|tab}%
\end{table}%
}
\newpage\printindex
\end{document}
文件中显示的内容如下.idx
:
\indexentry{FragileCommand@\fragilecmd}{1}
\indexentry{FragileCommand@\fragilecmd!\fragilecmd-x}{1}
\indexentry{FragileCommand@\fragilecmd|tab}{2}
\indexentry{FragileCommand@\fragilecmd!\fragilecmd-x|tab}{2}
因此指数将符合预期