Sie sind hier

\lstlistoflistings zeigt doppelte Überschrift wenn es eine Caption-Nummer bekommt

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\contentsname}}%
    \chapter{\lstlistlistingname}
 
    \@starttoc{toc}%
    \if@restonecol\twocolumn\fi
    }
 
\renewcommand\lstlistlistingname{Quellcodeverzeichnis}
 
 % 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}

[Admin-Edit:]
1  <code>...</code> eingefügt. Bitte künftig selbst beachten!

Bild von Markus Kohm

Wenn Du in Deiner Verzeichnis-Definition sowohl \chapter*{} als auch \chapter{} verwendest, sollte es Dich eigentlich nicht wundern, dass Du zwei Überschriften bekommst. Aber statt der ganzen Umdefinierungsgeschichte, würde ich an Deiner Stelle einfach das Paket scrhack verwenden. Dann verschwindet auch die Warnung:

Class scrbook Warning: \float@addtolists detected!
(scrbook)              You should use the features of package `tocbasic'
(scrbook)              instead of \float@addtolists.
(scrbook)              Support for \float@addtolists may be removed from
(scrbook)              `scrbook' soon .

Auch die Warnungen:

Class scrbook Warning: You've used obsolete option `bibtotoc'.
(scrbook)              Usage of this option indicates an old document and
(scrbook)              changes compatibility level using
(scrbook)              `bibliography=totoc,version=first'.
(scrbook)              If you don't want this, you should simply replace
(scrbook)              usage of option `bibtotoc' by `bibliography=totoc'.

und

Class scrbook Warning: You've used obsolete option `liststotoc'.
(scrbook)              Usage of this option indicates an old document and
(scrbook)              changes compatibility level using
(scrbook)              `listof=totoc,version=first'.
(scrbook)              If you don't want this, you should simply replace
(scrbook)              usage of option `liststotoc' by `listof=totoc'.

solltest Du ernst nehmen und entsprechend umsetzen. Dabei kannst Du dann auch gleich die Nummerierung mit aktivieren. Dafür fallen dann auch noch ein paar andere Optionen, die doppelt gemoppelt sind, weg:

\documentclass[fontsize=10bp, oneside, bibliography=totocnumbered, DIV=calc, listof=totocnumbered]{scrbook}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}% Kann man machen, in Internetbeispielen ist selinput aber überlegen.
\usepackage{listings}% Ein mal Laden reicht!
\usepackage[colorlinks, 
  linkcolor = black, % Wenn man keine Links will, sollte man keine verwenden,
  citecolor = black, % wenn man aber Links will, sollte der Leser die auch
  filecolor = black, % erkennen können. Deshalb ist das so nicht sinnvoll!!!
  urlcolor = blue, pdfpagelabels, hypertexnames=true]{hyperref}
\usepackage[small, nooneline, format=hang, justification=justified, bf]{caption}
\urlstyle{tt}
\usepackage{subfigure} % Dieses Paket ist veraltet und sollte min. durch
                       % subfig, besser jedoch durch subcaption ersetzt werden!
\setcounter{tocdepth}{4} 
\setcounter{secnumdepth}{6}  
\usepackage{scrhack} % u. a. listings unter Kontrolle von tocbasic stellen
\usepackage{makeidx}% Ein Mal laden reicht!
\makeindex% Ein Mal ausführen reicht!
 
\newcommand*{\chapternumbering}[1]{% So etwas wie \pagenumbering für Kapitel
  \renewcommand*{\thechapter}{\csname #1\endcsname{chapter}}%
  \renewcommand*{\theHchapter}{\thechapter}%
  \setcounter{chapter}{0}%
}
 
\renewcommand*\lstlistlistingname{Quellcodeverzeichnis}
 
\begin{document}
 
\chapternumbering{Roman}% Keine Ahnung, wer auf so etwas kommt, aber bitte …
\tableofcontents
 
\lstlistoflistings
 
\chapternumbering{arabic}
\chapter{Test}
 
 \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}

Näheres zum Paket scrhack ist beispielsweise in der 4. Auflage des KOMA-Script-Buches zu finden.

Den Index würde ich übrigens auf keinen Fall nummerieren. Das macht man einfach nicht. Wenn man das trotzdem will:

\renewcommand*{\idx@@heading}{\chapter}

Danke für die schnelle und ausführliche Antwort.
Habe mich bei meiner Internetsuche auf diese Seite hier gestützt:

http://www.macwrench.de/wiki/Kurztipp_-_Quellcodelistings_in_LaTeX

\usepackage{scrhack } habe ich jetzt eingebunden. Die Fehlermeldungen verschwinden.

Danach habe ich den Vorschlag von Dir eingebunden:

