PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kapitel im Quellcodeverzeichnis mit Abständen trennen



ActronAB
22-04-2009, 14:18
Hallo!

Ich nutze für ein Dokument die Klasse "report" und habe am Ende div. Verzeichnisse. Im Abbildungs- und im Tabellenverzeichnis werden die Einträge nach Kapiteln gruppiert, sodass sich optisch etwa folgendes Bild ergibt:

1.1 Foo

2.1 Foo und Bar
2.2 Foobar
2.3 Foobar 2

3.1 Foo und Foo
3.2 Foo? Bar!

Im Quellcodeverzeichnis wird diese Formatierung nicht vorgenommen, sodass der Gesamteindruck natürlich uneinheitlich ist. Wie bekomme ich die Einträge vom listings-Paket auch entsprechend gruppiert?

Tnx & cu
Bernd

edico
22-04-2009, 18:18
Ich weiss nicht, was du machst, dass das beschriebene Layout entsteht. Da du kein Minimalbeispiel anbietest, kann ich es nicht testen.
Bei mir passiert es nicht - mit meinem Beispiel (aber vielleicht habe ich auch mal wieder was nicht verstanden):



\documentclass[10pt]{report}
\usepackage[a5paper]{geometry}

\usepackage{graphicx}
\usepackage{listings}

\begin{document}

\tableofcontents

\newpage
\dots ein Verzeichnis fuer den Quellcode des listings-Pakets
analog zum Abbildungs- und Tabellenverzeichnis erstellen.

\section{eins}\label{sec:eins}
\begin{lstlisting}[caption=bla]{}
Dies ist ein Listing
\end{lstlisting}

\begin{table}[htb]
\centering
\caption{Tabelle \ref{sec:eins} \label{tab:tabeins}}
A
\end{table}

\begin{figure}[!htb]
\centering
\rule{10mm}{2mm}
\caption{Bild \ref{sec:eins} \label{fig:figeins}}
\end{figure}

\section{zwei}\label{sec:zwei}
\begin{lstlisting}[caption=blah]{}
Dies ist auch ein Listing
\end{lstlisting}

\begin{table}[htb]
\centering
\caption{Tabelle 2 \label{tab:tabzwei}}
B
\end{table}

\begin{figure}[!htb]
\centering
\rule{10mm}{2mm}
\caption{Bild 2 \label{fig:figzwei}}
\end{figure}

\subsection{zweieins}
\begin{lstlisting}[caption=blupp]{}
Dies ist noch immer ein Listing
\end{lstlisting}

\begin{table}[htb]
\centering
\caption{Tabelle 3 \label{tab:tabdrei}}
C
\end{table}

\begin{figure}[!htb]
\centering
\rule{10mm}{2mm}
\caption{Bild 3 \label{fig:figdrei}}
\end{figure}

\dots und hier geht der Text.

\newpage

\listoftables
\listoffigures
\lstlistoflistings

\end{document}


edico

ActronAB
24-04-2009, 11:28
Hallo!

Das Problem tritt bei Kapiteln auf, nicht bei Abschnitten. Hiermit kannst du es testen:


\documentclass[10pt]{report}
\usepackage[a5paper]{geometry}

\usepackage{graphicx}
\usepackage{listings}

\begin{document}

\tableofcontents

\newpage
\dots ein Verzeichnis fuer den Quellcode des listings-Pakets
analog zum Abbildungs- und Tabellenverzeichnis erstellen.

\chapter{eins}\label{sec:eins}
\section{eins}
\begin{lstlisting}[caption=bla]{}
Dies ist ein Listing
\end{lstlisting}

\begin{table}[htb]
\centering
\caption{Tabelle \ref{sec:eins} \label{tab:tabeins}}
A
\end{table}

\begin{figure}[!htb]
\centering
\rule{10mm}{2mm}
\caption{Bild \ref{sec:eins} \label{fig:figeins}}
\end{figure}

\chapter{zwei}\label{sec:zwei}
\section{zwei}
\begin{lstlisting}[caption=blah]{}
Dies ist auch ein Listing
\end{lstlisting}

\begin{table}[htb]
\centering
\caption{Tabelle 2 \label{tab:tabzwei}}
B
\end{table}

\begin{figure}[!htb]
\centering
\rule{10mm}{2mm}
\caption{Bild 2 \label{fig:figzwei}}
\end{figure}

\subsection{zweieins}
\begin{lstlisting}[caption=blupp]{}
Dies ist noch immer ein Listing
\end{lstlisting}

