# Using counters within \index{…} with {index} package NOT {makeidx} package

Using counters within \index{...} gives solutions to the problem of using counters within the \index command when using \usepackage{makeidx}, as in

    \index{index entry \arabic{counter}}


In this case, \arabic{counter} is written verbatim

    "index entry \arabic{counter}"


to the .idx file rather than being first expanded to something like

    "index entry 1".


Solutions given include defining a new macro \Index or use an \mbox{}. These solutions work great when using the makeidx package.

However, neither solution works when using the index package rather than the makeidx package. Here is a simple example that was adapted from the above link:

\documentclass{article}
%\usepackage{makeidx}% using this, "\arabic{section}" expands to 1, 2, 3,...
\usepackage{index}% using this, "\arabic{section}" does not expand
\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}}
\section{Fourth Section} \mbox{\index{fourth \arabic{section}}}
\section{Fifth  Section} \mbox{\index{fifth  \arabic{section}}}
\section{Sixth  Section} \mbox{\index{sixth  \arabic{section}}}
\printindex
\end{document}


When using \usepackage{makeidx}, the .idx file contains what one might want (expanded counter values):

    \indexentry{first 1}{1}
\indexentry{second 2}{1}
\indexentry{third 3}{1}
\indexentry{fourth 4}{1}
\indexentry{fifth 5}{1}
\indexentry{sixth 6}{1}


However, when using \usepackage{index}, the .idx file contains what one may not want (verbatim strings/unexpanded counter values):

    \indexentry {first \arabic {section}}{1}
\indexentry {second \arabic {section}}{1}
\indexentry {third \arabic {section}}{1}
\indexentry {fourth \arabic {section}}{1}
\indexentry {fifth \arabic {section}}{1}
\indexentry {sixth \arabic {section}}{1}


I want to use the index package for multi-index support. Does anyone have a solution that can be used with the index package?

Dan

• Welcome to TeX.SX! – Bobyandbob Nov 21 '17 at 4:21
• Use the imakeidx package in order to get multiple indices together with expansion – user31729 Nov 21 '17 at 6:51
• Thank you @Bobyandbob for the welcome message and to @Christian for the package recommendation. Thank you so much. The imakeidx package works great. I tested it both with the above code and with a "real" project. I did have some issues with it involving apparently failing to successfully automatically call makeindex.exe and crashing when \index{...} included \ifthenelse. But these are separate issues and if they are significant enough, I will post them separately. Actually, I'm not too crazy about automatically calling an external .exe anyways, but would rather call it from a makefile. – Daniel J. Greenhoe Nov 22 '17 at 3:59
• @DanielJ.Greenhoe: You can notify only one of the commenters ;-) And actually makeindex is run automatically by imakeidx, provided shell-escape is enabled – user31729 Nov 22 '17 at 4:50
• It's not clear why using an index for producing the table of contents. – egreg Feb 3 '18 at 22:45

The (very old) package index overrules the additions in latex.ltx about \protected@write to the index file, so \arabic{section} in an index entry is not expanded first and written then to the .idx.

The very sophisticated package imakeidx supersedes index and allows for multiple indexes, if shell-escape (\write18) is enabled, makeindex or texindy is run automatically.

\documentclass{article}

\usepackage{imakeidx}
\makeindex

\begin{document}
\section{First  Section} \index{first \textbf{Hello} \arabic{section}}
\section{Second Section} \index{second \arabic{section}}
\section{Third  Section} \index{third  \arabic{section}}
\section{Fourth Section} \index{fourth \arabic{section}}
\section{Fifth  Section} \index{fifth  \arabic{section}}
\section{Sixth  Section} \index{sixth  \arabic{section}}
\printindex
\end{document}