Ich verwende zwei Listings in einem Buch (ListA und ListB). Beide haben einen Counter, der unabhängig von chapter, section, usw. fortlaufend durchzählt.

Nach diversen Seiten (>150) und jeweils 5 bzw. 6 Listings-Aufrufen funktioniert die Referenzierung nicht mehr: Der Verweis mit ref auf die Listing-Nummer führt zum anderen Listing, während pageref die korrekte Seite angibt, z. B. steht auf Seite 167 das Listing A 7 und wird auf Seite 165 mit ref und pageref referenziert: s. A 7, S. 167

A 7: verlinkt mit B 7 (falsch)
S. 167: verlinkt mit A 7 (richtig)

In der Logdatei findet sich "pdfTeX warning (ext4): destination with the same identifier (name{lstnumber.6.1}) has been already used, duplicate ignored". Ich habe schon (erfolglos) versucht, die Hinweise aus Ändern eines Counters führt zu falschen Referenz-Links und Messing with listings vs. hyperref umzusetzen.

Vermutlich muss irgendwo ein theHlista bzw. theHlistb hin (hyperref-Dokumentation, p.5), ich weiß nur nicht wie und wo das mit zwei listings geht und ob das das Problem beseitigt.

Open in writeLaTeX
\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage{listings,etoolbox,caption}

\newcounter{lista}
\renewcommand*{\thelista}{\arabic{lista}}
\newcounter{listb}
\renewcommand*{\thelistb}{\arabic{listb}}

\makeatletter
\lstnewenvironment{ListA}[1][]{%
    \renewcommand*{\lstlistingname}{A}%  
            \let\thelstlisting\thelista
            \let\c@lstlisting\c@lista
    \lstset{frame=tb,%
        #1,
        }%
    }
    {}

\lstnewenvironment{ListB}[1][]{%
    \renewcommand*{\lstlistingname}{B}%
        \let\thelstlisting\thelistb
        \let\c@lstlisting\c@listb
    \lstset{frame=l,%
            #1, %
            }%  
    }
    {}
\makeatother

\usepackage{hyperref}

\begin{document}

\begin{ListA}[caption={Überschrift Listing A}]
x
\end{ListA}

\begin{ListB}[caption={Überschrift Listing B}]
y
\end{ListB}

\end{document}

gefragt 18 Nov '14, 11:17

BraBra's gravatar image

BraBra
4295915
Akzeptiert-Rate: 20%


Im Prinzip muss man immer den Zähler, über den hyperref sich beschwert irgendwie eindeutig machen. D.h. wenn die Warnung (name{lstnumber.6.1}) erwähnt, sollte man sich auf lstnumber konzentrieren.

Open in writeLaTeX
\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage{listings,etoolbox,caption}

\newcounter{lista}
\renewcommand*{\thelista}{\arabic{lista}}
\newcounter{listb}
\renewcommand*{\thelistb}{\arabic{listb}}

\makeatletter
\lstnewenvironment{ListA}[1][]{%
    \renewcommand*{\lstlistingname}{A}%
    \let\thelstlisting\thelista
    \let\c@lstlisting\c@lista
    \def\theHlstlisting{A.\thelstlisting}%
    \def\theHlstnumber{A.\thelstnumber}%
   \lstset{frame=tb,%
        #1,
        }%
    }
    {}

\lstnewenvironment{ListB}[1][]{%
    \renewcommand*{\lstlistingname}{B}%
    \let\thelstlisting\thelistb
    \let\c@lstlisting\c@listb
    \def\theHlstlisting{B.\thelstlisting}%
    \def\theHlstnumber{B.\thelstnumber}%
    \lstset{frame=l,%
            #1, %
            }%
    }
    {}
\makeatother

\usepackage{hyperref}

\begin{document}

\begin{ListA}[caption={Überschrift Listing A}]
x
\end{ListA}

\begin{ListB}[caption={Überschrift Listing B}]
y
\end{ListB}

\end{document}
Permanenter link

beantwortet 18 Nov '14, 12:09

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.6k23
Akzeptiert-Rate: 52%

Super, damit sind die Referenzen korrekt! Die pdfTex warnings gibt leider immer noch pdfTeX warning (ext4): destination with the same identifier (name{lstnumber.A32}) has been already used, duplicate ignored (Stört nicht wirklich, wundert mich trotzdem, tritt schon beim ersten Listing A auf und das hat weniger als 15 Zeilen) Weißt Du woher die warnings kommen?

(18 Nov '14, 12:30) BraBra
1

Mit meinem Beispiel bekomme ich keine Warnungen.

(18 Nov '14, 12:50) Ulrike Fischer

Nee, mit Deinem Beispiel läuft alles prima. Nur in meinem Buch finden sich diese pdfTex warnings. Falls Dir dazu spontan was einfällt, wärs gut, wenn nicht, leb ich auch mit den warnings (weil alles funktioniert).

(18 Nov '14, 18:19) BraBra
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×62
×23
×7

gestellte Frage: 18 Nov '14, 11:17

Frage wurde gesehen: 10,587 Mal

zuletzt geändert: 18 Nov '14, 18:19