Nachdem wir im letzten Monat bereits erfahren haben, wie man Indexeinträge anlegt und sortiert, geht es nun darum die Darstellung des Index anzupassen. Wir werden das Zusammenspiel mit hyperref
einrichten, neue Befehle (Attribute) zum Formatieren einer Seitenzahl ergänzen sowie den Index so umdefinieren, dass wir die schlechten Umbrüche vermeiden können und in der Kopfzeile die Einträge der jeweiligen Seite erscheinen.
Zielstellung
Bevor wir mit dem Code beginnen hier noch einmal unsere Ziele zusammengefasst: Wir wollen, …
- die Zeilenumbrüche verbessern, d. h. selbige vor dem ersten Haupteintrag einer Buchstabengruppe und vor dem jeweils ersten Untereintrag verhindern,
- Seitenzahlen klickbar machen,
- Einträge in die Kopfzeile übernehmen,
- Buchstabengruppen in die PDF-Bookmarks aufnehmen,
- inhaltliche/bedeutungstragende Attribute vergeben können (bspw.
\index{Licht|important}
statt\index{Licht|textbf}
),
Damit das möglich wird, müssen wir zunächst einen neuen Xindy-Stil definieren, der eine angepassten Code für den Index ausgibt. Das Standardverhalten sehen wir, wenn wir in die von texindy
erzeugte Datei mit der Endung .ind
, die den formatierten Index enthält, schauen (hier gekürzt wiedergegeben):
\begin{theindex} \lettergroup{A} \item Aerodynamik, 16 \indexspace \lettergroup{E} \item Eintrag, 1, \textbf{9}, \textit{11}, I, VI--IX \subitem Untereintrag, 2 \subsubitem zweite Ebene, 3 \indexspace \lettergroup{L} \item Licht, 5--8, \seealso{Wellen, Elektromagnetische}{} \end{theindex}
Eine Buchstabengruppe beginnt jeweils mit dem Befehl \lettergroup
, die Einträge werden jeweils durch einen \item
-Befehl begonnen und die Seitenzahlen stehen plain – ggf. mit Formatierungsbefehlen – in der Datei.
Für unsere Bedürfnisse, müssen wir die Formatierung so anpassen, dass wir für die Kopfzeilen auf die Texte der Haupteinträge zugreifen können, die müssen also durch einen Befehl mit Argument verarbeitet werden, außerdem sollen eigene Attribute definiert werden und einige kleinere Anpassungen vorgenommen werden, sodass der formatierte Index wie folgt aussieht (ebenfalls gekürzt):
\begin{theindex} \lettergroup{A} \item \IndexMainEntry{Aerodynamik}\IndexEntryPageSep \hyperpage{16} \indexspace \lettergroup{E} \item \IndexMainEntry{Eintrag}\IndexEntryPageSep \hyperpage{I}\IndexPageSep \hyperpage{VI}--\hyperpage{IX}\IndexPageClassSep \hyperpage{1}\IndexPageSep \IndexImportantPage{9}\IndexPageSep \IndexEmphPage{11} \subitem Untereintrag\IndexEntryPageSep \hyperpage{2} \subsubitem zweite Ebene\IndexEntryPageSep \hyperpage{3} \indexspace \lettergroup{L} \item \IndexMainEntry{Licht}\IndexEntryPageSep \hyperpage{5}\kern0.1em--\kern0.1em\hyperpage{8}\IndexPageSep \IndexImportantPage{12}\kern0.1em--\kern0.1em\IndexImportantPage{16}\IndexPageClassSep \IndexSeeAlso{Wellen, Elektromagnetische} \end{theindex}
Das sieht auf den ersten Blick komplizierter aus, ermöglicht aber den angepassten Index und da diese Datei ohnehin automatisch erzeugt und eingebunden wird, bekommen wir sie als Nutzer eigentlich nie zu Gesicht.
Index-Stil: Datei index-style.xdy
Bevor wir uns die TeX-Datei anschauen, wollen wir zunächst den Index-Stil (oder das Index-Modul) zusammenstellen. Die Syntax ist vergleichsweise überschaubar:
- Kommentare werden mit einem Semikolon
;
eingeleitet - Befehle/Einstellungen werden durch Klammern zusammengefasst
- Optionen zu den Befehlen beginnen mit dem Doppelpunkt
:
- Werte werden ohne Trennzeichen hinter der Option angeben
- Strings (Zeichenketten) werden in Ersatzanführungszeichen
"
eingeschlossen - Ganzzahlen werden direkt eingegeben
Eine vollständige Referenz findet man auf der xindy
-Homepage: xindy.org.
Basis-Module laden
(require "tex/inputenc/utf8.xdy") (require "book-order.xdy")
Einträge und Seitenzahlen formatieren
Um die Einträge der ersten Ebene mit dem Befehl \IndexMainEntry
zu formatieren, verwenden wir markup-keyword-list
und geben mit :open
und :close
den hinzuzufügenden LaTeX-Code an. Mit der Option :depth
beschränken wir die Einstellung auf eine bestimmte Ebene und könnten so bei Bedarf auch die Untereinträge ansteuern. Ohne die :depth
-Angabe würden alle Ebenen gleich formatiert.
(markup-keyword-list :open "\IndexMainEntry{" :close "}" :depth 0) ;(markup-keyword-list :open "\IndexSubEntry{" :close "}" :depth 1) ;(markup-keyword-list :open "\IndexSubSubEntry{" :close "}" :depth 2)
Auf die Liste aller Seitenzahlen eines Eintrages greifen wir mit diesem Befehl zu. Die Liste soll mit IndexEntryPageSep
beginnen (:open
) – das ist also der Trenner zwischen Eintrag und Seitenzahlen – und mit :sep
geben wir das Trennzeichen zwischen Seitenzahlen verschiedener Klassen an.
(markup-locclass-list :open "\IndexEntryPageSep " :sep "\IndexPageClassSep ")
Analog setzen wir jetzt das Trennzeichen zwischen Seitenzahlen gleicher Klasse.
(markup-locref-list :sep "\IndexPageSep ")
Damit die Seitenzahlen in der PDF klickbar werden, müssen wir diese mit \hyperpage
formatieren, wozu wir im Modul den Befehl markup-locref
verwenden. Diese Angabe bezieht sich allerdings nur auf Seitenzahlen, die kein Attribut haben (oder genauer: die das Attribut default
haben).
(markup-locref :open "\hyperpage{" :close "}")
Mit markup-range
können wir die Darstellung von Seitenzahlenbereichen beeinflussen: hier fügen wir einen Bis-Strich und mit \kern
etwas Abstand um diesen ein.
(markup-range :sep "\kern0.1em--\kern0.1em")
Diese Einstellung könnte man durch die Angabe der Option :class "arabic-page-numbers"
bspw. auf arabische Seitenzahlen beschränken.
Zur Formatierung der Verweiseinträge („siehe“ und „siehe auch“) nutzen wir markup-crossref-list
unter Angabe der jeweiligen Klasse.
(markup-crossref-list :class "see" :open "\IndexSee{" :close "}" ) (markup-crossref-list :class "seealso" :open "\IndexSeeAlso{" :close "}" )
Eigene Attribute
Wie im letzten Monat schon gesagt, ist es ungünstig bzw. nicht in TeX’s Sinn der strikten Trennung von Inhalt und Darstellung/Aussehen, die Attribute textit
und textbf
zu benutzen. Stattdessen wollen wir emph
und important
einführen.
Dazu müssen wir zunächst die Attribute definieren, wobei wir auch default(= kein Attribut) berücksichtigen müssen. Damit die Seitenzahlen trotzdem _ohne_ Berücksichtigung der Attribute sortiert werden, müssen wir alle Attribute durch Klammern als Gruppe zusammenfassen. Das zweite Klammernpaar ist nötig, weil
define-attributes` eine Liste von Einträgen (diese hat hier einen Eintrag) erwartet.
(define-attributes (("important" "emph" "default")))
Um nun die Seitenzahlen mit einem Format zu versehen, nutzen wir wie oben markup-locref
, nur dass wir jetzt das Attribut mit :attr
explizit angeben. Auch hier nutzen wir \hyperpage
, um klickbare Seitenzahlen zu erhalten.
Oben galt die Voreinstellung :attr "default"
.
(markup-locref :open "\IndexImportantPage{\hyperpage{" :close "}}" :attr "important") (markup-locref :open "\IndexEmphPage{\hyperpage{" :close "}}" :attr "emph")
Damit können wir nun einen für uns passenden formatierten Index erzeugen, der dann von LaTeX eingelesen wird. Allerdings müssen wir dann auch die hier verwendeten TeX-Befehle in unserer Datei definieren.
Wo speichert man einen Stil / ein Modul?
Am einfachsten ist es, die .xdy
-Datei im selben Verzeichnis zu speichern wie die .tex
-Datei. Dann ist sie zwar nur für dieses Projekt verfügbar, aber man muss sich nicht mit Pfadvariablen etc. herumschlagen.
Für Experten: xindy
ist derzeit nicht in der Lage kpsewhich
zu nutzen, weshalb man Stile nicht einfach im Nutzer-TEXMF
-Verzeichnis ablegen kann. Siehe dazu auch What is the best (most robust) way to install a custom Xindy style?.
Datei index2.tex
Ausgangspunkt für diese Datei ist die Datei index.tex
mit den zugehörigen Erklärungen aus dem letzten Monat. Wir werden diese nun (als index2.tex
) nach unseren Bedürfnissen erweitern. Kommentiert werden hier jeweils nur Teile die nicht oder anders in der alten Datei stehen.
Für einen Teil der Definitionen werden wir LaTeX3 verwenden. Siehe dazu auch den Abschnitt „LaTeX3-Grundlagen“ im Beispiel aus dem Mai 2016. Das Modul, also den Präfix für alle internen Befehle, nennen wir dieses Mal schlicht idx
.
Damit im Index die Einträge in der Kopfzeile erscheinen können, müssen wir überhaupt erst einmal für das Vorhandensein einer solchen sorgen. Dazu nutzen wir das Paket scrlayer-scrpage
mit der \automark
-Funktion. Dadurch erhalten wir automatisch Kopfzeilen, die zentriert den jeweiligen Abschnitt enthalten.
Mehr zu Kopf- und Fußzeilen findet man im Beispiel „Layout II: Kopf- und Fußzeilen“ (November 2015).
\usepackage{scrlayer-scrpage} \automark{section}
Um den Index dreispaltig ausgeben zu können, benötigen wir die Umgebung {multicols}
, die vom fast gleichnamigen Paket bereit gestellt wird.
\usepackage{multicol}
hyperref
laden wir dieses Mal mit der zusätzlichen Option colorlinks
, damit wir leicht erkennen können, ob die verlinkung der Seitenzahlen erfolgreich war.
\usepackage[ hyperindex=false, colorlinks, ]{hyperref}
Trennzeichen
Damit zwischen dem Eintrag und der ersten Seitenzahl kein Zeilenumbruch stattfinden kann verwenden wir \nolinebreak
. \enskip
erzeugt ein etwas breiteres Leerzeichen.
\newcommand{\IndexEntryPageSep}{% \nolinebreak\enskip\nolinebreak } \newcommand{\IndexPageSep}{% , % inkl. Leerzeichen! } \newcommand{\IndexPageClassSep}{% \IndexPageSep }
Attribute
Für die Seitenzahlen mit Attributen definieren wir jeweils einen Befehl mit einem Argument, der die Darstellung der Seitenzahl steuert. Das Argument ist dann die Seitenzahl.
\newcommand{\IndexEmphPage}[1]{% \emph{#1}% } \newcommand{\IndexImportantPage}[1]{% \textbf{#1}% }
Verweise
Für die Verweise definieren wir ebenfalls je einen Befehl mit einem Argument. Darin benutzen wir \nearrow
(im Mathe-Modus), um einen Pfeil von unten links nach oben rechts auszugeben gefolgt von dem Verweisziel in kursiver Schrift. Im zweiten Befehl nutzen wir \mkern-8mu
, um die beiden Pfeile dichter aneinander zu ziehen.
\newcommand{\IndexSee}[1]{% $\nearrow$~\textit{#1}% } \newcommand{\IndexSeeAlso}[1]{% $\nearrow\mkern-8mu\nearrow$~\textit{#1}% }
Buchstabengruppenüberschriften 1
Zuletzt bestimmen wir noch die Überschrift für die Gruppe der Zahlen und Symbole, in dem wir \lettergroupDefault
definieren. Dass dieser Befehl mit einem Argument definiert wird, obwohl wir das hier nicht brauchen liegt daran, dass texindy
erwartet, dass der Befehl ein Argument hat und in den formatierten Index \lettergroupDefault{default}
schreibt.
\newcommand{\lettergroupDefault}[1]{% \lettergroup{Zahlen und Symbole}% }
Komplexere Befehle
Jetzt folgen die etwas komplizierteren Befehle, um die gewünschten Funktionen in Bezug auf Zeilenumbrüche, PDF-Bookmarks und die Kopfzeile umsetzen zu können.
Um die oben genannten Verbesserungen für die Umbrüche durchführen zu können, müssen wir bei jedem Eintrag prüfen, ob dieser der jeweils erste ist, wozu wir die drei Bool’schen Variablen \l_idx_first_index_item_bool
, \l_idx_first_index_subitem_bool
und \l_idx_first_index_subsubitem_bool
einführen werden.
Beginn der LaTeX3-Syntax
\ExplSyntaxOn
Variablen
Wie eben angekündigt, definieren wir hier die drei Bool’schen Variablen.
\bool_new:N \l_idx_first_index_item_bool \bool_new:N \l_idx_first_index_subitem_bool \bool_new:N \l_idx_first_index_subsubitem_bool
Außerdem definieren wir verschiedene Längen, die die Einrückungen im Index steuern.
\dim_new:N \g_idx_index_hangindent_dim \dim_set:Nn \g_idx_index_hangindent_dim { 4em } \dim_new:N \g_idx_index_subitemindent_dim \dim_set:Nn \g_idx_index_subitemindent_dim { 1em } \dim_new:N \g_idx_index_subsubitemindent_dim \dim_set:Nn \g_idx_index_subsubitemindent_dim { 2em }
Buchstabengruppenüberschriften 2
Für die Überschriften der Buchstabengruppen im Index wird \lettergroup
benutzt, wie wir bereits in der Definition von \lettergruopudefault
gesehen haben.
Der Befehl hat ein Argument, das für den Buchstaben bzw. die Überschrift der jeweiligen Gruppe steht.
\newcommand { \lettergroup } [ 1 ] {
Wird eine Buchstabengruppe begonnen, setzten wir zunächst die Variable für die Einträge der obersten Ebene auf true
, denn nach der Überschrift folgt der erste Eintrag auf dieser Ebene.
\bool_set_true:N \l_idx_first_index_item_bool
Anschließend teilen wir TeX mit, dass hier eine gute Gelegenheit für einen Seitenumbruch wäre, beginnen mit \par
einen neuen Absatz und fügen einen vertikalen Abstand ein.
\goodbreak \par \bigskip
Das Makro \belowpdfbookmark
(aus hyperref
) erzeugt einen Eintrag in die PDF-Bookmark-Liste und zwar unterhalb der aktuellen Überschriftenebene (das ist hier \section
). Im ersten Argument geben wir dabei den Eintrag ein, der in den Bookmarks stehen soll, im zweiten Argument dann einen eindeutigen Anker, den hyperref
benötigt, um dem Bookmark eine Stelle im Dokument zuordnen zu können.
\belowpdfbookmark { #1 } { index:letter-#1 }
Jetzt geben wir die Überschrift in endstrichloser (serifenloser) fetter Schrift aus.
\textsf { \textbf{ #1 } }
Zuletzt fügen wir einen weiteren Absatz ein, und legen mit \nobreak
fest, dass hier besser kein Umbruch stattfinden sollte, damit der folgende erste Eintrag nicht von der Überschrift getrennt wird.
\nobreak \par \nobreak
Ende der Definition
}
Indexeintragbefehle
Jetzt definieren wir für jede Ebene einen eigenen Befehl, der für den richtigen Einzug sorgt und bei Bedarf einen Umbruch verhindert. Da dieser Befehle nur intern verwendet werden sollen, nutzen wir dabei nicht \newcommand
sondern den LaTeX3 Befehl \cs_new:Nn
.
Die folgenden drei Befehle haben keine Argumente – sie geben nicht den Eintrag selbst aus, sondern werden diesem nur vorangestellt.
Dieser Befehl ist für die Einträge der ersten Ebene.
\cs_new:Nn \idx_index_item: {
Hier setzen wir zuerst die Variable für die Einträge der zweiten Ebene auf true
(analog zu \lettergroup
).
\bool_set_true:N \l_idx_first_index_subitem_bool
Dann testen wir, ob es sich bei diesem Eintrag um den ersten auf dieser Ebene handelt (d. h. ob wir uns gerade direkt nach einer Gruppenüberschrift befinden).
\bool_if:NTF \l_idx_first_index_item_bool {
Sollte dieser der Fall sein (T
-Argument), setzen wir die Variable auf false
, denn der folgende Eintrag dieser Ebene ist offensichtlich nicht mehr der erste. Den Umbruch haben wir bereits in der Definition von \lettergroup
verhindert.
\bool_set_false:N \l_idx_first_index_item_bool
} {
Ist es nicht der erste Eintrag (F
-Fall), ist hier eine gute Stelle für einen Umbruch.
\goodbreak
Ende der if
-Abfrage
}
Zuletzt beginnen wir einen neuen Absatz und setzen den hängenden Einzug.
Die Einstellung für den hängenden Einzug gilt immer nur für einen Absatz, weshalb wir sie nicht zentral an einer Stelle machen können.
\par \setlength { \hangindent } { \g_idx_index_hangindent_dim }
Ende der Definition
}
Analog dazu definieren wir die Befehle für die zweite und dritte Ebene, nur das wir hier im T
-Fall ein zusätzliches \nobreak
einfügen müssen, um einen Umbruch vor dem jeweils ersten Eintrag zu verhindern.
\cs_new:Nn \idx_index_subitem: { \bool_set_true:N \l_idx_first_index_subsubitem_bool \bool_if:NTF \l_idx_first_index_subitem_bool { \nobreak \bool_set_false:N \l_idx_first_index_subitem_bool } { \goodbreak } \par \setlength { \hangindent } { \g_idx_index_hangindent_dim } \strut \hspace { \g_idx_index_subitemindent_dim } } \cs_new:Nn \idx_index_subsubitem: { \bool_if:NTF \l_idx_first_index_subsubitem_bool { \nobreak \bool_set_false:N \l_idx_first_index_subsubitem_bool } { \goodbreak } \par \setlength { \hangindent } { \g_idx_index_hangindent_dim } \strut \hspace { \g_idx_index_subsubitemindent_dim } }
Kopfzeile
Damit jeweils der erste und der letzte Eintrag einer Seite in der Kopfzeile erscheinen, müssen wir zwei Befehle definieren: Einen, der die Kopfzeileneinträge setzt und einen, der die Ausgabe übernimmt. Generell nutzen wir dabei den mark-Mechanismus von LaTeX. Dieser kennt eine linke und eine rechte Marke, die ggf. mehrfach pro Seite definiert werden können. Die linke Marke behält dabei immer den ersten Wert, den sie auf der Seite bekam, wogegen die rechte Marke den letzten Wert enthält.
Der Beispiel-Index ist so kurz, dass sich der Aufwand für die Kopfzeilen hier eigentlich nicht lohnt, aber ein „echter“ Index ist schließlich meistens deutlich länger als eine Seite …
Der Befehl, mit dem wir die Haupteinträge formatieren hat ein Argument (den Eintrag).
\newcommand { \IndexMainEntry } [ 1 ] {
Dieses wird ausgegeben und dann mit \markboth
immer an beide Marken übergeben. Der oben beschriebene Mechanismus kümmert sich für uns darum, dass am Ende der Seite jeweils linke und rechte Marke korrekt gesetzt sind.
#1 \markboth { #1 } { #1 }
Ende der Definition
}
Der nächste Befehl ist ein interner und hat kein Argument. Er soll den Text für die Kopfzeile ausgeben.
\cs_new:Nn \idx_index_head_mark: {
Zunächst also die Überschrift des Index gefolgt von einem Leerzeichen und einer öffnenden Klammer.
\indexname \c_space_tl (
Anschließend vergleichen wir die Inhalte der linken und rechten Marken und geben im (unwahrscheinlichen) Fall der Gleichheit nur die linke, ansonsten beide Marken getrennt durch einen Bis-Strich mit etwas mehr Abstand aus.
\tl_if_eq:NNTF \leftmark \rightmark { \leftmark } { \rightmark \kern0.25em -- \kern0.25em \leftmark }
)
Ende der Definition
}
Index-Umgebung
Zu guter Letzt definieren wir noch die Indexumgebung, die den gesamten Index enthält, neu.
Dazu verwenden wir \renewenvironment
: Im ersten Argument geben wir den Namen der umzudefinierenden Umgebung – hier theindex
– an, gefolgt von den Definitionen des \begin
- und \end
-Teils.
\renewenvironment { theindex } {
Der Index soll immer auf einer neuen Seite beginnen.
\clearpage
Dann ändern wir den mittleren Kopfzeilenbereich mit \chead
so, dass er die Index-Kopfmarke enthält.
\chead { \idx_index_head_mark: }
Als nächstes müssen wir die von texindy
für die Ausgabe der Einträge benutzten \item
-Befehle auf die von uns definierten Befehle „umlenken“. Das machen wir, in dem wir beide mit \cs_set_eq
gleichsetzen.
\cs_set_eq:NN \item \idx_index_item: \cs_set_eq:NN \subitem \idx_index_subitem: \cs_set_eq:NN \subsubitem \idx_index_subsubitem:
Der Index selbst soll mit {multicols}
dreispaltig ausgegeben werden, wobei wir im optionalen Argument dieser Umgebung die dann alle Spalten überspannende Überschrift mit \section*
ausgeben und manuell den Inhaltsverzeichniseintrag erzeugen.
Wir können hier nicht \addsec
benutzen, da dies \leftmark
setzt und das wollen wir hier ja für die Indexeinträge benutzen.
\begin{multicols} { 3 } [ \section* { \indexname } \addcontentsline{ toc }{ section }{ \indexname } ]
Innerhalb des Index setzten wir den Absatzeinzug auf Null und stellen auf eine kleinere Schriftgröße um.
\setlength { \parindent } { 0pt } \footnotesize
Ende der Definition des \begin
-Teils; Anfang für den \end
-Teil
} {
Am Ende der Index-Umgebung müssen wir {multicols}
beenden und lassen erneut eine neue Seite beginnen.
\end{multicols} \clearpage
Ende der Definition des \end
-Teils
}
Ende der LaTeX3-Syntax
\ExplSyntaxOff
Indexbefehl
Die Erstellung des Index stoßen wir auch hier wieder mit \makeindex
an, allerdings müssen wir über die Option options
jetzt diverse Einstellungen an texindy
weitergeben: -M index-style
lädt unseren eigenen Stil (Modul), -C uft8
legt die Kodierung fest und mit -g
(german) stellen wir ein, dass Umlaute nach deutschen Regeln sortiert werden sollen.
Die Option intoc
entfällt, da sie in unserer umdefinierten {theindex}
-Umgebung sowieso keine Wirkung zeigen könnte und wir den IHV-Eintrag selbst vorgenommen haben.
\makeindex[options=-M index-style -C utf8 -g]
Testdokument
Nach den vielen Definitionen folgt nun das im Wesentlichen dem des letzten Monats entsprechende Test-Dokument.
\begin{document} \tableofcontents \section{Einträge und Untereinträge} Hier geht es um einen Eintrag\index{Eintrag} \lipsum Hier um einen Untereintrag\index{Eintrag!Untereintrag} Hier um einen Untereintrag\index{Haupteintrag!Untereintrag} \lipsum Und hier um einen Untereintrag 2. Ebene\index{Eintrag!Untereintrag!zweite Ebene} \lipsum Hier beginnt ein Bereich über Licht\index{Licht|(} \lipsum\lipsum\lipsum \textbf{Und hier endet der Bereich wieder}\index{Licht|)}
Anders als im letzten Beispiel verwenden wir nun die eigens definierten Attribute emph
und important
.
\section{Einträge mit Attributen} Stellen mit formatierten Seitenzahlen\index{Eintrag|important} \lipsum\lipsum Hier soll die Seitenzahl kursiv hervorgehoben werden\index{Eintrag|emph} \lipsum Hier beginnt ein Bereich über Licht\index{Licht|(important} \lipsum\lipsum\lipsum \textbf{Und hier endet der Bereich wieder}\index{Licht|)important}
\section{Korrekte Sortierung?} Werden diese Einträge richtig sortiert? \index{Affe} \index{Äffchen} \index{Aerodynamik} \index{$a^2+b^2=c^2$} \index{3D-Brille} \index{\%-Werte} \index{Ohm, Georg Simon} \index{Ørsted, Hans Christian} \index{Oxford} \index{\textsc{öpnv}} \index{Wellen!Elektromagnetische} \index{Wellen!-berg} \index{Wellen!-tal} \index{Wellen!Teilchen-} \lipsum Eintrag mit manueller Sortierung\index{a-Strahlung@$\alpha$-Strahlung} \lipsum \section{Verweise auf andere Einträge} Verweise auf andere Einträge (an einer Stelle im Dokument sammeln!) \index{Prozent-Werte|see{\%-Werte}} \index{Pythagoras, Satz von|see{$a^2+b^2=c^2$}} \index{Satz von Pythagoras|see{$a^2+b^2=c^2$}} \index{Licht|seealso{Wellen!Elektromagnetische}}
Außerdem fügen wir noch einen Abschnitt mit anderer Seitenzählung an: Die Art der Seitennummerierung ändern wir mit dem Befehl \pagenumbering
, der automatisch eine neue Seite beginnt und den Zähler auf Eins zurück setzt.
(siedenote: Das Seitenzahlenformat gibt man als Argument an, wobei arabic
, alph
, Alph
, roman
, Roman
und theoretisch auch fnsymbol
benutzt werden können.)
\pagenumbering{Roman}% Seitenzählung ab hier = I, II, III, IV, ... \section{Seitenzahlen mit anderer Klasse} Hier geht es um einen Eintrag\index{Eintrag} \lipsum\lipsum\lipsum\lipsum Hier geht es um einen Eintrag\index{Eintrag|(} \lipsum\lipsum Hier geht es um einen Eintrag\index{Eintrag|)}
\printindex \end{document}
Mit dem Befehl
require
laden wir die Basismodule für die Kodierung (hier Unicode/UTF-8) und zur Sortierung der Seitenzahlenklassen (römische vor arabischen, gefolgt von alphabetischen Seitenzahlen; Verweise zuletzt)