\newcommand*{\chapternumbering}[1]{% So etwas wie \pagenumbering für Kapitel
  \renewcommand*{\thechapter}{\csname #1\endcsname{chapter}}%
  \renewcommand*{\theHchapter}{\thechapter}%
  \setcounter{chapter}{0}%
}

und meine ganzen Umdefinitionen rausgeworfen. Der Doppelteintrag fliegt somit auch raus.

Folgende Nummerierung stellt sich damit im Inhaltsverzeichnis und im Dokument selbst ein:

Abbilungsverzeichnis
I. Abkürzungsverzeichnis
Literaturverzeichnis
Listings
II. Anhang Quellcodes

Gewünscht wäre:

I. Abbilungsverzeichnis
II. Abkürzungsverzeichnis
III. Literaturverzeichnis
IV. Listings
V. Anhang Quellcodes

Bild von Markus Kohm

Wenn Du wichtige Informationen verschweigst (← diesen Link gab es bereits bei der Anmeldung!), dann kann ich Dir nicht helfen. Du machst jedenfalls etwas anders, als ich Dir gezeigt habe, bei mir passt es nämlich:

\documentclass[fontsize=10bp, oneside, bibliography=totocnumbered, DIV=calc, listof=totocnumbered]{scrbook}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}% Kann man machen, in Internetbeispielen ist selinput aber überlegen.
\usepackage{listings}% Ein mal Laden reicht!
\usepackage[colorlinks, 
  linkcolor = black, % Wenn man keine Links will, sollte man keine verwenden,
  citecolor = black, % wenn man aber Links will, sollte der Leser die auch
  filecolor = black, % erkennen können. Deshalb ist das so nicht sinnvoll!!!
  urlcolor = blue, pdfpagelabels, hypertexnames=true]{hyperref}
\usepackage[small, nooneline, format=hang, justification=justified, bf]{caption}
\urlstyle{tt}
\usepackage{subfigure} % Dieses Paket ist veraltet und sollte min. durch
                       % subfig, besser jedoch durch subcaption ersetzt werden!
\setcounter{tocdepth}{4} 
\setcounter{secnumdepth}{6}  
\usepackage{scrhack} % u. a. listings unter Kontrolle von tocbasic stellen
\usepackage{makeidx}% Ein Mal laden reicht!
\makeindex% Ein Mal ausführen reicht!
 
\newcommand*{\chapternumbering}[1]{% So etwas wie \pagenumbering für Kapitel
  \renewcommand*{\thechapter}{\csname #1\endcsname{chapter}}%
  \renewcommand*{\theHchapter}{\thechapter}%
  \setcounter{chapter}{0}%
}
 
\begin{document}
 
\chapternumbering{Roman}% Keine Ahnung, wer auf so etwas kommt, aber bitte …
\tableofcontents
 
\listoffigures
\chapter{Abkürzungsverzeichnis}% Keine Ahnung, wie Du das gemacht hast
\begin{thebibliography}{9}% Keine Ahnung, wie Du das gemacht hast, aber mit
                          % \bibliography passiert in der Regel dasselbe. Wenn
                          % nicht, sollte man sich die Anleitung zum
                          % verwendeten Literaturpaket anschauen.
\bibitem{test} Was auch immer
\end{thebibliography}
\lstlistoflistings
\chapter{Anhang Quellcodes} % Keine Ahnung wie Du das gemacht hast
 
 
\chapternumbering{arabic}
\chapter{Test}
 
 \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}

Und für den kruden Code von irgendwelchen Web-Seiten bin ich nun wirklich nicht verantwortlich. Dass der Code auf der Seite falsch ist und in dieser Form nie getestet wurde, sollte man schon daran sehen, dass die schließende Klammer bei \chapter*{\contentsname im Kommentar verborgen ist.

Wenn ich hingegen vollständige Beispiele poste, dann sind diese in der Regel auch getestet (oder ich gebe das extra an) und ich darf dann auch erwarten, dass diese genau so ausprobiert werden. Wenn dann etwas im eigenen, irgendwie zusammen kopierten Code nicht funktioniert, sollte der erste Schritt sein, selbst zu prüfen, was alles anders ist und welcher Unterschied entscheidend ist.

Bild von Admin

Die Diskussion ist aufgrund des Crossposts außerdem geschlossen.

Administratorentscheidungen sind grundsätzlich nicht im Forum zu diskutieren. Für Fragen an die Administratoren ist die bekannte Administrator-E-Mail-Adresse oder das Forum Site zu verwenden.

Comments for "\lstlistoflistings zeigt doppelte Überschrift wenn es eine Caption-Nummer bekommt" abonnieren