Ich möchte das Wort Hallo! mit nachgestelltem Ausrufezeichen als Index aufführen. \index{Hallo!} oder \index{Hallo!!} führen nicht zum Ziel.

gefragt 16 Jan, 17:31

kabel's gravatar image

kabel
2212220
Akzeptiert: 70%

bearbeitet 17 Jan, 05:30

saputello's gravatar image

saputello
18.4k22352

1

"Hallo!" Hast Du mal ein Minimalbsp. dazu?

(16 Jan, 18:01) cis

Spezielle Zeichen im Index

Open in Online-Editor
\documentclass{article}

\usepackage{makeidx}
\makeindex

\begin{document}
Hallo\index{Hallo"!} im Unterschied zu Hallo Du\index{Hallo!Du}.

\printindex
\end{document}

der Index aus dem Beispiel

Erklärung: ! ist in der Voreinstellung von makeindex der sogenannte level character, also das Zeichen, mit dem ein Untereintrag vom Haupteintrag getrennt wird. Im Beispiel zeigt das Hallo!Du, bei dem Du ein Untereintrag von Hallo wird. Um den level character als normales Zeichen in den Index einzufügen, muss man den quote character voranstellen. In der Voreinstellung ist das ".

Sonderfall Umlaute

Der quote character führt übrigens bei deutschen Umlauten, die beispielsweise als \"a in den Index geschrieben werden zu keinem Problem, weil in diesem Fall, vor dem quote character der voreingestellte escape character steht:

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex

\begin{document}
Hallöchen!\index{Hallöchen"!}

\printindex
\end{document}

Geht auch noch mit Umlauten

Als Index-Eintrag selbst wird hier \indexentry{Hall\IeC {\"o}chen"!}{1} geschrieben (siehe idx-Datei). Vor dem quote character " steht also der escape character \. Daher bleiben beide bei der Verarbeitung durch makeindex erhalten und es entsteht \indexentry{Hall\IeC {\"o}chen"!}{1} (siehe ind-Datei).

Übrigens stört das \IeC im Zweifelsfall trotzdem die Sortierung:

Open in Online-Editor
\begin{filecontents}{\jobname.mst}
quote '+'
\end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex

\begin{document}
Hallöchen!\index{Hallöchen}\index{Hallo}\index{Halloren}

\printindex
\end{document}

falsche Sortierung

daran ändert sich auch nichts, wenn man per Makeindex-Stil-Datei 'quote' umdefiniert (im Beispiel zu +) und makeindex mit Option -g aufruft. Deshalb ist es bei Wörtern mit Sonderzeichen meist vorteilhaft einen Sortierstring mit anzugeben:

Open in Online-Editor
\begin{filecontents}{\jobname.mst}
  quote '+'
\end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex

\begin{document}
Hallöchen!\index{Halloechen@Hallöchen}\index{Hallo}\index{Halloren}

\printindex
\end{document}

mit lexikalischer Sortierung

Es sei aber darauf hingewiesen, dass in Makeindex-Stilen für deutsche Texte, der quote character trotzdem (wie im Beispiel angegeben) häufig umdefiniert wird. Wird also ein Makeindex-Stil verwendet, muss man ggf. in diesem nachschauen, was dort bei quote angegeben ist.

Auch die Verwendung von xelatex oder lualatex hat ggf. Einfluss darauf, was in die idx-Datei geschrieben wird. Man sollte sich deshalb die idx-Datei ruhig einmal anschauen und auch den erzeugten Index bezüglich der Korrektheit der Einträge und der Sortierung einem kritischen Blick unterziehen.

Zu weiteren Informationen bezüglich der Bedeutung einzelner Zeichen in \index sowie zur Erstellung von MakeIndex-Stilen siehe die Anleitungen zu makeindex.

MakeIndex-Alternative xindy

Es sei außerdem darauf hingewiesen, dass es mit xindy eine Alternative zu makeindex gibt, bei der man die Auswertung der Index-Einträge und die Sortierung stärker beeinflussen kann, so dass solche Umwege oft nicht mehr notwendig sind. Die Einarbeitung in xindy kostet meist etwas Zeit. Mit texindy gibt es jedoch ein bis zu einem gewissen Grad zu makeindex kompatibles Frontend. So führt die Datei

Open in Online-Editor
% Das ist indexbeispiel.tex.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex

\begin{document}
Hallöchen!\index{Hallöchen}\index{Hallo}\index{Halloren}

\printindex
\end{document}

und der Aufruf texindy -g indexbeispiel.idx ohne jede Sonderbehandlung für den Umlaut zu dem Ergebnis:

mit xindy

Man beachte, dass hierbei bereits die Buchstabengruppe mit H überschrieben wird. Diese häufig gewünschte Voreinstellung kann man bei Verwendung in texindy mit:

Open in Online-Editor
% Das ist xindybeispiel.tex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex
\newcommand*{\lettergroup}[1]{}
\begin{document}
Hallöchen!\index{Hallöchen"!}\index{Hallo}\index{Halloren}

\printindex
\end{document}

erhält man bei Verwendung von texindy -g xindybeispiel.idx zwischen den beiden pdflatex-Aufrufen

mit xindy und !

Zur Verdeutlichung, dass der quote character hier trotz Option -g weiterhin " ist, habe ich in diesem Beispiel auch wieder das Ausrufezeichen als Sonderzeichen mit eingefügt.

Automatisierung mit imakeidx

Übrigens ist auch das Paket imakeidx einen genaueren Blick wert. Ruft man pdflatex dann mit aktiviertem shell-escape auf, bekommt man obiges Ergebnis nach zweimaligem LaTeX-Lauf direkt aus:

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[original,texindy]{imakeidx}
\makeindex[options=-g]
\newcommand*{\lettergroup}[1]{}
\begin{document}
Hallöchen!\index{Hallöchen"!}\index{Hallo}\index{Halloren}

\printindex
\end{document}

Um den Aufruf von texindy kümmert sich dann imakeidx.

Permanenter link

beantwortet 17 Jan, 03:05

saputello's gravatar image

saputello
18.4k22352

bearbeitet 17 Jan, 05:46

@saputello: Herzlichen Dank für die ausführliche und erhellenden Beispiele!

(17 Jan, 06:11) kabel
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×12
×9
×6
×4

Frage gestellt: 16 Jan, 17:31

Frage wurde angeschaut: 1,083 Mal

Zuletzt aktualisiert: 17 Jan, 06:11