Seite 1 von 1

Ändern eines Counters führt zu falschen Referenz-Links

Verfasst: Mi 18. Jun 2014, 15:09
von Nikero
Hallo.
Ich bin ein relativer Neuling bei LaTex und bin auf ein Problem gestoßen, für das ich mit google bisher keine Lösung gefunden habe.

Mein Problem ist folgendes. Ich teile einige Codeabschnitte in mehrere Untergruppen ein. Innerhalb einer Gruppe findet eine Fortlaufende Nummerierung statt, während ich die erste Zahl manuel ändere (Beispiel: 1.1, 1.2, 2.1, etc).

Am Beginn jeder Untergruppe setze ich den Zähler auf 1 zurück. Dies führt allerdings zu Verlinkungsfehlern mit hyperref. Hier ein Minimalbeispiel dazu:

Code: Alles auswählen

\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

\usepackage{hyperref}

\usepackage{listings}
\lstset{language=Python, captionpos=b}

\begin{document}

\renewcommand{\thelstlisting}{1.\arabic{lstlisting}}
\begin{lstlisting}[caption=blabla, label=bsp1]
print "hello"
\end{lstlisting}

In Listing \ref{bsp1} auf Seite \pageref{bsp1}...

\newpage

\renewcommand{\thelstlisting}{2.\arabic{lstlisting}}
\setcounter{lstlisting}{0}
\begin{lstlisting}[caption=blabla2, label=bsp2]
print "hello2"
\end{lstlisting}

In Listing \ref{bsp2} auf Seite \pageref{bsp2}...

\end{document}
Auf der zweiten Seite werden zwar die Listingnummer und die Seitenzahl richtig angegeben, beim draufklicken springt man aber zum ersten Listing.

Deshalb wollte ich euch fragen, ob ihr eine Möglichkeit kennt, dass Problem zu beheben.
Ich bedanke mich bereits im Vorraus für Antworten.
mfg Nikero

Verfasst: Mi 18. Jun 2014, 15:28
von u_fischer

Code: Alles auswählen

\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

\usepackage{listings}
\lstset{language=Python, captionpos=b}

\newcounter{mygroupcounter}
\makeatletter
\@addtoreset{lstlisting}{mygroupcounter}
\makeatother

\usepackage{hyperref}
\AtBeginDocument{%
 \renewcommand{\thelstlisting}{\arabic{mygroupcounter}.\arabic{lstlisting}}
 \renewcommand{\theHlstlisting}{\arabic{mygroupcounter}.\arabic{lstlisting}}}

\begin{document}
\refstepcounter{mygroupcounter}
\begin{lstlisting}[caption=blabla, label=bsp1]
 print "hello"
\end{lstlisting}

In Listing \ref{bsp1} auf Seite \pageref{bsp1}...

\newpage


\refstepcounter{mygroupcounter}
\begin{lstlisting}[caption=blabla2, label=bsp2]
 print "hello2"
\end{lstlisting}

In Listing \ref{bsp2} auf Seite \pageref{bsp2}...

\end{document}

Verfasst: Fr 27. Jun 2014, 14:11
von Nikero
Ich bin heute endlich dazu gekommen, die Lösung auszuprobieren, nachdem mein PC in Reparatur war. Und ich kann nur sagen:
Danke! Es hat perfekt geklappt.