Anzeige:
Ergebnis 1 bis 5 von 5

Thema: newcounter und hyperref erzeugen Warnung 'destination with the same identifier'

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.04.2009
    Beiträge
    223

    newcounter und hyperref erzeugen Warnung 'destination with the same identifier'

    Hallo,

    ich habe mir eine nummerierte labeling-Umgebung (enumlabeling) erstellt und dazu einen neuen Zähler namens enumlabel angelegt. Das funktioniert auch prima. Allerdings bekomme ich bei der Benutzung des hyperref-Pakets eine Warnung.

    Folgendes Minimalbeispiel verdeutlicht das Problem:
    Code:
    \documentclass{scrartcl}
    
    % Definition einer nummerierten labeling-Umgebung zur Darstellung der Abschlussarbeiten
    \makeatletter
    \newcounter{enumlabel}
    \newenvironment{enumlabeling}[2][]{%
    	\setcounter{enumlabel}{0}%
      \def\sc@septext{#1}%
      \list{}{\settowidth{\labelwidth}{{%
            #2%
              \sc@septext%
          }}%
        \leftmargin\labelwidth \advance\leftmargin by \labelsep
        \let\makelabel\enumlabelinglabel
      }%
    }{%
      \endlist
    }
    \newcommand\enumlabelinglabel[1]{%
    	\refstepcounter{enumlabel}%
      \theenumlabel. #1\hfil
        \sc@septext%
    }
    \makeatother
    
    \usepackage{hyperref}
    
    \begin{document}
    
    \begin{enumlabeling}{Test}
    	\item[Test] Test
    \end{enumlabeling}
    
    \begin{enumlabeling}{Test}
    	\item[Test] Test
    \end{enumlabeling}
    
    \end{document}
    Die Warnung lautet:
    Code:
    destination with the same identifier (name{enumlabel.1}) has been already used, duplicate ignored
    Wenn ich hyperef mit der Option hypertexnames=false lade, verschwindet die Warnung. Ich bin aber sicher, damit nicht die Ursache, sondern nur das Symptom zu beheben. Wie kann ich die 'identifier' eindeutig machen, bei der normalen enumerate-Umgebung mit ihrem Zähler scheint das ja auch irgendwie zu funktionieren?

    Viele Grüße, Mathias

  2. #2
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Das hyperref-Paket patcht \newcounter. Wenn du hyperref einsetzt, mußt du also die von hyperref gepatchte Version von \newcounter verwenden, also \newcounter *nach* dem Laden von hyperref anwenden.

  3. #3
    Registrierter Benutzer
    Registriert seit
    24.04.2009
    Beiträge
    223
    Danke für den Hinweis, aber wenn ich das hyperref-Paket wie im geänderten Minimalbeispiel gleich am Anfang lade, tritt die Warnung immer noch auf.

    Code:
    \documentclass{scrartcl}
    
    \usepackage{hyperref}
    
    % Definition einer nummerierten labeling-Umgebung zur Darstellung der Abschlussarbeiten
    \makeatletter
    \newcounter{enumlabel}
    \newenvironment{enumlabeling}[2][]{%
    	\setcounter{enumlabel}{0}%
      \def\sc@septext{#1}%
      \list{}{\settowidth{\labelwidth}{{%
            #2%
              \sc@septext%
          }}%
        \leftmargin\labelwidth \advance\leftmargin by \labelsep
        \let\makelabel\enumlabelinglabel
      }%
    }{%
      \endlist
    }
    \newcommand\enumlabelinglabel[1]{%
    	\refstepcounter{enumlabel}%
      \theenumlabel. #1\hfil
        \sc@septext%
    }
    \makeatother
    
    \begin{document}
    
    \begin{enumlabeling}{Test}
    	\item[Test] Test
    \end{enumlabeling}
    
    \begin{enumlabeling}{Test}
    	\item[Test] Test
    \end{enumlabeling}
    
    \end{document}

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von Magger Beitrag anzeigen
    Danke für den Hinweis, aber wenn ich das hyperref-Paket wie im geänderten Minimalbeispiel gleich am Anfang lade, tritt die Warnung immer noch auf.
    Oh, 'Tschuldigung. Ich muß gestehen, mir das Beispiel gar nicht weiter angeschaut zu haben, als ich die Sache mit dem hyperref nach dem \newcount gesehen hatte.

    Nun aber: hyperref braucht einen eindeutigen Zählerwert für seine Anker. Bei dir wird der Zähler aber immer wieder auf 0 zurückgesetzt, so daß die Hyperref-Anker im Anschluß nicht mehr eindeutig sind. Hier gibt es drei verschiedene Abhilfen:

    1. Man macht den Zähler eindeutig, z.B. durch Kopplung an einen anderen Zähler, so wie bei Section-Chapter
    2. Man definiert nach \newcounter \theHenumlabel (man beachte das "H") so um, daß es eindeutig ist
    3. Man verwendet die Paketoption hypertexnames=false, dann sorgt hyperref automatisch für fortlaufende Zähler für die Ankernamenvergabe. ACHTUNG: Dies wirkt dann global auf alle Zähler.


    Hier 'mal eine mögliche Lösung, die Ansatz Nr. 1 verfolgt:
    Code:
    \documentclass{scrartcl}
    
    \usepackage{hyperref}
    
    % Definition einer nummerierten labeling-Umgebung zur Darstellung der Abschlussarbeiten
    \makeatletter
    \newcounter{enumlabeling}  % <= Neu: Zähler enumlabeling, Zählt die Umgebungen
    \newcounter{enumlabel}[enumlabeling] % <= Geändert: Kopplung an enumlabeling
    \newenvironment{enumlabeling}[2][]{%
    	\stepcounter{enumlabeling}% <= Geändert: Umgebungszähler hochzählen
      \def\sc@septext{#1}%
      \list{}{\settowidth{\labelwidth}{{%
            #2%
              \sc@septext%
          }}%
        \leftmargin\labelwidth \advance\leftmargin by \labelsep
        \let\makelabel\enumlabelinglabel
      }%
    }{%
      \endlist
    }
    \newcommand\enumlabelinglabel[1]{%
    	\refstepcounter{enumlabel}%
      \theenumlabel. #1\hfil
        \sc@septext%
    }
    \makeatother
    
    \begin{document}
    
    \begin{enumlabeling}{Test}
    	\item[Test] Test
    	\item[Test] Test
    \end{enumlabeling}
    
    \begin{enumlabeling}{Test}
    	\item[Test] Test
    \end{enumlabeling}
    
    \end{document}

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.04.2009
    Beiträge
    223
    Vielen Dank, das ist genau die Lösung, nach der ich gesucht habe.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •