How can I have two or more distinct indexes?

I often want to have more than one index in a longer LaTeX document. For instance, I might want a general concept index, an index of named persons, and an index of symbolism. How can I have two or more distinct indexes in LaTeX?

Solutions Collecting From Web of "How can I have two or more distinct indexes?"

The multind package provides simple and straightforward multiple indexing.

You tag each \makeindex, \index and \printindex command with a file name, and indexing commands are written to (or read from) the name with the appropriate (.idx or .ind) extension appended. To create a “general” and an “authors” index, one might write:

\usepackage{multind}
\makeindex{general}
\makeindex{authors}
...
\index{authors}{Another Idiot}
...
\index{general}{FAQs}
...
\printindex{general}{General index}
\printindex{authors}{Author index}

To complete the job, run LaTeX on your file enough times that labels, etc., are stable, and then execute the commands

makeindex general
makeindex authors

See also this FAQ: Multiple indexes

Update

multind is a package for LaTeX 2.09

Consider the following alternatives:

  • index
  • splitindex
  • imakeidx
  • the memoir class has its own multiple-index functionality

One problem with multind is that the index heading(s) will not be formatted corresponding to your other chapter (or section) headings but simply with \Large\bf.

If you want multiple indexes that respect the general formatting of your document class (and also work with other than the standard classes), use the splitidx package.

There is also imakeidx designed to provide multiple indexes (has been mentioned in a comment already, but the usage isn’t shown)

Just say \makeindex[name=symbolicname,title={Foo}] to provide a special index (choose symbolicname appropiately) and \index[symbolicname]{foo} to make an index entry to this special index.

The special index is printed with \printindex[symbolicname].

Using \makeindex, \index and \printindex without optional argument will give the usual index as with makeidx.

The advantage of imakeidx is the automatic call of makeindex or texindy (if \write18 is enabled).

\documentclass{article}

\usepackage{imakeidx}

\usepackage{blindtext}

\makeindex[name=person,title={Index of persons}]

\makeindex

\begin{document}

Einstein\index[person]{Einstein}
\blindtext

Heisenberg\index[person]{Heisenberg} % Person index

\blindtext[4]

\index{foo}
\index{bar}
\blindtext

\printindex[person] % Person index
\printindex % usual index

\end{document}

enter image description here

The index package lets you define additional indexes in addition to the “default” one. (You don’t have to use the default one if you don’t want to.) This package makes a few other improvements, including making the \index command more robust and providing the \index* variant to both typeset its argument and add it to the index.

When you use this package, the \index and \printindex commands take an optional argument which is an internal name for the index. To define a new index, use the \newindex command in the preamble:

\usepackage{index}
\newindex{person}{pdx}{pnd}{Index of named persons}
\newindex{symbol}{sdx}{snd}{Index of symbolism}

\begin{document}
Hello, \index*[person]{vanden}.

\printindex[person]
\printindex[symbol]
\end{document}

The first argument to \newindex is the index’s internal name which you then pass to \index and \printindex. The last argument is the title that appears before the index. The second and third argument are the extensions used for the temporary files for the index. For the example above, you’d run makeindex as

makeindex -t mydoc.plg -o mydoc.pnd mydoc.pdx
makeindex -t mydoc.slg -o mydoc.snd mydoc.sdx