MakeIndex - ein Indexprozessor fuer LaTeX

MakeIndex ist ein allgemein anwendbarer Indexprozessor. Als Eingabe dienen ihm eine oder mehrere ungeordnete Indexdateien, wie sie gewöhnlich von einem Formatierer erzeugt werden. Er sortiert die enthaltenen Indexeinträge und generiert die aktuelle Indexdatei. MakeIndex ist an kein spezielles Format seiner Eingabedateien gebunden. Als Voreinstellung wird das .idx-File-Format, welches LaTeX erzeugt, angenommen. Das Format der Eingabedatei kann in einem Style-File neu definiert, d.h. an die Erfordernisse anderer Formatierer angepaßt werden. Das Style-File legt gleichzeitig das Aussehen der zu generierenden Index-Datei fest. Innerhalb eines Indexeintrages wird eine Definition von Untereinträgen bis zu drei Stufen unterstützt.

Einleitung und Literatur

MakeIndex ist ein allgemein anwendbarer Indexprozessor. Als Eingabe dienen ihm eine oder mehrere ungeordnete Indexdateien, wie sie gewöhnlich von einem Formatierer erzeugt werden. Er sortiert die enthaltenen Indexeinträge und generiert die aktuelle Indexdatei. MakeIndex ist an kein spezielles Format seiner Eingabedateien gebunden. Als Voreinstellung wird das .idx-File-Format, welches LaTeX erzeugt, angenommen. Das Format der Eingabedatei kann in einem Style-File neu definiert, d.h. an die Erfordernisse anderer Formatierer angepaßt werden. Das Style-File legt gleichzeitig das Aussehen der zu generierenden Index-Datei fest. Innerhalb eines Indexeintrages wird eine Definition von Untereinträgen bis zu drei Stufen unterstützt.

Als weiterführende Literatur wird empfohlen:

[1] H. Kopka LaTeX-Erweiterungsmöglichkeiten Addison-Wesley Deutschland, 1991 (2. Auflage), ISBN 3-89319-356-1
[2] L. Lamport MakeIndex - An Index Processor for LaTeX bei den meisten Systemen als LaTeX-Datei mkind.tex oder makeindex.tex verfügbar

Erzeugung eines Indexregisters

Allgemeine Vorgehensweise

In den folgenden Ausführungen und Beispielen werden Dateinamen verwendet, wie sie den unter DOS und UNIX üblichen Konventionen entsprechen (d.h. Dateiname und Extension sind jeweils durch einen Punkt voneinander getrennt).

Angenommen, ein Benutzer hat ein LaTeX-Dokument myfile.tex erstellt, für das er automatisch ein Indexregister generieren möchte. Um dies zu realisieren, ist wie folgt vorzugehen:

  • Zuerst muß der Benutzer aus seinem Text die Begriffe selektieren, die er in sein Indexregister aufnehmen möchte. Diese Begriffe werden dort, wo sie im LaTeX-Text auftreten, durch ein \index-Kommando markiert. Die Möglichkeiten und damit verbundenen Wirkungen dieses Befehls sind genauer erklärt in den Abschnitten Definition von Indexeinträgen im LaTeX-Dokument und Erzeugung spezieller Formen von Indexeinträgen. Außerdem sind die folgenden Änderungen in myfile.tex zu tätigen:
  • Im Kommando \documentstyle wird die Dokument-Style-Option makeidx ergänzt.
  • In den Vorspann des Dokuments (d.h. zwischen die Kommandos \documentstyle und \begin{document}) wird das Kommando \makeindex eingetragen.
  • An der Stelle des Dokuments, an der das Indexregister erscheinen soll (gewöhnlich am Ende, d.h. vor \end{document}) muß das Kommando \printindex geschrieben werden.
  • Anschließend läßt er sein Dokument von LaTeX bearbeiten. Dabei wird eine ungeordnete Index-Datei angelegt, die die Extension .idx bekommt. In diese Datei wird jedesmal, wenn LaTeX im Text einen \index-Befehl findet, ein Kommando
  • \indexentry{ stichwort }{ seitennummer }

    eingetragen. Es enthält das vom Benutzer festgelegte Stichwort und die Nummer der Seite, auf der der \index-Befehl definiert war.

  • Die .idx-Datei wird als "ungeordnete Indexdatei" bezeichnet und ist als Eingabe für MakeIndex bestimmt. Der Stichwortprozessor kann jetzt aufgerufen werden. Er sortiert die Indexeinträge und faßt diejenigen zu gleichen Begriffen zusammen. Als Ergebnis entsteht eine "geordnete Indexdatei" mit der Extension .ind. Sie enthält die LaTeX-Befehle
  • \item{...}, \subitem{...} und \subsubitem{...}, die als Argumente die in myfile.tex markierten Begriffe in geordneter Reihenfolge enthalten.
  • \indexspace, die vertikale Leerräume zwischen Einträgen mit verschiedenem Anfangsbuchstaben bewirken.
  • Nun muß myfile.tex nochmals mit LaTeX bearbeitet werden. Dabei wird das fertige Indexregister erzeugt und an der Stelle in das Dokument eingefügt, wo LaTeX den Befehl \printindex findet.

