PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nummerierung von Listings



Biff1109
05-09-2007, 18:43
Hi,

ich möchte meine Listings mit Kapitelnummer - ListingNr durchnummerieren.
Hab jetzt in einem Forum gelesen, dass es so gehen sollte (wie ich es ähnlich auch schon mit table und figure getan habe):


\usepackage{listings}
\lstset{language=Java, numbers=left}
\renewcommand*{\thelstlisting}{\arabic{section} - \arabic{lstlisting}}
\makeatletter \@addtoreset{lstlisting}{section} \makeatother

Ich bekomme aber beim ausführen einen Fehler, dass


\thelstlisting undefined

ist.

Wenn ich aber im Dokumentbereich


\begin{document}
\thelstlisting
\end{document}

schreibe, kennt er es und führt es richtig aus.

Hat jemand eine Idee, was falsch ist?

schöne Grüße

p.s. verwende TeXnicCenter und MikTeX

bischi
05-09-2007, 18:51
Kannst du mal ein Minimalbeispiel posten, das den Fehler reproduziert?

MfG Bischi

Biff1109
06-09-2007, 11:24
hi bischi,

im Prinzip habe ich das schon im ersten Post angegeben, hab aber jetzt noch ein richtiges Beispiel erstellt.



\documentclass[pdftex]{scrartcl}
\usepackage{ngerman}
\usepackage{geometry}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}

\geometry{a4paper}
\lstset{language=Java}
\renewcommand*{\thelstlisting}{\arabic{section} - \arabic{lstlisting}}
\makeatletter \@addtoreset{lstlisting}{section} \makeatother

\begin{document}
\lstlistoflistings

\section{Test}
\begin{lstlisting}[caption=Beispielcode]
public static void main(String[] args)
{
// Do something ...
}
\end{lstlisting}
Listing: \thelstlisting

\begin{lstlisting}[caption=Beispielcode2]
public static void main(String[] args)
{
// Do something ...
}
\end{lstlisting}
Listing: \thelstlisting

\section{Test2}
\begin{lstlisting}[caption=Beispielcode]
public static void main(String[] args)
{
// Do something ...
}
\end{lstlisting}
Listing: \thelstlisting

\section{Test3}
\begin{lstlisting}[caption=Beispielcode]
public static void main(String[] args)
{
// Do something ...
}
\end{lstlisting}
Listing: \thelstlisting

\end{document}


Beim Erstellen, kommt nun wieder in Zeile 10 der Fehler:


\thelstlisting undefined

sommerfee
06-09-2007, 11:35
\thelstlisting wird wohl erst bei \begin{document} definiert, warum auch immer.

Abhilfe sollte schaffen, entweder


\renewcommand*{\thelstlisting}{\arabic{section} - \arabic{lstlisting}}
\makeatletter \@addtoreset{lstlisting}{section} \makeatother

nach \begin{document} zu platzieren oder das ganze an der Stelle stehen zu lassen, wo es steht, es aber mit \AtBeginDocument zu klammern:


\makeatletter
\AtBeginDocument{%
\renewcommand*{\thelstlisting}{\arabic{section} - \arabic{lstlisting}}%
\@addtoreset{lstlisting}{section}}
\makeatother


Gruß,
Axel

Biff1109
06-09-2007, 11:39
so ... habs jetzt mal unter Linux getestet und siehe da es funktioniert :eek:

Ich denke, dass bei mir das listing package falsch ist oder zu alt oder keine Ahnung.

Wo bekomme ich denn ein aktuelles package her.
Wenn ich MikTex updaten will, kommt immer ein Fehler :(
Kann ich das irgendwie manuell machen?

Biff1109
06-09-2007, 11:43
vielen dank @sommerfee

hat hiermit funktioniert:



\makeatletter
\AtBeginDocument{%
\renewcommand*{\thelstlisting}{\arabic{section} - \arabic{lstlisting}}%
\@addtoreset{lstlisting}{section}}
\makeatother


echt klasse
Danke

sommerfee
17-09-2007, 15:32
Ich denke, dass bei mir das listing package falsch ist oder zu alt oder keine Ahnung.

Neee, zu neu. Das wurde mal intern geändert, damit man auch nach dem Einbinden des listings-Paketes mit \lstset{numberbychapter=true} die Nummerierung nach \chapter-Unterteilung einstellen kann. (Ein "numberbysection" gibt es leider nicht, könnte man ja mal als VV beim Maintainer abkippen.)

Gruß,
Axel