\begin{table}[htb]
\centering
\caption{Tabelle 3 \label{tab:tabdrei}}
C
\end{table}

\begin{figure}[!htb]
\centering
\rule{10mm}{2mm}
\caption{Bild 3 \label{fig:figdrei}}
\end{figure}

\dots und hier geht der Text.

\newpage

\listoftables
\listoffigures
\lstlistoflistings

\end{document}

cu
Bernd

mechanicus
24-04-2009, 11:52
Hallo,


\makeatletter
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\addtocontents{lol}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi}
\makeatother

Gruß
Marco

EDIT: Hättest KOMA, wäre es einfacher.

ActronAB
25-04-2009, 19:15
Hallo!

Super, tnx! Aber soll man statt \def nicht \newcommand (http://texcatalogue.sarovar.org/entries/l2tabu.html) nehmen?


\makeatletter
\renewcommand{\@chapter}[2][2]{\ifnum \c@secnumdepth >\m@ne
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\addtocontents{lol}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi}
\makeatother

Ich habe das jetzt so geschrieben, geht das auch? Ausgabe ist gleich aber bei \def steht das #2 hinter der Klammer. Weiß nicht, ob das einen Unterschied macht.

Und ist das @ bei \@chapter einfach Teil des Befehlnamens oder hat das auch eine spezielle Bedeutung?


EDIT: Hättest KOMA, wäre es einfacher.
Bin bisher mit \renewcommand gut ausgekommen, manchmal fehlt nur der Punkt zum Ansetzen (meist Name oder Code des ursprünglichen Befehls). Ist zwar meist komplitierter, aber man lernt immer etwas neues über die Interna von (La)TeX.

cu
Bernd

mechanicus
25-04-2009, 19:59
Super, tnx! Aber soll man statt \def nicht \newcommand (http://texcatalogue.sarovar.org/entries/l2tabu.html) nehmen?
Ja solltest du:D . newcommand hat eine interne Abfrage, ob das Kommando existiert. Etwa so:

\ifx\KOMMANDO\@undefined
Existiert ist, kann newcommand es nicht überschreiben. def hingegen ist das egal, es überschreibt. Zudem hat \def eine andere Syntax was, was den Übergabeparameter angeht. Daher sollte man schon newcommand nutzen. Nutzt du hingegen renewcommand, kann man davon ausgehen, dass du weißt, dass das Kommando existiert. Allerdings muss es auch existieren. Bei def nicht. Ist also etwas gefährlicher. Zudem entspricht es nicht der Latex-Syntax, sonder der von Tex.



Und ist das @ bei \@chapter einfach Teil des Befehlnamens oder hat das auch eine spezielle Bedeutung?
In erster Linie ist es Teil des Namens. Aber das @ ist ein geschütztes Zeichen. D.h. du kannst es nicht so einfach verwenden. http://projekte.dante.de/DanteFAQ/Verschiedenes#53


KOMA war darauf gemünzt, dass du viel einfacher deine Formatierungswünsche umsetzen kannst. Klar nimmt es dem User sehr viel arbeit ab, aber dafür sind ja gerade die Makropakete da.

Gruß
Marco

Bilbo
25-04-2009, 20:10
solltest unbedingt auf KOMA umsteigen

ActronAB
26-04-2009, 01:18
OK, das mit der Existenzprüfung wusste ich schon. Dachte nur du hättest \def aus irgend 'nem bestimmten Grund genommen.

Dass man @ mit \makeatletter in die Zeichenklasse verlegen muss ist mir auch bekannt. Hätte ja sein können, dass LaTeX interne Konventionen hat, das spezielle Makros da mit @ beginnen müssen.

Solange ich ohne Koma klar komme, werd ich drauf verzichten. Ist doch ohne viel spannender! :)

EDIT: In meinem Code muss es glaube ich

\renewcommand{\@chapter}[2][2]{\ifnum \c@secnumdepth >\m@ne

heißen und NICHT

\renewcommand{\@chapter}[2]{\ifnum \c@secnumdepth >\m@ne

sonst gibt es Murks auf der ersten Seite jedes Kapitels. Hab's oben korrigiert.

mechanicus
26-04-2009, 11:05
EDIT: In meinem Code muss es glaube ich

\renewcommand{\@chapter}[2][2]{\ifnum \c@secnumdepth >\m@ne
Hallo,

eher:

\renewcommand{\@chapter}[2][]{\ifnum \c@secnumdepth >\m@ne

Gruß
Marco