Sie sind hier

Nicht ausbalancierte Spalten im Index

Hallo Zusammen,

ich habe ein kleines Problem mit nicht ausbalancierten Spalten im Index. Und zwar habe ich eigene Gruppen Überschriften mittels der MakeIndex Style Datei definiert und einen "variablen" Abstand vor den Überschriften gesetzt. Nur leider gleicht LaTeX bereits auf der ersten (vollen) Seite des Indexes die Spalten nicht aus, so das ich einen sehr unschönen Seitenabschluss bekomme.

Hier ein Minimalbeispiel um das ganze zu verdeutlichen:

\documentclass%
    [11pt,paper=a4,pagesize=pdftex,parskip=full+,twoside=false]%
        {scrreprt}
 
\usepackage[ngerman]{babel}
\usepackage{makeidx}
\usepackage{lipsum}
 
\makeindex
 
\begin{document}
 
    \newcount\max
    \newcount\current
    \global\max=20
 
    \global\current=0
    \loop
        \index{A - Eintrag Nr.\the\current}
        \index{B - Eintrag Nr.\the\current}
        \index{C - Eintrag Nr.\the\current}
        \index{D - Eintrag Nr.\the\current}
    \ifnum \current<\max
        \advance\current by 1
    \repeat
 
    \lipsum[1]
    \printindex
 
\end{document}

Und hier die zugehörige MakeIndex Style Datei:

headings_flag   1
heading_prefix  "  \\hskip 12pt\\textbf{\\Large "
heading_suffix  "}\\vskip 8pt\\nobreak\n"
 
group_skip      "\n\n\n  \\par\\vskip 24pt plus6pt minus3pt\\relax\n"

Weiß da jemand vielleicht Abhilfe?

Gruß
Oli

forum: 
Bild von Markus Kohm

Werfen wir einmal einen Blick in die erzeugte ind-Datei:

  \item C - Eintrag Nr.8, 1
  \item C - Eintrag Nr.9, 1
 
 
  \par\vskip 24pt plus6pt minus3pt\relax
  \hskip 12pt\textbf{\Large D}\vskip 8pt\nobreak
 
  \item D - Eintrag Nr.0, 1

Wie man sieht, wird nach dem letzten Eintrag von C ein Absatz eingefügt (dürfte überflüssig sein) und ein variabler Abstand. Damit fügt TeX den Abstand brav am Ende der Spalte ein und macht dann den Umbruch zur nächsten Spalte. Ich betrachte das aber keineswegs als Satzfehler. Im Gegenteil wird dadurch dem Leser signalisiert: »C ist fertig, wenn Du etwas bei C suchst, kannst Du hier aufhören und brauchst nicht umzublättern.«

Mmmh ok, wenn man den Absatz unter diesem Gesichtspunkt betrachtet, dann hat er tatsächlich eine Daseins Berechtigung. Daran hatte ich gar nicht gedacht.

In der Zwischenzeit habe ich aber nochmal ein wenig rumgebastelt und nun doch noch eine Lösung gefunden, wie der Absatz nicht da wäre. Dazu musste ich den Index "nur" auf das Multicol Paket umstellen.

Hier mal die entsprechenden Befehlsredefinitionen:

\newlength{\indexcomlumnsep}
\setlength{\indexcomlumnsep}{42pt}
 
\newif\if@balanceidx
\@balanceidxfalse
 
\renewcommand*{\idx@heading}{%
    \if@twoside\cleardoublepage\else\clearpage\fi%
    \@mkboth{\indexname}{\indexname}%
    \if@restonecol
        \idx@@heading{\indexname}%
        \index@preamble%
    \else
        \twocolumn[%
            \idx@@heading{\indexname}%
            \index@preamble%
        ]
    \fi%
}
 
\renewenvironment{theindex}{%
    \if@twocolumn
        \@restonecolfalse
    \else
        \@restonecoltrue
    \fi
    \columnseprule \z@
    \columnsep \indexcomlumnsep
    \setchapterpreamble{\index@preamble}%
    \idx@heading%
    \thispagestyle{\indexpagestyle}
    \parindent\z@
    \setlength{\parskip}{\z@ \@plus .3\p@}%
    \setlength{\parfillskip}{\z@ \@plus 1fil}%    
    \let\item\@idxitem
    \if@restonecol
        \if@balanceidx
            \begin{multicols}{2}%
        \else%
            \begin{multicols*}{2}%
        \fi%
    \fi%
}{%
    \if@restonecol
        \if@balanceidx
            \end{multicols}%
        \else
            \end{multicols*}%
        \fi%
    \fi%
    \clearpage%
}

Ist natürlich nicht sonderlich sauber gelöst, da ich ja hier einige interne Makros verwende und sogar eines umdefiniere, aber es funktioniert...

Ganz nebenbei hat man nun zwei weitere Optionen um das Aussehen des Indexes etwas anzupassen, einmal kann man über '\indexcomlumnsep' die Breite des Leerraumes zwischen den beiden Spalten anpassen und andererseits kann man mit '\@balanceidxtrue' und '\@balanceidxfalse' steuern, ob die letzte Seite des Indexes auch ausbalanciert werden soll.

Jetzt muss ich mich wohl nur noch entscheiden, was von beiden mir besser gefällt, also vom Satz her :-/

Danke Dir aber auf jeden Fall für den Denkanstoß!

Gruß
Oli

Ich hab gerade nochmal schnell was getestet, und zwar wenn ich im ursprünglichen Beispiel '\global\max=20' durch '\global\max=24' ersetze, dann sind die Spalten auf der ersten Seite immer noch nicht ausgeglichen und das obwohl die Liste der Einträge für C auf der nächsten Seite noch weiter gehen.

Da schein ich wohl nur ein unpassendes Beispiel gewählt zu haben.

Bild von Markus Kohm

In dem Fall suchst Du schlicht \flushbottom, das bekanntlich bei einseitigen Dokumenten nicht automatisch aktiviert ist.

Super Danke, das war genau das wonach ich gesucht habe!

Und ich bastel da an so einem kompliziertem Konzept :-/

Comments for "Nicht ausbalancierte Spalten im Index" abonnieren