当尝试在文档中使用计数器值时,\index
会发生奇怪的行为。似乎该值将在文档末尾进行评估,此时计数器已经更改。因此,计数器的所有出现都具有相同的值。
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begin{document}
\section{First Section}
\index{first \arabic{section}}
\section{Second Section}
\index{second \arabic{section}}
\section{Third Section}
\index{third \arabic{section}}
\printindex
\end{document}
得出以下索引:
但我希望:
答案1
\index
逐字逐句地读取其参数,因此宏不会被展开。因此,您将在生成的索引文件中看到索引设置时的\arabic{section}
计数器数量。section
一种方法是使用宏\Index
,在传递给逐字读取之前先读取其参数。这样宏就会被扩展。在宏前面\index
使用可以关闭不必要的扩展。\string
\documentclass{article}
\usepackage{makeidx}
\makeindex
\newcommand*{\Index}[1]{\index{#1}}
\begin{document}
\section{First Section}
\Index{first \arabic{section}}
\section{Second Section}
\Index{second \arabic{section}}
\section{Third Section}
\Index{third \arabic{section}}
\printindex
\end{document}
结果:
test.idx
:
\indexentry{first 1}{1} \indexentry{second 2}{1} \indexentry{third 3}{1}
test.ind
:
\begin{theindex} \item first 1, 1 \indexspace \item second 2, 1 \indexspace \item third 3, 1 \end{theindex}
- 指数:
答案2
的参数\index
按字面意思读出,因为通常情况下这是必需的。您不希望这样,因此最简单的方法是将其放入\index
任何命令中。\mbox
将执行:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begin{document}
\section{First Section}
\mbox{\index{first \arabic{section}}}
\section{Second Section}
\mbox{\index{second \arabic{section}}}
\section{Third Section}
\mbox{\index{third \arabic{section}}}
\printindex
\end{document}
答案3
另一种方法是使用\label
/\ref
对
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begin{document}
\section{First Section}\label{sec:one}
\index{first \ref{sec:one}}
\section{Second Section}\label{sec:two}
\index{second \ref{sec:two}}
\section{Third Section}\label{sec:three}
\index{third \ref{sec:three}}
\printindex
\end{document}