PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : multicols-Problem im Index



deusdona
16-11-2010, 16:41
Hallo

bei der Erstellung eines zweispaltigen Index mit makeindex sollen die
zwei Spalten auf der letzten Seite ausbalanciert werden. Ich weiß,
dass sich sowohl mit dem Paket idxlayout als auch mit multicolumn
dieses Ziel erreichen lässt. Mein Problem ist allerdings, dass
zwischen einzelnen Indexeinträgen, die eigentlich zum selben
Buchstaben gehören, unerwünschte zusätzliche Zeilendurchschüsse
entstehen. Etwa so

Alexander, 23
Albi, 15

Auxerre, 13
Avignon, 11

Der Fehler scheint aber mit dem Seitenumbruch zusammenzuhängen, da er immer nur in der linken Spalte nach dem jeweils zweiten Eintrag passiert. Da die Einträge in der *.ind-Datei fehlerfrei sind, muss der Fehler wohl beim Ausbalancieren entstehen. Der Fehler ist in einem Minimalbeispiel nur annähernd reproduzierbar, hier konzentriert sich das Problem auf die letzte linke Spalte. Eine Änderung von \parskip auf einen starren Wert ahat keine positiven Auswirkungen. Der Fehler ist übrigens unter Verwendung von idxlayout statt multicol exakt derselbe.

Minimalbeispiel:

\documentclass[ngerman]{book}
\listfiles
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel}

\usepackage{makeidx}
\makeindex
\usepackage{multicol}

\makeatletter
\renewenvironment{theindex}
{\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\setlength{\columnseprule}{0pt}
\setlength{\columnsep}{35pt}
\begin{multicols}{2}[\chapter*{\indexname}] %Adjust the 2 for more
columns
\markboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt plus 0.3pt}
\relax
\let\item\@idxitem}%
{\end{multicols}\if@restonecol\onecolumn\else\clea rpage\fi}
\makeatother

\begin{document}
Ein normaler Eintrag\index{Eintrag!normal}
\newpage
Ein fetter Eintrag\index{Eintrag!fett|textbf}
\newpage
Hier\index{hier} kommt\index{kommt} jetzt\index{jetzt} verdammt
\index{verdammt} sinnloser\index{sinnlos} Text\index{Text}, der nichts
\index{nichts} anderes\index{anderes} macht\index{machen}, als
\index{als} verdammt\index{verdammt} viele\index{viele}
unterschiedlicher\index{unterschiedlich} Wörter\index{Woerter@Wörter}
zu benutzen\index{benutzen}, damit\index{damit} jedes\index{jedes}
einzelne\index{einzeln} verdammte\index{verdammt} Wort\index{Wort} in
einen Index-Eintrag\index{Eintrag!Index} verwandelt\index{verwandeln}
werden kann\index{koennen@können}, um dadurch\index{dadurch} einen
möglichst\index{moeglichst@möglichst} langen\index{lang} Index
\index{Index} zu erzeugen\index{erzeugen}.
\index{a}\index{b}\index{c}\index{d}\index{e}\inde x{f}\index{g}
\index{h}\index{hh}\index{i}\index{j}\index{k}\ind ex{l}\index{m}
\index{n}\index{o}\index{p}\index{q}\index{r}\inde x{s}\index{t}
\index{u}
\index{v}
\index{w}
%\index{x}
%\index{y}
%\index{z}
\index{aa}
\index{bb}
\index{cc}
\index{ww}
\index{www}
\index{wwww}
\index{wwwww}
\index{wwwwww}
\index{wwwwwww}
\index{wwwwwwww}
\index{wa}
\index{wwa}
\index{wwb}
\index{wwc}
\index{wwd}
\index{wwe}
\index{wwdd}
\index{wwf}
\index{wwg}
\index{wwh}

\newpage
\printindex
\end{document}

Vielen Dank für alle Hilfe

Christofer.

mechanicus
17-11-2010, 11:36
Hi,

ich kann das Problem nicht sehen? (Anhang)

Gruß
Marco

EDIT: Nutze bitte die Code-Umgebung. (Rautesymbol)

deusdona
19-11-2010, 09:54
Das Problem besteht in der rechten (ich hatte fälschlich geschrieben linken) Spalte des Index auf S. 6: Die rechten Durchschüsse sind größer als die links. Umfasst der Index mehr als zwei Seiten, verlagert sich das Problem: Dann wird jeweils in der linken Spalte nach jedem zweiten Eintrag ein zu großer Durchschuss erzeugt.

lockstep
21-11-2010, 14:54
Hallo Christofer,

ich kann das Problem anhand deines Beispiels nicht nachvollziehen, vermute aber folgendes: Beim Versuch, die Spalten der letzten Zeile auszubalancieren, findet multicol unter Einhaltung des vorgegebenen Abstands zwischen Index-Buchstabengruppen keine befriedigende Lösung und dehnt/staucht daher Abstände zwischen einzelnen Einträgen. Hier hilft eventuell das Einfügen von \raggedcolumns in die Präambel deines Dokuments (um den Preis, dass sich die Spaltenlängen auf der letzten Seite geringfügig voneinander unterscheiden).

lockstep

voss
22-11-2010, 08:35
ich kann das Problem anhand deines Beispiels nicht nachvollziehen, vermute aber folgendes: Beim Versuch, die Spalten der letzten Zeile auszubalancieren, findet multicol unter Einhaltung des vorgegebenen Abstands zwischen Index-Buchstabengruppen keine befriedigende Lösung und dehnt/staucht daher Abstände zwischen einzelnen Einträgen. Hier hilft eventuell das Einfügen von \raggedcolumns in die Präambel deines Dokuments (um den Preis, dass sich die Spaltenlängen auf der letzten Seite geringfügig voneinander unterscheiden).


nicht nur auf der letzten Seite ...

Herbert

lockstep
22-11-2010, 15:10
nicht nur auf der letzten Seite ...

Stimmt - da habe ich zu wenig nachgedacht.

lockstep