Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Kapitel im Quellcodeverzeichnis mit Abständen trennen

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    93

    Arrow Kapitel im Quellcodeverzeichnis mit Abständen trennen

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    09.07.2004
    Beiträge
    2.365
    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):

    Code:
    \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

  3. #3
    Registrierter Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    93
    Hallo!

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

    Code:
    \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

  4. #4
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hallo,

    Code:
    \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.
    Geändert von mechanicus (24-04-2009 um 11:08 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    93
    Hallo!

    Super, tnx! Aber soll man statt \def nicht \newcommand nehmen?

    Code:
    \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
    Geändert von ActronAB (26-04-2009 um 00:52 Uhr)

  6. #6
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von ActronAB Beitrag anzeigen
    Super, tnx! Aber soll man statt \def nicht \newcommand nehmen?
    Ja solltest du . newcommand hat eine interne Abfrage, ob das Kommando existiert. Etwa so:
    Code:
    \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.

    Zitat Zitat von ActronAB Beitrag anzeigen
    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

  7. #7
    Registrierter Benutzer
    Registriert seit
    05.04.2007
    Beiträge
    535
    solltest unbedingt auf KOMA umsteigen

  8. #8
    Registrierter Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    93
    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
    Code:
    \renewcommand{\@chapter}[2][2]{\ifnum \c@secnumdepth >\m@ne
    heißen und NICHT
    Code:
    \renewcommand{\@chapter}[2]{\ifnum \c@secnumdepth >\m@ne
    sonst gibt es Murks auf der ersten Seite jedes Kapitels. Hab's oben korrigiert.
    Geändert von ActronAB (26-04-2009 um 00:54 Uhr)

  9. #9
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von ActronAB Beitrag anzeigen
    EDIT: In meinem Code muss es glaube ich
    Code:
    \renewcommand{\@chapter}[2][2]{\ifnum \c@secnumdepth >\m@ne
    Hallo,

    eher:
    Code:
    \renewcommand{\@chapter}[2][]{\ifnum \c@secnumdepth >\m@ne
    Gruß
    Marco

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •