PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hyperref mit alphanum



2beers
03-04-2011, 12:31
Hallo,

ich schreibe zur Zeit an einem Text, in dem ich die Klasse jura (http://www.ctan.org/pkg/jura) verwende. Die Gliederung erfolgt dementsprechend durch alphanum (http://www.ctan.org/pkg/alphanum).

Zusätzlich verwende ich hyperref, was an sich ohne Probleme funktioniert. Die Konfiguration dazu ist:


\usepackage[
pdftitle={xyz},
pdfauthor={xyz},
plainpages=false,
pdfpagelabels
]{hyperref}
\hypersetup{colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black, urlcolor=black, citecolor=black}

(hyperref wird als letztes Paket eingebunden)

Mein Problem ist, dass einige Links aus meinem Inhaltsverzeichnis zu falschen Stellen im PDF-Dokument springen, das ich letztlich erstelle.

Ich meine, dass Problem schon so soweit identifiziert zu haben, dass alphanum für die Identifikation der einzelnen Ebenen Bezeichner wie

\newcounter{lvla}
\newcounter{lvlb}
\newcounter{lvlc}
\newcounter{lvld}
\newcounter{lvle}
\newcounter{lvlf}
\newcounter{lvlg}

verwendet.

Sobald ich eine Gliederung habe, die dem Muster

\toc{Erster Eintrag auf Ebene 1}
\sub{Erster Eintrag auf Ebene 2}
\levelup
\toc{Zweiter Eintrag auf Ebene 1}
\sub{Zweiter Eintrag auf Ebene 2}
entspricht, taucht in meiner .log-Datei der folgende Fehler auf

pdfTeX warning (ext4): destination with the same identifier (name{lvlb.I.}) has been already used, duplicate ignored

Scheinbar wird bei der zweiten Verwendung von Ebene 2 für den ersten Gliederungspunkt wieder der Bezeichner lvlb.I. verwendet, was hyperref durcheinander bringt.

Gibt es einen mehr oder weniger eleganten Weg, dieses Problem zu lösen?

rais
03-04-2011, 16:48
Hallo und Herzlich Willkommen :)

Scheinbar wird bei der zweiten Verwendung von Ebene 2 für den ersten Gliederungspunkt wieder der Bezeichner lvlb.I. verwendet, was hyperref durcheinander bringt.

versuch es mal mit


\newcommand*\theHlvla{\arabic{lvla}}
\newcommand*\theHlvlb{\theHlvla.\arabic{lvlb}}
%\newcommand*\theHlvlc...

zusätzlich in Deiner Präambel.
Wenn Dich das nicht weiterbringt, erstelle bitte ein Minimalbeispiel (http://www.minimalbeispiel.de)

MfG

2beers
03-04-2011, 17:04
Danke,

aber der Codeschnipsel gibt mir
Command \theHlvla already defined. zurück.

Zur besseren Fehlerdiagnose habe ich ein Minimalbeispiel erstellt:

\documentclass{jura}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[
plainpages=false,
pdfpagelabels
]{hyperref}
\begin{document}
\tableofcontents %%Das Inhaltsverzeichnis
\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\levelup
\newpage
\toc{Nochmal Ebene 1}
\sub{Nochmal Ebene 2}
\levelup
\end{document}

Obwohl ich das zweite Auftauchen von Ebene 2 extra eine Seite weiter verschoben habe, verweist hyperref im erstellen PDF-Dokument auf die Seite, auf der Ebene 2 zuerst verwendet wird.

Ich hoffe, der Fehler ist so nachvollziehbar.

rais
03-04-2011, 18:05
Moin moin,


Ich hoffe, der Fehler ist so nachvollziehbar.
bei mir nicht:


\listfiles
\documentclass{jura}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[
plainpages=false,
pdfpagelabels
]{hyperref}
\newcommand*\theHlvla{\arabic{lvla}}
\newcommand*\theHlvlb{\theHlvla.\arabic{lvlb}}
%\newcommand*\theHlvlc...
\begin{document}
\tableofcontents %%Das Inhaltsverzeichnis
\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\levelup
\newpage
\toc{Nochmal Ebene 1}
\sub{Nochmal Ebene 2}
\levelup
\end{document}

Lass das mal laufen und vergleiche mit der *File List* aus Deiner .log:


*File List*
jura.cls 1998/07/13 v4.3 juristische Hausarbeiten
report.cls 2007/10/19 v1.4h Standard LaTeX document class
size12.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
alphanum.sty 1998/07/13 v4.3 alphanumeric section numbers
inputenc.sty 2008/03/30 v1.1d Input encoding file
utf8.def 2008/04/05 v1.1m UTF-8 support for inputenc
t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc
ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc
omsenc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc
fontenc.sty
t1enc.def 2005/09/27 v1.99g Standard LaTeX file
hyperref.sty 2011/03/09 v6.82d Hypertext links for LaTeX
ltxcmds.sty 2010/04/26 v1.7 LaTeX kernel commands for general use (HO)
ifpdf.sty 2010/01/28 v2.1 Provides the ifpdf switch (HO)
pdftexcmds.sty 2010/04/01 v0.9 Utility functions of pdfTeX for LuaTeX (HO)
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/message (HO)
ifluatex.sty 2010/03/01 v1.3 Provides the ifluatex switch (HO)
keyval.sty 1999/03/16 v1.13 key=value parser (DPC)
kvsetkeys.sty 2010/03/01 v1.9 Key value parser (HO)
etexcmds.sty 2010/01/28 v1.3 Prefix for e-TeX command names (HO)
pdfescape.sty 2010/03/01 v1.9 Provides hex, PDF name and string conversions
(HO)
ifvtex.sty 2010/03/01 v1.5 Switches for detecting VTeX and its modes (HO)
ifxetex.sty 2010/09/12 v0.6 Provides ifxetex conditional
hycolor.sty 2009/12/12 v1.6 Color options of hyperref/bookmark (HO)
xcolor-patch.sty 2009/12/12 xcolor patch
letltxmacro.sty 2008/06/24 v1.3 Let assignment for LaTeX macros (HO)
kvoptions.sty 2010/02/22 v3.7 Keyval support for LaTeX options (HO)
pd1enc.def 2011/03/09 v6.82d Hyperref: PDFDocEncoding definition (HO)
intcalc.sty 2007/09/27 v1.1 Expandable integer calculations (HO)
hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
url.sty 2006/04/12 ver 3.3 Verb mode for urls, etc.
bitset.sty 2007/09/28 v1.0 Data type bit set (HO)
bigintcalc.sty 2007/11/11 v1.1 Expandable big integer calculations (HO)
atbegshi.sty 2010/03/25 v1.12 At begin shipout hook (HO)
hdvips.def 2011/03/09 v6.82d Hyperref driver for dvips
pdfmark.def 2011/03/09 v6.82d Hyperref definitions for pdfmark specials
rerunfilecheck.sty 2010/03/16 v1.6 Rerun checks for auxiliary files (HO)
atveryend.sty 2010/03/24 v1.5 Hooks at very end of document (HO)
uniquecounter.sty 2009/12/18 v1.1 Provides unlimited unique counter (HO)
nameref.sty 2010/04/30 v2.40 Cross-referencing by name of section
refcount.sty 2008/08/11 v3.1 Data extraction from references (HO)
gettitlestring.sty 2009/12/18 v1.3 Cleanup title references (HO)
mb.out
mb.out
***********

Wie dem auch sei, da es die Befehle bei Dir bereits gibt, könntest Du natürlich statt \newcommand* einfach \renewcommand* an den entsprechenden Stellen verwenden (was wiederum bei mir zur umgekehrten Fehlermeldung führen würde).

MfG

2beers
03-04-2011, 18:27
So,

nachdem ich an meinem Ausgangsbeispiel nochmal eifrig auskommentiert habe, konnte ich feststellen, dass die Lösung mit
\newcommand*\theHlvla{\arabic{lvla}}
\newcommand*\theHlvlb{\theHlvla.\arabic{lvlb}} usw. an sich funktioniert. Sobald ich jedoch (für mein Literaturverzeichnis)
\usepackage{jurabib} wieder einbinde, tritt wieder der Fehler
Command \theHlvla already defined. auf.

Ein Umschreiben auf
\renewcommand*\theHlvla{\arabic{lvla}} erzeugt
\theHlvla undefined.

Eine Minimalbeispiel, das nicht mehr durchkompiliert, sähe somit so aus:
\documentclass{jura}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{jurabib}
\usepackage[
plainpages=false,
pdfpagelabels
]{hyperref}
\newcommand*\theHlvla{\arabic{lvla}}
\newcommand*\theHlvlb{\theHlvla.\arabic{lvlb}}
%\newcommand*\theHlvlc...
\begin{document}
\tableofcontents %%Das Inhaltsverzeichnis
\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\levelup
\newpage
\toc{Nochmal Ebene 1}
\sub{Nochmal Ebene 2}
\levelup
\end{document}

rais
03-04-2011, 20:04
Moin moin,


nachdem ich an meinem Ausgangsbeispiel nochmal eifrig auskommentiert habe, konnte ich feststellen, dass die Lösung mit
\newcommand*\theHlvla{\arabic{lvla}}
\newcommand*\theHlvlb{\theHlvla.\arabic{lvlb}} usw. an sich funktioniert. Sobald ich jedoch (für mein Literaturverzeichnis)
\usepackage{jurabib} wieder einbinde, tritt wieder der Fehler
Command \theHlvla already defined. auf.

Ein Umschreiben auf
\renewcommand*\theHlvla{\arabic{lvla}} erzeugt
\theHlvla undefined.

aha. Offensichtlich definiert sich jurabib (in dieser Konstellation) diese \theHlvl*-Befehle zu Dokumentbeginn, das kannst Du auch:


\documentclass{jura}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{jurabib}
\usepackage[
plainpages=false,
pdfpagelabels
]{hyperref}
\AtBeginDocument{%
\renewcommand*\theHlvla{\arabic{lvla}}%
\renewcommand*\theHlvlb{\theHlvla.\arabic{lvlb}}%
%\renewcommand*\theHlvlc...
}
\begin{document}
\tableofcontents %%Das Inhaltsverzeichnis
\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\levelup
\newpage
\toc{Nochmal Ebene 1}
\sub{Nochmal Ebene 2}
\levelup
\end{document}

MfG

2beers
03-04-2011, 20:15
Hervorragend, das hat funktioniert!

Vielen Dank!

rais
03-04-2011, 21:14
grmph, siehe auch http://www.golatex.de/hyperref-mit-alphanum-t6537.html

Siehe auch nach dem Begriff `Crosspost'

2beers
03-04-2011, 21:17
Das Problem war, dass die Freischaltung hier recht lang gedauert hat. In mehreren Foren zu fragen, ist ja auch grundsätzlich kein Problem. Nun ist es ja sogar so, dass die Lösung auf zwei Wegen gefunden werden kann.

rstuby
04-04-2011, 08:15
Nur ist es in diesem Forum Pflicht, den Link zum anderen Forum dann anzugeben.

Schweinebacke
04-04-2011, 08:17
In mehreren Foren zu fragen, ist ja auch grundsätzlich kein Problem.
Sich nicht an die Spielregeln (http://www.mrunix.de/forums/showthread.php?t=38129) zu halten, ist aber eigentlich schon ein Problem …

Mich wundert, dass KOMA auf goLaTeX die Diskussion nicht gleich geschlossen oder gelöscht hat. Dort ist das nämlich in jeder Weise ein Verstoß gegen die Regeln (http://www.golatex.de/regelwerk-t1905.html) und KOMA hat da früher nicht lange gefackelt (http://www.golatex.de/warum-werden-crosspostings-multipostings-unterbunden-t4913.html).

Sepp99
04-04-2011, 08:47
Sich nicht an die Spielregeln (http://www.mrunix.de/forums/showthread.php?t=38129) zu halten, ist aber eigentlich schon ein Problem …

Mich wundert, dass KOMA auf goLaTeX die Diskussion nicht gleich geschlossen oder gelöscht hat. Dort ist das nämlich in jeder Weise ein Verstoß gegen die Regeln (http://www.golatex.de/regelwerk-t1905.html) und KOMA hat da früher nicht lange gefackelt (http://www.golatex.de/warum-werden-crosspostings-multipostings-unterbunden-t4913.html).

Siehe http://www.golatex.de/nur-zur-info-t6545.html

Sepp.-