PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit makeidx



InsideMan
27-11-2009, 11:06
Hallo!

Ich versuche gerade ein Sachregister mit dem Paket makeidx zu erzeugen. Dabei treten 2 Probleme auf:

1. Der Index wird nicht mit der korrekten Seitenzahl in das Inhaltsverzeichnis übernommen
2. Ich hätte gerne einen 3-spaltigen Index. Default scheinen allerdings nur 2 Spalten zu sein. Ich habe im Netz vergeblich nach Einstellungsmöglichkeiten hierfür gesucht. Hat da jmd. einen Hinweis?



\documentclass{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makindex

\begin{document}
\tableofcontents
%ganz viel Code

\bibliography{literatur}
\addcontentsline{toc}{chapter}{Index}
\printindex
\end{document}


So verwende ich das Paket und der Index taucht auch im ToC auf, jedoch mit der Seitenzahl des Literaturverzeichnisses und das ist eben falsch.

Viele Güße

mechanicus
27-11-2009, 15:56
Hallo,

der Versuch, ein Minimalbeispiel zu erstellen ist löblisch. Es sollte aber dein Problem zeigen und auch funktionieren:


\documentclass[index=totoc]{scrreprt}
\usepackage[a5paper]{geometry}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}

\makeindex

\usepackage{multicol}
\makeatletter
\renewcommand*{\idx@heading}{%
\if@openright\cleardoublepage\else\clearpage\fi%
\idx@@heading{\indexname}%
\@mkboth{\indexname}{\indexname}%
}
\renewenvironment{theindex}{%
\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\columnseprule \z@
\columnsep 35\p@
\setchapterpreamble{\index@preamble}%
\idx@heading%
\thispagestyle{\indexpagestyle}\parindent\z@
\setlength{\parskip}{\z@ \@plus .3\p@}%
\setlength{\parfillskip}{\z@ \@plus 1fil}%
\let\item\@idxitem
\begin{multicols}{3}
}{%
\end{multicols}
\if@restonecol\onecolumn\else\clearpage\fi
}
\makeatother

\begin{document}
\tableofcontents
%ganz viel Code
\chapter{foo}
jhf\index{jhfu}
jfjj\index{dksdddf}dkdkp\index{jkobgk}
dkod\index{jbgbk}püdopekd\index{kffrrfk}
kidkod\index{jkgrfrfgrk}dpikdpdk\index{jkrfbfffk}
jfjj\index{dgrgrkbbdf}jkk\index{jkkfrfgbfgdu}
dkdkp\index{jskovfk}dkod\index{jckgf}

püdopekd\index{kdvfvk}kidkod\index{jkkgtgghgtww}
dpikdpdk\index{jkgrgdsfk}jfjj\index{dksdgrgdf}
dpikdpdk\index{jkcdcdsfk}jfjj\index{dksdddddf}
dkdkp\index{jkobgcdeck}dkod\index{jcdcbgbk}
jkk\index{jkku}dkdkp\index{jkok}
dkod\index{jk}püdopekd\index{kk}

dkod\index{jckjgf}püdopekd\index{kdgvfvk}
kidkod\index{jkkgtggnhgtww}dpikdpdk\index{jkgrgvdk }
jfjj\index{dksdgrfgdf}dpikdpdk\index{jkcfdcdsfk}
jfjj\index{dksddfdddf} dkdkp\index{jkobbgcdeck}
dkod\index{jcdcbbgbk}jkk\index{jkkbu}
dkdkp\index{jkbok}dkod\index{jk}
püdopekd\index{kk}


\printindex
\end{document}

Gruß
Marco

lockstep
27-11-2009, 16:32
\renewenvironment{theindex}{%
\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\columnseprule \z@
\columnsep 35\p@
\setchapterpreamble{\index@preamble}%
\idx@heading%
\thispagestyle{\indexpagestyle}\parindent\z@
\setlength{\parskip}{\z@ \@plus .3\p@}%
\setlength{\parfillskip}{\z@ \@plus 1fil}%
\let\item\@idxitem
\begin{multicols}{3}
}{%
\end{multicols}
\if@restonecol\onecolumn\else\clearpage\fi
}


Frage eines Programmier-Anfängers an mechanicus: Warum testet du hier auf Zweispaltigkeit? Sollte nach dem Ende der multicols-Umgebung (im Gegensatz zur originalen Definition von theindex) nicht ohnehin auf die richtige Spaltenzahl zurückgeschaltet werden?

lockstep

mechanicus
27-11-2009, 16:40
Frage eines Programmier-Anfängers an mechanicus: Warum testet du hier auf Zweispaltigkeit? Sollte nach dem Ende der multicols-Umgebung (im Gegensatz zur originalen Definition von theindex) nicht ohnehin auf die richtige Spaltenzahl zurückgeschaltet werden?

lockstep
Hi,

das ist die Originaldefinition:

Mit der Abfrage:

\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi

testest du, ob das Dokument bzw. die Index-Umgebung zweispaltig oder einspaltig gesetzt wird. Je nach dem wird der der wert für \@restonecol gesetzt.

Basierend auf der gezeigten Abfrage stellst du den Ursprung wieder her, mittels:

\if@restonecol\onecolumn\else\clearpage\fi

Natürlich hätte ich bei der Verwendung von multicols auf diese Abfrage verzichten können. Das liegt darin begründet, dass \idx@heading ursprünglich auf twocolumn schaltet, was ich aber raus geschmissen habe.

Hoffe es hilft,

Gruß
Marco

lockstep
27-11-2009, 16:51
Natürlich hätte ich bei der Verwendung von multicols auf diese Abfrage verzichten können. Das liegt darin begründet, dass \idx@heading ursprünglich auf twocolumn schaltet, was ich aber raus geschmissen habe.

Danke für die Klarstellung - mir schien die Abfrage zwar "zuviel des Guten", aber ich wollte nicht ausschließen, dass @restonecol noch irgendeine andere Funktion erfüllt.

lockstep

InsideMan
27-11-2009, 18:27
Hallo Marco,

ich hätte nicht gedacht, dass das so aufwändig ist. Ich hätte eher vermutet, dass es eine Paketoption gibt, über die man das regeln kann.
Auf jeden Fall läuft alles wie gewünscht - vielen Dank!

Tschöö