Ordnungskriterien

Es gibt zwei Möglichkeiten, die Indexeinträge zu sortieren:

  • eine lexikographische Sortierung, wie sie für englische Texte verwendet wird (Voreinstellung). Die Sortierung erfolgt in der Reihenfolge:
  • Sonderzeichen
  • Zahlen (numerisch aufsteigend geordnet)
  • Buchstaben (in alphabetischer Reihenfolge, Großbuchstaben rangieren vor Kleinbuchstaben)
  • eine lexikographische Sortierung, wie sie die DIN-Norm 5007 für deutsche Texte vorschreibt (bei Angabe der Option -g, siehe Abschnitt Aufrufoptionen):
  • Sonderzeichen
  • Buchstaben (in alphabetischer Reihenfolge, Kleinbuchstaben rangieren vor Großbuchstaben). Die durch die Befehle "a, "o, "u und "s repräsentierten deutschen Sonderzeichen werden bei der Sortierung wie ä, ö, ü und ß behandelt.
  • Zahlen (numerisch aufsteigend geordnet)

Die Indexeinträge können außerdem wortweise (Voreinstellung) und buchstabenweise sortiert werden. Während bei der wortweisen Sortierung die Blanks innerhalb von Begriffen logisch vor allen anderen Buchstaben stehen, werden sie bei der buchstabenweisen Sortierung ignoriert.

Definition von Indexeinträgen im LaTeX-Dokument

Jedes \index-Kommando im Dokument veranlaßt LaTeX zu einem Indexeintrag in die ungeordnete Indexdatei. Diese Einträge enthalten folgende Informationen:

  • das Stichwort, das im Indexregister erscheinen soll
  • evtl. Untereinträge bis zu drei Stufen, die einzelnen Stichwörter sind durch das Zeichen ! getrennt
  • die Nummer der Seite, auf der das entsprechende \index-Kommando spezifiziert wurde

Einfache Einträge ins Indexregister werden durch

 Seite vi:  \index{Maus|(}                     Maus, vi-x, 22
 Seite  x:  \index{Maus|)}         -->
 Seite 22:  \index{Maus}

erreicht. Die runden Klammern dienen bei Festlegung einer Reihe von aufeinanderfolgenden Seiten (hier vi-x ) dazu, die jeweils erste (durch |( ) bzw. letzte Seite (durch |) ) zu definieren.

Eine hierarchische Gliederung von Indexeinträgen kann wie folgt realisiert werden:

 Seite  4:  \index{Tier!Maus|see{Ratte}}       Tier
 Seite  8:  \index{Tier!Maus!Beine}              Maus, siehe Ratte
 Seite 10:  \index{Tier!Maus!Schwanz}    -->       Beine, 8
 Seite 25:  \index{Tier!Ratte}                     Schwanz, 10
 Seite 29:  \index{Tier!Pferd}                   Pferd, 29
                                                 Ratte, 25

