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, 05:17

BraBra's gravatar image

BraBra
429515
Akzeptiert: 88%


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, 06:09

Ulrike%20Fischer's gravatar image

Ulrike Fischer
2.2k13

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, 06:30) BraBra
1

Mit meinem Beispiel bekomme ich keine Warnungen.

(18 Nov '14, 06: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, 12:19) BraBra
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×41
×15
×2

Frage gestellt: 18 Nov '14, 05:17

Frage wurde angeschaut: 2,534 Mal

Zuletzt aktualisiert: 18 Nov '14, 12:19