LaTeX/Indexing

Especially useful in printed books, an index is an alphabetical list of words and expressions with the pages of the book upon which they are to be found. LaTeX supports the creation of indices with its package , and its support program codice_1, called on some systems codice_2.
Using makeidx.
To enable the indexing feature of LaTeX, the package must be loaded in the preamble with:
and the special indexing commands must be enabled by putting the
command into the input file preamble. This should be done within the preamble, since it tells LaTeX to create the files needed for indexing. To tell LaTeX what to index, use
where "key" is the index entry and does not appear in the final layout. You enter the index commands at the points in the text that you want to be referenced in the index, likely near the reason for the "key". For example, the text
can be re-written as
to create an entry called 'Fourier Series' with a reference to the target page. Multiple uses of "\index" with the same "key" on different pages will add those target pages to the same index entry.
To show the index within the document, merely use the command
It is common to place it at the end of the document. The default index format is two columns.
The package that comes with LaTeX prints out all index entries in the right margin of the text. This is quite useful for proofreading a document and verifying the index.
Compiling indices.
When the input file is processed with LaTeX, each command writes an appropriate index entry, together with the current page number, to a special file. The file has the same name as the LaTeX input file, but a different extension (codice_3). This codice_3 file can then be processed with the codice_1 program. Type in the command line:
 makeindex "filename"
Note that "filename" is without extension: the program will look for "filename.idx" and use that. You can optionally pass "filename.idx" directly to the program as an argument. The codice_1 program generates a sorted index with the same base file name, but this time with the extension codice_7. If now the LaTeX input file is processed again, this sorted index gets included into the document at the point where LaTeX finds .
The index created by latex with the default options may not look as nice or as suitable as you would like it. To improve the looks of the index codice_1 comes with a set of style files, usually located somewhere in the tex directory structure, usually below the codice_1 subdirectory. To tell makeindex to use a specific style file, run it with the command line option:
 makeindex -s [style file] "filename"
