PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiefe des Listing-Verzeichnisses anpassen



ChiefZ
10-04-2012, 03:50
Hallo zusammen,
ich habe folgendes Problem:
Meine Studienarbeit bestand aus Programmieren und bei meiner Dokumentation habe ich jede Menge Quellcodeausschnitte im Anhang. Um das ein bisschen übersichtlicher zu gestalten, habe ich die Quellcodeauszüge im Anhang in "sections" aufgeteilt, die die Klassennamen haben. Der Quellcodeausschnitt ist dann eine "subsection". Leider wird dies aber beim Erstellen des Listingsverzeichnisses nicht berücksichtigt. D.h. der erste Quellcodeausschnitt ist in der "subsection" A.1.1. Klasse::Methode() wird im Listingsverzeichnis aber als A.1 Klasse::Methode angezeigt und auch in der "caption" so dargestellt. Ich hätte aber gerne A.1.1 Klasse::Methode(). Kann mir jemand sagen, wie ich die Tiefe der Nummerierung wie es beim Inhaltsverzeichnis (tocdepth), anpassen kann?
Falls die Beschreibung unklar war, ist hier ein Beispiel:


\documentclass[12pt, a4paper, oneside]{scrreprt}
%************************************************* *
% Verwendete Packages; Dokumenteinstellungen
%************************************************* *
\usepackage{fancyhdr}
\usepackage{graphics}
\usepackage{german}
\usepackage[latin1]{inputenc}
\usepackage{color}
\newcommand{\KopfzeileFarbe}{\color[gray]{0.6}}%
\usepackage[linkcolor=black, % einfache interne Verknüpfungen
anchorcolor=black,% Ankertext
citecolor=black, % Verweise auf Literaturverzeichniseinträge im Text
filecolor=black, % Verknüpfungen, die lokale Dateien öffnen
menucolor=black, % Acrobat-Menüpunkte
urlcolor=black]{hyperref}
\usepackage{caption}
\usepackage[scaled=0.95]{helvet}
\usepackage[T1]{fontenc}
\newcommand{\changefont}[3]{\fontfamily{#1} \fontseries{#2} \fontshape{#3} \selectfont}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{multirow}
\usepackage{colortbl}
\usepackage[math]{helvet}
\usepackage{tocloft}
\usepackage{listings}
\definecolor{darkgreen}{rgb}{0,0.35,0}
\lstset{
numbers=left,
basicstyle=\footnotesize,
captionpos=b,
language=C++,
tabsize=2, % sets default tabsize to 2 spaces
numberstyle=\tiny\color[gray]{0.6}, % line number style
keywordstyle=\color{blue}, % keyword style
commentstyle=\color{darkgreen}, % comment style
showspaces=false, % show spaces adding particular underscores
showstringspaces=false, % underline spaces within strings
stringstyle=\color{magenta}, % string literal style
numberbychapter=true
}
\renewcommand*\lstlistingname{Quellcode}
\renewcommand{\lstlistlistingname}{Quellcodeverzei chnis}

\newcommand{\settocdepth}[1]{%
\addtocontents{toc}{\protect\setcounter{tocdepth}{ #1}}}

%************************************************* *
%Beginn Doukment
%************************************************* *
\begin{document}
\renewcommand{\figurename}{Abbildung}
\changefont{phv}{m}{n}
\begin{titlepage}
\begin{center}
{\huge {\bf Studienarbeit}\\}
{\vspace{2,5cm} \large \bf von\\mir\\}
{\vspace{2,5cm} \huge \bf Titel der Arbeit\\}
{\vspace{2,5cm} \large \bf Institut für \\Universität \\}
\vspace{2,5cm} \large \bf Betreut von\\Dipl.-Ing.
\end{center}
\end{titlepage}
\pagenumbering{roman}
\pagestyle{fancy}
\renewcommand*{\chapterpagestyle}{fancy}
\addcontentsline{toc}{chapter}{Inhaltsverzeichnis}
\tableofcontents
\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{3}
\newpage
\lstlistoflistings
\addcontentsline{toc}{chapter}{Quellcodeverzeichni s}
\pagenumbering{arabic}
\chapter{Kapitel}
...Text...
\section{Section}
...Text...
\subsection{Subsection}
...Text...
\appendix
\settocdepth{1}
\chapter{Auszüge aus dem Quellcode}
\section{Quellcodeausschnitt1.cpp}
\subsection{Die Methode {\tt void Klasse::Methode()}}
\label{hauptmaskeSourcecode1}
\lstset{caption = Die Methode {\tt void Klasse::Methode()}}
\begin{lstlisting}
void Klasse::Methode()
{
...
QString file;
file = QFileDialog::getSaveFileName ( this, "Saving",
QDir::currentPath(), "Sessiondata (*.save)") ;
QFile filesave(file);
...
QDataStream save(&filesave);
if (!filesave.open(QIODevice::WriteOnly)){
QString caption("Error");
QString text("Saving error");
QMessageBox::warning(this, caption, text,
QMessageBox::Ok);
return;
}
return;
}
\end{lstlisting}
\end{document}

hakaze
10-04-2012, 07:50
Dein Code macht genau, was er soll. Schließlich setzt du mit settocdepth doch die Tiefe der Verzeichniseinträge wieder kurz vor dem Listing herunter. Du solltest auch prüfen, ob das mehrmaligen Umdefinieren des Parameters sinnvoll ist.

Hier besteht auch anderen Stellen noch Aufräumbedarf. Du lädst zweimal helvet, was zumind. auf meinem System zu einem option clash führt. Weiterhin solltest du low-level-Befehle wie bf und tt vermeiden und stattdessen die entsprechenden LaTeX-Umschalter bfseries und ttfamily verwenden.

u_fischer
10-04-2012, 12:12
Listings werden normalerweise Kapitelweise durchgezählt und zeigen die Nummer "Kapitel.Listingsnummer". Wenn du statt dessen die \subsection-Nummer sehen willst, mache


\appendix
\renewcommand{\thelstlisting}{\thesubsection.}

ChiefZ
11-04-2012, 00:32
Vielen Dank, Ulrike! Wie einfach es manchmal ist...
Du bist jetzt schon meine Heldin, aber wenn du mir noch sagst, wie ich jetzt wieder eine Lücke zwischen die Nummerierung und die Überschrift bekomme, kann ich mich nicht mehr halten! :)
Zusätzlich würde ich gerne den linken Einzug verkleinern, da er größer ist, als beim Inhalts- und Abbildungsverzeichnis.
Danke für deine Hilfe!!!

u_fischer
11-04-2012, 10:12
Der Einzug ist genauso groß wie der Einzug von \section-Einträgen im Inhaltsverzeichnis. Manipulieren kannst du die Werte, indem du \l@lstlisting umdefiniert. Du wirst übrigens bei \thelstlisting den Punkt wegnehmen müssen, er ist sonst im Listingsverzeichnis doppelt (das Autodot-Verfahren von scrreprt fällt hier aus). Wenn du ihn in der \caption brauchst, kannst du wahrscheinlich das Captionformat mit dem caption-Paket ändern.


\documentclass[12pt, a4paper, oneside]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{helvet}

\usepackage{listings}
\makeatletter
\renewcommand\l@lstlisting{\@dottedtocline{1}{0pt} {3em}}
\makeatother
\begin{document}
\tableofcontents
\lstlistoflistings
\appendix
\chapter{Auszüge aus dem Quellcode}
\section{Quellcodeausschnitt1.cpp}
\subsection{Die Methode {\tt void Klasse::Methode()}}
\renewcommand{\thelstlisting}{\thesubsection}
\begin{lstlisting}[caption = Die Methode {\tt void Klasse::Methode()}]
void Klasse::Methode()
\end{lstlisting}
\end{document}

ChiefZ
14-04-2012, 19:46
Super! Vielen herzlichen Dank!