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

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Nikero

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

Beitrag 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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4031
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag 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}

Nikero

Beitrag 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.

Antworten