If you use a GUI for compiling latex and index files, you may have to set this in the options. Here are some configuration tips for typical tools:
MakeIndex settings in WinEdt.
Say you want to add an index style file named codice_10
Sophisticated indexing.
Below are examples of entries:
Subentries.
If some entry has subsections, these can be marked off with codice_13. For example,
would create an index entry with 'cp850' categorized under 'input' (which itself is categorized into 'encodings'). These are called subsubentries and subentries in makeidx terminology.
Controlling sorting.
In order to determine how an index key is sorted, place a value to sort by before the key with the codice_14 as a separator. This is useful if there is any formatting or math mode, so one example may be
so that the entry in the index will show as 'formula_1' but be sorted as 'F'.
To combine with the above feature for subentries, you should style the appropriate component(s):
Changing page number style.
To change the formatting of a page number, append a codice_15 and the name of some command which does the formatting. This command should only accept one argument.
For example, if on page 3 of a book you introduce bulldogs and include the command
and on page 10 of the same book you wish to show the main section on bulldogs with a bold page number, use
This will appear in the index as
bulldog, 3, 10
If you use codice_16 in place of codice_1, the classified entries will be sorted too, such that all the bolded entries will be placed before all others by default.
Multiple pages.
To perform multi-page indexing, add a codice_18 and codice_19 to the end of the command, as in
The entry in the index for the subentry 'History' will be the range of pages between the two commands.
Using special characters.
In order to place values with codice_13, codice_14, or codice_15, which are otherwise escape characters, in the index, one must quote these characters in the command by putting a double quotation mark (codice_23) in front of them, and one can only place a codice_23 in the index by quoting it (i.e., a key for " would be ).
This rule does not hold for \", so to put the letter ä in the index, one may still use .
Abbreviation list.
You can make a list of abbreviations with the package .
You may also be interested in using the package described in the Glossary chapter. Another option is the package .
To enable the Nomenclature feature of LaTeX, the package must be loaded in the preamble with:
Issue the command for each symbol you want to have included in the nomenclature list. The best place for this command is immediately after you introduce the symbol for the ﬁrst time. Put at the place you want to have your nomenclature list. 
Run LaTeX 2 times then
 makeindex "filename.nlo" -s nomencl.ist -o "filename.nls"
followed by running LaTeX once again.
To add the abbreviation list to the table of content, option can be used when declare the package, i.e. instead of using the code in Adding Index to Table Of Contents section.
The title of the list can be changed using the following command:
Multiple indices.
If you need multiple indices there are various options available.
imakeidx.
The package is part of TeX Live and MiKTeX.
This is an extension to which allows for the creation of other indices besides or instead of the default one. It has many options and commands to manipulate the output generated.
Indices are defined with multiple calls to the command, each of which can have their own options. An entry for a specific index is given by adding the name of the index as an optional parameter to the command.
Entries for either index should be typed as shown above. This example will produce two indices. The default index will be given the title "Concept index", and typeset in the default two columns. The prologue text will be printed only in the 'persons' index, which will have the title “Index of names”, and be typeset in three columns.
Other options for each index allow you to determine if and how the index title appears in the Table of Contents, what style file to use, to set the page headers, and more.
There will be no need to call the codice_1 program explicitly from the command line. Similar to ToC generation, the indices will be generated by simply running LaTeX. There are options available to use the codice_26 program instead of codice_1.
Note that can process any TeX source file which was written for codice_28 directly. If you have an existing source and want to split up the existing index or add extra indices, simply change to in the command, and the output will be the same. You can then add commands and options to make multiple indices.
multind.
Also available is .
This package provides the same commands as , but now you also have to pass a name as the first argument to every command.
Adding index to table of contents.
By default, Index won't show in Table Of Contents, so you have to add it manually.
To add index as a chapter, use these commands:
If you use the book class, you may want to start it on an odd page by using .
International indices.
If you want to sort entries that have international characters (such as ő, ą, ó, ç, etc.) you may find that the sorting "is not quite right". In most cases the characters are treated as special characters and end up in the same group as @, ¶ or µ. In most languages that use Latin alphabet it's not correct.
Generating the index.
Unfortunately, the current version of codice_26 and are incompatible. When you use or modifiers, codice_16 will print the error message:codice_31 and won't add those pages to the index. A work-around for this bug is described on the .
To generate an international index file you have to use codice_16 instead of codice_1.
xindy is a much more extensible and robust indexing system than the codice_1 system.
For example, one does not need to write:
to get the Lin entry after LAN and before LZA, instead, it's enough to write
But what is much more important, it can properly sort index files in many languages, not only English. 
Unfortunately, generating indices ready to use by LaTeX using codice_26 is a bit more complicated than with codice_1.
First, we need to know in what encoding the .tex project file is saved. In most cases it will be UTF-8 or ISO-8859-1, though if you live, for example in Poland it may be ISO-8859-2 or CP-1250. Check the parameter to the codice_37 package.
Second, we need to know which language is prominently used in our document. xindy can natively sort indices in Albanian, Belarusian, Bulgarian, Croatian, Czech, Danish, Dutch, English, Esperanto, Estonian, Finnish, French, Georgian, German, Greek, Gypsy, Hausa, Hebrew, Hungarian, Icelandic, Italian, Klingon, Kurdish, Latin, Latvian, Lithuanian, Macedonian, Mongolian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian Slovak, Slovenian, Sorbian, Spanish, Swedish, Turkish, Ukrainian and Vietnamese,
I don't know if other languages have similar problems, but with Polish, if your codice_38 is saved using UTF-8, the codice_7 produced by texindy will be encoded in ISO-8859-2 if you use only codice_40.
While it's not a problem for entries containing polish letters, as LaTeX internally encodes all letters to plain ASCII, it is for accented letters at beginning of words, they create new index entry groups, if you have, for example an "średnia" entry, you'll get a "Ś" encoded in ISO-8859-2 codice_7 file.
LaTeX doesn't like if part of the file is in UTF-8 and part is in ISO-8859-2.
The obvious solution (adding codice_42) doesn't work, codice_16 stops with
 ERROR: Could not find file "tex/inputenc/utf8.xdy"
error.
To fix this, you have to load the definition style for the headings using codice_44:
 -M lang/polish/utf8
In the end we have to run such command:
 texindy -L polish -M lang/polish/utf8 "filename.idx"
An additional way to fix this problem is use "iconv" to create utf8.xdy from latin2.xdy 
 codice_45
in directory 
 codice_46
xindy in kile.
To use codice_16 instead of codice_1 in kile, you have to either redefine the MakeIndex tool in Settings → Configure Kile... → Tools → Build, or define new tool and redefine other tools to use it (for example by adding it to QuickBuild).
The codice_26 definition should look similar to this:
 General:
 Command: texindy
 Options: -L polish -M lang/polish/utf8 -I latex '%S.idx'
 Advanced:
 Type: Run Outside of Kile
 Class: Compile
 Source extension: idx
 Target extension: ind
 Target file: &lt;empty&gt;
 Relative dir: &lt;empty&gt;
 State: Editor
 Menu:
 Add tool to Build menu: Compile
 Icon: the one you like