TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
up vote 21 down vote accepted

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

share|improve this answer

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.

share|improve this answer
8  
I wouldn't forget imakeidx; perhaps because I'm one of the authors. :) – egreg Sep 16 '11 at 19:11
3  
I have a book with 23 indexes (say again?!) and splitidx handles them perfectly. I also recommend the use of idxlayout, in case you stumble upon LaTeX bug 3126 (it happened to me when using splitidx in a book layout, because \twocolumn was interfering with \topskip). :-) – Paulo Cereda Sep 16 '11 at 19:18

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
share|improve this answer

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

share|improve this answer
    
i'd like to put in a plug for imakeidx because it's compatible with the ams document classes, whereas the other packages that support multiple indexes aren't. it also makes excellent use of the "latex way" of using optional arguments to specify the particular index -- if it's the main index, no option needed, and it names the one index file in the same way as makeidx, so completely substitutable there. this should be the first choice when starting a new project. – barbara beeton Feb 11 at 20:29
    
@barbarabeeton: Do you refer to a new amsmath release (there are plans to do so, I think?) – Christian Hupfer Feb 11 at 20:55
    
there are ongoing discussions about amsmath, but nothing that i can quote. sorry. (as soon as something is definitive, it will be announced.) – barbara beeton Feb 11 at 21:03
    
@barbarabeeton: You't can't quote because it is top-secret or just because the direction is not clear? ;-) – Christian Hupfer Feb 11 at 21:05
1  
the direction depends on decisions that haven't been made yet. – barbara beeton Feb 11 at 21:09

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.