PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \lstlistoflistings zeigt doppelte Überschrift wenn es eine Caption-Nummer bekommt



oberhase1234
29-03-2012, 08:42
Hi zusammen,

Ich schreibe gerade Masterarbeit und stehe vor folgendem Problem, das im nachstehenden "Minimalbeispiel" klarer werden soll. Mein Gesamtdokument gliedert sich in einen Inhaltsteil (arabisch nummeriert) und einen Anhangsteil (römisch nummeriert). Der Römisch nummerierte Teil umfasst Literaturverzeichnis, Indexverzeichnis usw., welche problemlos mit Römerischer Nummerierung auftauchen. Damit das Ganze einheitlich ist, wollte ich auch das Quellcodeverzeichnis mit einer römischen Nummer versehen, die dann auch logischerweise im Inhaltsverzeichnis auftaucht.

Das tut sie im Grunde auch, das Problem ist nur, dass mit dem nachstehenden Code im \begin{document} \end{document} Part meines Dokuments einmal ganz normal das Quellcodeverzeichnis mit Nummer auftaucht wie es sein soll, eine Seite oben drüber erscheint einfach noch einmal die Überschrift "Quellcodeverzeichnis", jedoch ohne Nummerierung - also einfach ein doppelter Eintrag und ich sehe den Grund nicht.

Den Part zwischen \makeatletter und \makeatother habe ich in einem anderen Forum gefunden (genauso wie die dazugehörigen Codes für das Abbildungsverzeichnis, das Literaturverzeichnis und das Indexverzeichnis), den ich bei Bedarf hier gerne posten kann.

Weiß von Euch jemand, wo der Fehler liegt?

Danke für ein so informatives Forum, aus dem man so viele Informationen ziehen kann.



\documentclass[fontsize=10bp, oneside, bibtotoc, liststotoc, DIV=calc, toc=listof, toc=bibliography, BCOR=0cm]{scrbook}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage[colorlinks, linkcolor = black, citecolor = black, filecolor = black, urlcolor = blue, pdfpagelabels, hypertexnames=true]{hyperref}
\usepackage[small, nooneline, format=hang, justification=justified, bf]{caption}
\urlstyle{tt}
\usepackage{subfigure}
\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{6}
\usepackage{listings}
\usepackage{makeidx}
\makeindex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\makeatletter
%Quellcodeverzeichnis
% Festlegen des Kapitelnamen (nicht unbedingt notwendig):
% aus listing.sty

% Erzeugen eines Eintrags im Inhaltsverzeichnis:
% aus book.cls
\newcommand\loltableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname}
% \@mkboth{%
% \MakeUppercase\contentsname}{\MakeUppercase\conten tsname}}%
\chapter{\lstlistlistingname}

\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}

\renewcommand\lstlistlistingname{Quellcodeverzeich nis}

% aus listing.sty
\renewcommand\lstlistoflistings{\bgroup
\let\contentsname\lstlistlistingname
\let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
\loltableofcontents \egroup}

\makeatother

\usepackage{makeidx}
\makeindex

\begin{document}

\tableofcontents

\lstlistoflistings

\newpage

\begin{lstlisting}[caption={ein paar Zeilen code},label=test123,captionpos=t]
for i:=maxint to 0 do
begin
//kommentar
j:=square(root(i));
end;
\end{lstlisting}

\end{document}

rstuby
29-03-2012, 08:55
Ich habs noch mal ein bisschen minimalisiert:

\documentclass{scrbook}
%\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{hyperref}

\usepackage{listings}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\makeatletter
%Quellcodeverzeichnis
% Festlegen des Kapitelnamen (nicht unbedingt notwendig):
% aus listing.sty

% Erzeugen eines Eintrags im Inhaltsverzeichnis:
% aus book.cls
\newcommand\loltableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname}
% \@mkboth{%
% \MakeUppercase\contentsname}{\MakeUppercase\conten tsname}}%
\chapter{\lstlistlistingname}

\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}

\renewcommand\lstlistlistingname{Quellcodeverzeich nis}

% aus listing.sty
\renewcommand\lstlistoflistings{\bgroup
\let\contentsname\lstlistlistingname
\let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
\loltableofcontents \egroup}

\makeatother


\begin{document}

\tableofcontents

\lstlistoflistings


\begin{lstlisting}[caption={ein paar Zeilen code},label=test123,captionpos=t]
for i:=maxint to 0 do
begin
//kommentar
j:=square(root(i));
end;
\end{lstlisting}

\end{document}
Ich VERMUTE, dass du dir mit deinem Auszug aus book.cls keinen neuen Eintrag im Inhaltsverzeichnis, sondern ein neues Inhaltsverzeichnis mit dem Namen des Listingverzeichnisses definierst. Aber mit diesen Sachen kenne ich mich nicht aus.

oberhase1234
29-03-2012, 09:13
Danke für die schnelle Antwort

Du meinst also, dass der vermeintliche Doppeleintrag über der Überschrift die "Überschrift" des neuen Inhaltsverzeichnisses "Quellcodeverzeichnis" ist? im "ursprünglichen" Inhaltverzeichnis wird das aber trotzdem gelistet. Ich nehme an, Du hast das selbst gesehen, als Du es mal laufen hast lassen.

oberhase1234
29-03-2012, 09:17
Der Vollständigheithalber gebe ich noch die Quelle für das Ganze an:
http://www.macwrench.de/wiki/Kurztipp_-_Quellcodelistings_in_LaTeX

Man beachte, dass bei der vorgeschlagenen Lösung (am Ende der Seite) in der Zeile "\chapter*{\contentsname" ein "}" am Ende fehlt.

sommerfee
29-03-2012, 09:54
Es wird doch eine KOMA-Script-Klasse verwendet, warum dann überhaupt dieser Hack?

oberhase1234
29-03-2012, 09:55
Weils ohne überhaupt nicht funktioniert hat.

Xenara
29-03-2012, 10:48
Für dein Vorhaben genügt doch ein listof=numbered völlig, oder habe ich da was falsch verstanden?



\documentclass[fontsize=10bp, oneside, bibliography=totoc,
listof=numbered,
DIV=calc, BCOR=0cm]{scrbook}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage[colorlinks, linkcolor = black, citecolor = black, filecolor = black, urlcolor = blue, pdfpagelabels, hypertexnames=true]{hyperref}
\usepackage[small, nooneline, format=hang, justification=justified, bf]{caption}
\urlstyle{tt}
\usepackage{subfigure}
\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{6}
%\usepackage{listings}% Einmal laden reicht völlig!!!
\usepackage{makeidx}
\makeindex

\usepackage{makeidx}
\makeindex

\begin{document}

\tableofcontents

\lstlistoflistings

\newpage

\chapter{Section}

\begin{lstlisting}[caption={ein paar Zeilen code},label=test123,captionpos=t]
for i:=maxint to 0 do
begin
//kommentar
j:=square(root(i));
end;
\end{lstlisting}

\end{document}


Btw, "Weils ohne überhaupt nicht funktioniert hat." ist keine wirklich hilfreiche Problembeschreibung.

klops
01-04-2012, 18:11
Der oberhase1234 hat übrigens vergessen, darauf hinzuweisen, dass das ein Crosspost (http://www.komascript.de/node/1581) ist, das dort inzwischen ebenfalls mehr (http://www.komascript.de/comment/4157#comment-4157) als ausführlich beantwortet (http://www.komascript.de/comment/4155#comment-4155) wurde.