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) 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 |
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} beantwortet 18 Nov '14, 12:09 Ulrike Fischer 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
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
|