Erster Index-Eintrag nicht bündig

Erstellen von Index, Glossar, Symbolverzeichnis, einer Nomenklatur etc. mit MakeIndex oder Xindy


Thomas D
Forum-Anfänger
Forum-Anfänger
Beiträge: 28
Registriert: Di 15. Feb 2011, 08:51

Erster Index-Eintrag nicht bündig

Beitrag von Thomas D »

Hallo

Ich habe mit imakeidx ein Stichwortverzeichnis erstellt. Es klappt soweit auch alles, wie es soll. Einzig der erste Eintrag im Stichwortverzeichnis ist nicht bündig mit dem Eintrag in der zweiten Spalte (auf den Folgeseiten passt wieder alles). Die Ausgabe siehe Anhang.

Das Minimalbeispiel schaut wie folgt aus:

Code: Alles auswählen

\documentclass[11pt,ngerman,hyphens]{scrbook}
\usepackage{fontspec}
\usepackage{babel}

\makeatletter

\usepackage{imakeidx}
\usepackage{filecontents}
\usepackage{multicol}

\begin{filecontents*}{index.ist}
headings_flag 1
heading_prefix "\\indexheading{"
heading_suffix "}"

delim_0 " "
delim_1 " "

group_skip "\n"
preamble "\\begin{theindex}\\starttheindex"
postamble "\n\\stoptheindex\\end{theindex}"
\end{filecontents*}

\newcommand{\indextitle}{Index}
\indexsetup{level=\section*}

\makeindex[
columns=2,
intoc,
title=\indextitle,
options=-s index
]

\newcommand*{\indexheading}[1]{
  \indexrule
  \textbf{#1}
\par
  \nopagebreak
  \vskip-\baselineskip
}
\newcommand*{\indexrule}{
  \par\nopagebreak
  \vskip-\ht\strutbox
  \hfill
\par\pagebreak[3]
  \vskip -\baselineskip
  \hfill
\par\nobreak
}
\newcommand*{\starttheindex}{\raggedcolumns\begin{footnotesize}}
\newcommand*{\stoptheindex}{\indexrule\end{footnotesize}}
\makeatletter
\renewcommand*{\@idxitem}
{\par\hangindent 1.5em\hskip 1.5em}
\renewcommand{\subitem}{\par\hskip 2.5em}
\makeatother


\AtBeginDocument{
  \def\labelitemi{ }
}

\makeatother

\begin{document}
\index{Affe!Anton} \index{Baum!Bernhard} \index{Baum!Carbara}
\index{Affe!Bnton} \index{Baum!Cernhard} \index{Baum!Darbara}
\index{Affe!Cnton} \index{Baum!Dernhard} \index{Baum!Earbara}
\index{Affe!Dnton} \index{Baum!Eernhard} \index{Baum!Farbara}
\index{Affe!Enton} \index{Baum!Fernhard} \index{Baum!Garbara}
\index{Affe!Fnton} \index{Baum!Gernhard} \index{Baum!Harbara}
\index{Affe!Gnton} \index{Baum!Hernhard} \index{Baum!Iarbara}
\index{Affe!Hnton} \index{Baum!Iernhard} \index{Baum!Jarbara}
\index{Affe!Inton} \index{Baum!Jernhard} \index{Baum!Karbara}
\index{Affe!Jnton} \index{Baum!Kernhard} \index{Baum!Larbara}
\index{Affe!Knton} \index{Baum!Lernhard} \index{Baum!Marbara}

\begin{flushleft}
\printindex
\par\end{flushleft}
\end{document}
Dateianhänge
Latex Index Number2.png
Latex Index Number2.png (77.08 KiB) 452 mal betrachtet

Gast

Beitrag von Gast »

Ich würde damit anfangen, den Code zu vereinfachen und dann auf die richtige Hierarchieebene für den Index achten:

Code: Alles auswählen

\documentclass[ngerman]{scrbook}
\usepackage{fontspec}
\usepackage{babel}

\makeatletter

\usepackage{imakeidx}
\usepackage{filecontents}

\begin{filecontents*}{index.ist}
headings_flag 1
heading_prefix "\\indexheading{"
heading_suffix "}"

delim_0 " "
delim_1 " "

group_skip "\n"
preamble "\\begin{theindex}\\raggedright\\footnotesize"
postamble "\n\\end{theindex}"
\end{filecontents*}

\newcommand{\indextitle}{Index}
% \indexsetup{level=\section*}% Sorry, aber das ist Unfug, weil es zu einer
                              % inkosistenten Gliederung führt!

\makeindex[
columns=2,
intoc,
title=\indextitle,
options=-s index
]

\newcommand*{\indexheading}[1]{%
  \vskip \baselineskip
  \textbf{#1}%
  \vskip-\baselineskip
}
\makeatletter
\renewcommand*{\@idxitem}
{\par\hangindent 1.5em\hskip 1.5em}
\renewcommand{\subitem}{\par\hskip 2.5em}
\makeatother


\AtBeginDocument{%
  \def\labelitemi{ }%
}

\makeatother

\begin{document}
\chapter{Test}
\index{Affe!Anton} \index{Baum!Bernhard} \index{Baum!Carbara}
\index{Affe!Bnton} \index{Baum!Cernhard} \index{Baum!Darbara}
\index{Affe!Cnton} \index{Baum!Dernhard} \index{Baum!Earbara}
\index{Affe!Dnton} \index{Baum!Eernhard} \index{Baum!Farbara}
\index{Affe!Enton} \index{Baum!Fernhard} \index{Baum!Garbara}
\index{Affe!Fnton} \index{Baum!Gernhard} \index{Baum!Harbara}
\index{Affe!Gnton} \index{Baum!Hernhard} \index{Baum!Iarbara}
\index{Affe!Hnton} \index{Baum!Iernhard} \index{Baum!Jarbara}
\index{Affe!Inton} \index{Baum!Jernhard} \index{Baum!Karbara}
\index{Affe!Jnton} \index{Baum!Kernhard} \index{Baum!Larbara}
\index{Affe!Knton} \index{Baum!Lernhard} \index{Baum!Marbara}

\printindex

\end{document}

Thomas D
Forum-Anfänger
Forum-Anfänger
Beiträge: 28
Registriert: Di 15. Feb 2011, 08:51

Beitrag von Thomas D »

Das mit dem Verschlanken des Codes hat gut funktioniert. Eine Ergänzung bei \indexheading war noch notwendig, damit nicht der Fall eintritt, dass eine Überschrift auf einer Seite beginnt und die Einträge erst auf der nächsten Seite weitergehen (s. Beispiel im Anhang mit der Überschrift "S").

Durch die Ergänzung mit \nopagebreak ist dieser Fall nun aber auch abgehandelt.

Code: Alles auswählen

\newcommand*{\indexheading}[1]{
 \vskip \baselineskip
  \textbf{#1}
  \nopagebreak %war noch notwendig
  \vskip-\baselineskip
}
Dateianhänge
Latex Index Number3.png
Latex Index Number3.png (60.62 KiB) 434 mal betrachtet

Gast

Beitrag von Gast »

Da der \vskip danach negativ ist, wundert mich das zwar etwas, aber es soll mir recht sein.

Antworten