Durch das Kommando \index{...|see{...}} wird ein Querverweis erzeugt. Zu beachten ist, daß MakeIndex aus dem Textstück |see{...} den englischen Text see generiert. Für deutschsprachige Texte, in denen gewöhnlich das Wort siehe erscheint (wie im obigen Beispiel), ist dafür der Befehl

    \renewcommand{\seeterm}{siehe}

nötig. Diese Umschaltung wird in german.sty realisiert. Da dem see-Eintrag keine Seitennummer zugeordnet wird, ist es gleichgültig, an welcher Stelle im Dokument (nach \begin{document} er erscheint.

Für das zuletzt aufgeführte Beispiel würde eine .idx-Datei mit folgenden Einträgen erzeugt:

  \indexentry{Tier!Maus|see{Ratte}}{4}
  \indexentry{Tier!Maus!Beine}{8}
  \indexentry{Tier!Maus!Schwanz}{10}
  \indexentry{Tier!Ratte}{25}
  \indexentry{Tier!Pferd}{29}

MakeIndex sortiert die ungeordneten Indexeinträge und verpackt sie (bei Verwendung der Voreinstellungen) in LaTeX-Kommandos. Diese werden in der geordneten Indexdatei gespeichert, die für unser Beispiel folgende Zeilen enthielte:

  \item Tier
    \subitem Maus, \see{Ratte}
      \subsubitem Beine, 8
      \subsubitem Schwanz, 10
    \subitem Pferd, 29
    \subitem Ratte, 25

Erzeugung spezieller Formen von Indexeinträgen

Maskierung von Zeichen

Die Spezialsymbole ! @ | werden von MakeIndex als Sonderzeichen interpretiert (siehe Abschnitt Die MakeIndex-Styledatei). Sollen sie als normaler Text im Indexregister erscheinen, müssen sie durch den "quote"-Operator " maskiert werden, d.h. sie sind in einem \index-Befehl als "! "@ "| zu schreiben. So kann aus

        Seite  1:  \index{alpha"@beta}

nach Bearbeitung durch MakeIndex der Eintrag

        \item alpha@beta, 1

entstehen. Das Maskierungszeichen hebt somit die Sonderrolle auf, die die Spezialsymbole für MakeIndex haben.

Definition von Sortier-Schlüsseln

Will man innerhalb von Indexeinträgen LaTeX-Kommandos verwenden oder auf die Positionierung eines Indexeintrages direkt Einfluß nehmen, muß man für das entsprechende Stichwort einen Sortierschlüssel festlegen:

        Seite  1:  \index{alpha@{\it alpha\/}
        Seite  4:  \index{Metall!Eisen@Fe}

Die Grundidee hierbei ist, daß die Zeichenkette vor dem @ die Position des Indexeintrages innerhalb des Indexregisters bestimmt, während die Zeichenkette nach dem @ ("actual"-Operator) als aktueller Indexeintrag behandelt wird. Es ist zu beachten, daß bei Definition von \index-Kommandos mit demselben Schlüssel, jedoch einmal unter Benutzung des "actual"-Operators und einmal ohne diesen, zwei unterschiedliche Einträge im Indexregister entstehen. Für das obige Beispiel würden in der .ind-Datei folgende Indexeinträge erscheinen:

        \item {\it alpha\/}, 1
        \item Metall
          \subitem Fe, 4

Seitennummern in verschiedenen Schriftarten

Es besteht die Möglichkeit, eine Seitennummer mit einem besonderen Kommando zu umschließen. Dies realisiert der "encap"-Operator| .

Beispielsweise entsteht bei Benutzung der MakeIndex-Voreinstellung aus der auf Seite 14 befindlichen Zeile

        \index{alpha|bold}

der Eintrag

        \item alpha \bold{14}

Fügt der Benutzer in den Vorspann seines Dokuments ein Kommando

        \newcommand{\bold}[1]{{\bf #1}}

ein, welches festlegt, daß \bold{n} zu {\bf n} expandiert, erscheint die Seitennummer in Fettdruck. Seitennummern in verschiedenen Fonts können nützlich sein, um zusätzliche Informationen darüber zu vermitteln, worauf sich ein Index bezieht. Möglicherweise könnte man bei ein und demselben Schlüssel die Seite, auf der seine Definition erscheint, in einer anderen Schriftart setzen als die Seite, auf der ein Beispiel angegeben ist, usw.

Auch bei expliziter Definition einer Folge von Seiten ist es erlaubt, verschiedene Schrifttypen für die Seitennumerierung festzulegen. So wird aus

        Seite  1:  \index{alpha|(bold}
        Seite  5:  \index{alpha|)}

der Eintrag

        \item alpha, \bold{1--5}

generiert. Eine weitere, mitunter sinnvolle Anwendung könnte folgende Kombination sein:

        Seite  1:  \index{alpha|(}
        Seite  3:  \index{alpha|bold}
        Seite  5:  \index{alpha|)}

führt zu Zeile

        \item alpha, \bold{3}, 1--5

Allerdings schreibt MakeIndex hierbei eine Warnung in die zugehörige Transcript-Datei, daß eine inkonsistente Seitenbereichsangabe gefunden wurde.

Ein explizit definierter Seitenbereich, der mit einer römischen Seitennummer beginnt und mit einer arabischen endet, wird ebenfalls als fehlerhaft betrachtet. In einem solchen Falle wird der Seitenbereich so geteilt, daß eine römische und eine arabische Seitenfolge erscheint. Die Anweisungen

        Seite  i:  \index{alpha|(}
        Seite iv:  \index{alpha}
        Seite  3:  \index{alpha}
        Seite  7   \index{alpha|)}

werden zu

        \item alpha, i--iv, 3--7

zusammengefaßt, bei gleichzeitiger Ausgabe einer Warnung in die Transcript-Datei.

Indexeinträge mit deutschen Sonderzeichen

Bei deutschen Texten führt die Benutzung des quote-Operators" für Maskierungen zu einer Inkompatibilität mit den Definitionen in der Datei german.sty, bei denen das Zeichen" als spezielles Umschaltzeichen für die Erzeugung der Umlaute bzw. des ß-Zeichens dient.

Korrekte Indexeinträge mit deutschen Sonderzeichen erhält man folgendermaßen:

  • Eine Möglichkeit ist die Verwendung der TeX-Befehle \"a \"o \"u usw.
  • Eine weitere Verfahrensweise, um deutsche Sondersymbole zu erhalten, ist die Maskierung der Maskierungszeichens selbst. Das bedeutet, daß die Anführungszeichen zur Benutzung der Definitionen in german.sty innerhalb eines \index-Befehls doppelt zu schreiben sind (""a ""o ""u usw.). Die Leistungseigenschaften von german.sty werden dann richtig angesprochen. Allerdings hat die Variante einen Nachteil. Zwar werden die Umlaute bzw. das ß korrekt generiert, sie werden jedoch beim Sortiervorgang an die falsche Position gesetzt. Der Grund hierfür ist, daß " als Sonderzeichen lexikalisch vor allen Buchstaben erscheint. Um die richtige Reihenfolge bei der Sortierung sicherzustellen, muß bei diesen Wörtern stets ein Sortierschlüssel definiert werden. Aus den \index-Befehlen
  •         Seite  1:  \index{Safe}
            Seite  4:  \index{Sage@S""age}
            Seite  9:  \index{S""age}
    

    entstehen Register-Einträge in folgender Reihenfolge:

            \item S"age, 9
            \item Safe, 1
            \item S"age, 4
    

    Die Befehle \index{S""age} und \index{Sage@S""age} erzeugen getrennt Einträge.

  • Ab Version 2.11 bietet MakeIndex die Option -g ("german ordering"). Sie veranlaßt eine Sortierung der Indexeinträge entsprechend der Norm DIN 5007 (siehe Abschnitt Ordnungskriterien). Außerdem wird MakeIndex durch diese Option befähigt, Einträge mit deutschen TeX-Kommandos für Umlaute und ß ("a, "o, "u, "s) zu bearbeiten. Sie werden wie ä, ö, ü bzw. ß eingeordnet. Da das Zeichen " dem Indexprozessor als "quote"-Operator dient, muß dieser in einer MakeIndex-Styledatei umdefiniert werden. Das erfolgt (z.B. für die Festlegung des + als neuen "quote"-Operator) durch die Zeile
  •            quote '+'
    

    Anschließend können die deutschen Sonderzeichen wie gewohnt eingegeben werden.

Der Aufruf von MakeIndex an LRZ-Rechnern

... unter DOS / Windows

MakeIndex liegt in X:\PCTEX.21 und wird mit

MAKEINDX [-cglqr][-s sty][-o ind][-t log][-p no] idx0 [idx1...]

aufgerufen.

... unter UNIX (Sun, HP, IBM)

MakeIndex liegt in /client/bin und wird mit

makeindex [-cgilqr][-s sty][-o ind][-t log][-p no] [idx0 idx1...]

aufgerufen.

Aufrufoptionen

Durch die einzelnen Optionen wird folgendes bewirkt:

Option

Erläuterung

-c Alle Leerzeichen werden aus den Stichworten entfernt. Als Voreinstellung werden Leerzeichen bei der Sortierung berücksichtigt und auch im Indexeintrag mit geschrieben. Die Option -c unterdrückt führende und nachfolgende Leerzeichen sowie Tabulatorsprünge. Mehrere Leerzeichen zwischen einzelnen Wörtern eines Indexeintrages werden zu einem einzigen komprimiert.
-g "german ordering" (siehe Abschnitte Ordnungskriterien und Indexeinträge mit deutschen Sonderzeichen )
-i Die Eingabe wird von "stdin" gelesen. Ist bei Verwendung dieser Option keine Ausgabedatei (mit -o) definiert, erfolgt die Ausgabe der geordneten Indexdatei nach "stdout". (Die Option ist nur unter UNIX verwendbar.)
-l Die Sortierung der Indexeinträge erfolgt buchstabenweise.
-o ind Die Option legt den Namen der MakeIndex-Ausgabedatei fest. Bei Fehlen der Option wird er aus dem Namen von idx0 durch Anhängen der Extension .ind gebildet.
-p no Die Ausgabedatei beginnt bei Seitennummer no. Das ist dann sinnvoll, wenn die Indexdatei separat formatiert wird. Für no sind positive ganze Zahlen sowie die Eintragungen any, odd und even erlaubt. Bei diesen Spezialfällen wird die Nummer der ersten Seite des Indexregisters aus der zugehörigen Transcript-Datei gewonnen. Die letzte Seite der LaTeX-Quelldatei wird dabei wie folgt bestimmt: Die Transcript-Datei wird rückwärts bis zum ersten Auftreten einer in eckige Klammern eingeschlossenen ganzen Zahl durchsucht. Falls keine solche Seitennummer oder kein Transcript-File gefunden werden kann, erfolgt keine Festlegung einer Startseite. Den drei speziellen Eintragungen für no kommen folgende Bedeutungen zu:
any Die Nummer der ersten Seite ergibt sich aus der höchsten Seitennummer der zuletzt bearbeiteten LaTeX-Quelle, erhöht um eins.
odd Die Nummer der ersten Seite ist die erste ungerade Zahl nach der höchsten Seitennummer der zuletzt bearbeiteten LaTeX-Quelle.
even Die Nummer der ersten Seite ist die erste gerade Zahl nach der höchsten Seitennummer der zuletzt bearbeiteten LaTeX-Quelle.
-q "quiet mode", d.h. es werden keine Meldungen auf dem Bildschirm angezeigt. Diese werden aber nach wie vor in die Transcript-Datei (Extension .ilg) eingetragen.
-r Diese Option unterdrückt eine Zusammenfassung der Seitenangaben zu einem Bereich, falls der entsprechende Indexeintrag auf drei oder mehr aufeinanderfolgenden Seiten auftritt (z.B. 1-5). Es werden nur dann Seitenbereiche erzeugt, wenn diese durch Bereichsoperatoren definiert wurden. Ansonsten erfolgt eine explizite Aufzählung aller Seiten, in denen ein \index-Kommando für ein bestimmtes Stichwort enthalten war.
-s sty Die nach dieser Option angegebene Zeichenkette wird als Name der zu verwendenden MakeIndex-Styledatei interpretiert. Fehlt die Option in der Kommandozeile, wird MakeIndex ohne Verwendung einer Style-Datei abgearbeitet. Die MakeIndex-Styledatei sollte entweder im aktuellen Katalog oder in einem Verzeichnis zu finden sein, das durch die Environment-Variable INDEXSTYLE festgelegt ist.
-t log Die Option legt den Namen der Transcript-Ausgabedatei fest. Bei Fehlen der Option wird er aus dem Namen von idx0 durch Anhängen der Extension .ilg gebildet.
idxn Es ist Liste von ungeordneten Index-Dateien anzugeben, deren Einträge von MakeIndex eingelesen, sortiert und formatiert werden sollen. Hier ist es notwendig, mindestens einen Dateinamen anzugeben. Die einzelnen Dateinamen sind durch Leerzeichen voneinander zu trennen.

Die MakeIndex-Styledatei

Der Stichwortprozessor generiert aus der ungeordneten Indexdatei einen Text, der sich aus LaTeX-Formatierungsanweisungen zusammensetzt. MakeIndex ist jedoch keinesfalls an LaTeX gebunden. Die Style-Datei dient dem Benutzer als Werkzeug, in den Prozeß der Generierung der geordneten Indexdatei einzugreifen. Die generierte Indexdatei kann damit individuell gestaltet werden.

Ein Style-File ist recht einfach aufgebaut. Es besteht aus einer Liste von <Spezifikator,Zuweisung>-Paaren. Die Reihenfolge dieser Paare innerhalb der Style-Datei ist beliebig. Kommentarzeilen beginnen mit dem Zeichen % .

Für die Argumente der Spezifikatoren gelten spezielle syntaktische Regeln:

 <string> : Es wird eine beliebige Zeichenkette erwartet, die in
            doppelte Hochkomma einzuschließen ist.
            ("...")
            Die maximale Länge einer solchen Zeichenkette ist 144.
 <char>   : Hier muß ein einzelner Buchstabe erscheinen, der
            von einzelnen Hochkomma begrenzt wird.
            ('...')
 <number> : Es muß eine nichtnegative ganze Zahl eingetragen werden.

Für alle in der Style-Datei nicht aufgeführten Spezifikatoren bleiben die voreingestellten Werte gültig.

Es folgt eine Liste aller Spezifikatoren und ihrer Argumente und Voreinstellungen. Es wird unterschieden, ob sie aus der Eingabedatei (.idx-Datei) gelesen oder in die Ausgabedatei (.ind-Datei) geschrieben werden. Die Zeichenfolge \n erzeugt dabei einen Zeilenvorschub, die Zeichenfolge \t einen Tabulatorsprung.

Eingabe-Spezifikatoren

Spezifikator Argumente und Voreinstellungen
keyword <string> "\\indexentry"
Dieses Kommando teilt MakeIndex mit, daß es sich bei seinem Argument um einen Indexeintrag handelt.
arg_open <char> '{'
Begrenzer, der den Indexeintrag einleitet
arg_close <char> '}'
Begrenzer, der den Indexeintrag abschließt
range_open <char> '('
Begrenzer, der den Beginn einer explizit angegebenen Anzahl aufeinanderfolgender Seiten anzeigt
range_close <char> ')'
Begrenzer, der das Ende einer explizit angegebenen Anzahl aufeinanderfolgender Seiten anzeigt
level <char> '!'
Begrenzer, der die einzelnen Stufen für Untereinträge voneinander trennt
actual <char> '@'
Das Symbol zeigt an, daß der nächste Eintrag in der aktuellen Indexdatei erscheint.
encap <char> '|'
Das Symbol zeigt an, daß der Rest der Argumentliste als geschlossenes Kommando für die Seitennumerierung verwendet werden soll.
quote <char> '"'
escape <char> '\\'
Die Symbole für quote und escape müssen unterschieden werden. quote dient dazu, das nächste Zeichen zu überspringen, mit Ausnahme der Fälle, bei denen es von einem escape-Zeichen angeführt wird. Dann wird kein Zeichen übersprungen.

Ausgabe-Spezifikatoren

Spezifikator Argumente und Voreinstellungen
preamble <string> "\\begin{theindex}\n"
die Zeichenkette, mit der die zu generierende Indexdatei beginnen soll
postamble <string> "\n\n\\end{theindex}\n"
die Zeichenkette, mit der die zu generierende Indexdatei abgeschlossen werden soll.
setpage_prefix <string> "\n \\setcounter{page}{"
der Präfix des Kommandos, welches die Nummer für die erste Seite des Indexregisters einstellt
setpage_suffix <string> "}\n"
der Suffix des Kommandos, welches die Nummer für die erste Seite des Indexregisters setzt
group_skip <string> "\n\n \\indexspace \n"
der vertikale Leerraum, der vor Beginn einer neuen Indexgruppe (neues Anfangszeichen) eingefügt
lethead_prefix <string> ""
der Präfix für den Kopf, der generiert werden soll, wenn ein neuer Buchstabe beginnt
lethead_suffix <string> ""
der Suffix für den Kopf, der generiert werden soll, wenn ein neuer Buchstabe beginnt
lethead_flag <number> 0
der Schalter, der anzeigt, ob bei Beginn eines neuen Anfangsbuchstaben ein Kopf generiert werden soll oder nicht:
number=0 es erscheint kein Kopf
number>0 zwischen Präfix und Suffix erscheint der entsprechende Großbuchstabe
number<0 zwischen Präfix und Suffix erscheint der entsprechende Kleinbuchstabe
item_0 <string> "\n  \\item "
das Kommando, das zwischen zwei Indexeinträgen nullter Stufe erscheint
item_1 <string> "\n    \\subitem "
das Kommando, das zwischen zwei Indexeinträgen erster Stufe erscheint
item_2 <string> "\n      \\subsubitem "
das Kommando, das zwischen zwei Indexeinträgen zweiter Stufe erscheint
item_01 <string> "\n    \\subitem "
das Kommando, das zwischen einem Indexeintrag der Stufe null und eins eingefügt wird
item_12 <string> "\n      \\subsubitem "
das Kommando, das zwischen einem Indexeintrag der Stufe eins und zwei eingefügt wird
item_x2 <string> "\n      \\subsubitem "
das Kommando, das zwischen einem Indexeintrag der Stufe eins und zwei eingefügt wird. Der Unterschied zum vorhergehenden Spezifikator ist, daß hier der Indexeintrag der Stufe eins keine Seitennummer besitzt (wie z.B. bei Angabe von Referenzen).
delim_0 <string> ", "
der Begrenzer, der zwischen einem Indexeintrag der Stufe null und seiner ersten Seitenangabe einzufügen ist. Voreinstellung ist ein Komma, gefolgt von einem Leerzeichen.
delim_1 <string> ", "
der Begrenzer, der zwischen einem Indexeintrag der Stufe eins und seiner ersten Seitenangabe einzufügen ist. Voreinstellung ist ein Komma, gefolgt von einem Leerzeichen.
delim_2 <string> ", "
der Begrenzer, der zwischen einem Indexeintrag der Stufe zwei und seiner ersten Seitenangabe einzufügen ist. Voreinstellung ist ein Komma, gefolgt von einem Leerzeichen.
delim_r <string> "--"
der Begrenzer, der bei Angabe einer Reihe aufeinanderfolgender Seiten zwischen der Nummer der ersten und der letzten Seite eingefügt werden soll
encaps_prefix <string> "\\"
der Präfix für das Kommando, welches die Seitennummer einschließt
encaps_infix <string> "{"
der Infix für das Kommando, welches die Seitennummer einschließt
encaps_suffix <string> "}"
der Suffix für das Kommando, welches die Seitennummer einschließt
line_max <number> 72
die maximale Länge einer Zeile in der Ausgabedatei. Bei einer längeren Zeile erfolgt ein Zeilenumbruch.
indent_space <string> "\t\t"
der Leerraum, der vor einer umgebrochenen Zeile eingefügt wird
indent_length <number> 16
die Länge von indent_space

Beispiel

Im folgenden Beispiel wird die Definition einer Style-Datei gezeigt. Diese generiert ein Indexregister, welches auch unabhängig vom Haupttext mit LaTeX aufbereitet werden kann:

   preamble
     "\\documentstyle[12pt]{book}
      \\begin{document}
      \\begin{theindex}
      {\\small\n"
   postamble
     "\n\n}
      \\end{theindex}
      \\end{document}\n"

Fehlermeldungen des Programs MakeIndex

MakeIndex gibt während seiner Arbeit auf dem Bildschirm aus:

  • wieviele Zeilen aus der Eingabedatei gelesen wurden
  • wieviele Zeilen daraus generiert und in die Ausgabedatei geschrieben wurden
  • wieviele Fehler erkannt wurden

In der Transcript-Datei (Extension .ilg) werden Nachrichten abgelegt, die zur Identifikation der aufgetretenen Fehler dienen. Jede dieser Meldungen enthält eine kurze Erklärung zu dem aufgetretenen Fehler selbst und gibt die Zeilennummer an, in der dieser auftrat. Bei Fehlern während der Lese-Phase bezieht sich diese Nummer auf das .idx-File, bei solchen während der Schreibphase auf das .ind-File.

Fehler während des Lesevorgangs

Fehlermeldung Erläuterung
Extra `!' at position ... Das \index-Kommando beinhaltet mehr als zwei unmaskierte!-Zeichen. Evtl. sollte eines davon maskiert werden.
Extra `@' at position ... Das \index-Kommando beinhaltet zwei oder mehr unmaskierte @-Zeichen.
Extra `|' at position ... Das \index-Kommando beinhaltet zwei oder mehr unmaskierte |-Zeichen.
Illegal null field Das Argument des \index-Kommandos ist nicht sinnvoll, da eines der Argumente eine leere Zeichenkette darstellt. Das Kommando \index{!big} würde beispielsweise einen solchen Fehler verursachen, da es einen Untereintrag big definiert, aber keinen zugehörigen übergeordneten Eintrag. Auch das Kommando \index{@big} ist fehlerhaft, da es der Sortierung eine leere Zeichenkette übergibt.
Argument ... too long (max 1240). Das Dokument enthält ein \index-Kommando mit einem sehr langen Argument. Meist ist in solchen Fällen die rechte schließende Klammer vergessen worden, die den Abschluß des Arguments anzeigt.
Weitere Fehler: MakeIndex kann eine ganze Reihe weiterer Fehlermeldungen ausgeben, die meist auf schwerwiegendere Fehler im .idx-File hinweisen. Wenn LaTeX diese Datei ohne eine Fehlermeldung generiert, kann davon ausgegangen werden, daß die Datei in Ordnung ist. Andernfalls ist es am besten, wenn direkt in der ungeordneten Indexdatei nach dem Fehler gesucht wird.

Fehler während des Schreibvorgangs

Fehlermeldung Erläuterung
Unmatched range opening operator Zu einem Kommando \index{...|(} existiert kein korrespondierendes Kommando \index{...|)}. Die durch ... symbolisierte Zeichenkette muß vollständig identisch sein.
Unmatched range closing operator Zu einem Kommando \index{...|)} existiert kein korrespondierendes Kommando \index{...|(}.
Extra range closing operator Im Dokument erscheinen zwei \index{...|(}-Kommandos, ohne daß dazwischen ein Kommando \index{...|)} gefunden wurde.
Inconsistent page encapsulator ... within range MakeIndex wurde angewiesen, eine Reihe aufeinanderfolgender Seiten in einem Indexeintrag und gleichzeitig einen Eintrag zu demselben Stichwort für eine innerhalb des Intervalls liegende Seitennummer zu generieren. Das wäre z.B. der Fall, wenn ein Kommando \index{gnu|ii} zwischen den Anweisungen \index{gnu|(} und \index{gnu|)} eingetragen würde.
Conflict entries MakeIndex wurde angewiesen, zweimal einen Eintrag zu demselben Stichwort und derselben Seite zu erzeugen, z.B. wenn die Kommandos \index{gnu|(see{...}} und \index{gnu} auf einer Seite im Dokument definiert wurden.