PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hyperref Links falsch



Jürgen
19-03-2014, 10:22
Hallo,

ich habe heute das paket hyperref hinzugefügt.

Funktioniert soweit so gut.

Leider werden einige Tabellen und Bilder falsch verlinkt.

Während die Verlinkung der Tabellen 1-3 richtig ist, werden alle folgenden Tabellen auf Tabelle 1,2 oder 3 verlinkt.

Bei den Abbildungen ist dies ähnlich.

Ich arbeite immer mit copy and paste aber in den Tabellen oder Abb. ist nichts was auf die andere Abb hinweisen könnte. Also weder das Label noch die caption.

Minimalbeispiel:


%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[12pt,oneside,a4paper,bibliography=totoc,liststotoc]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2cm,footsk ip=1cm]{geometry}

%neue Rechtschreibung

\usepackage[ngerman]{babel}% deutsche Trennregeln
\usepackage[T1]{fontenc}% wichtig für Trennung von Wörtern mit Umlauten
\usepackage{microtype}% verbesserter Randausgleich



%für XeLatex wichtig:
\usepackage[cm-default]{fontspec} % Die Option cm-default beim fontspec-Paket ist hierbei nötig, um die korrekte Darstellung mathematischer Zeichen zu gewährleisten
\usepackage{xltxtra} %Das Paket xltxtra lädt eine Reihe von Paketen, unter anderem fontspec, xunicode, ifxetex und graphicx. Falls man also diese Pakete ohne weitere Optionen laden möchte, reicht es aus, nur xltxtra zu laden.
\usepackage{xunicode} %Das Paket xunicode wird zur Zeichensatzdeklaration anstelle des Paketes inputenc verwendet.

%Schriftart auswählen:
\setmainfont{RubFlama}
\setsansfont{RubFlama}

%\usepackage{rubfonts2009} (klappt zur Zeit noch nicht)

%\usepackage[scaled=0.9]{helvet} %helvetica ist der Ursprung aus dem Arial abgekupfert wurde
%\renewcommand{\familydefault}{\sfdefault} %setzt das gesamte Textdokument auf die gewählte Standartschriftart (nicht mit fontspec!)


%eingebundene Packages
\usepackage{amsmath}
\usepackage[table]{xcolor}
\usepackage{graphicx}
\usepackage{longtable} %ermöglicht Tabellen über mehrere Seiten
\usepackage[absolute]{textpos}
\usepackage{hyphenat}
\usepackage{multirow}
\usepackage{array}
\usepackage{url}
\usepackage{chngcntr}
\usepackage{tabularx}
\counterwithin{figure}{section} %nummeriert Bilder nach ihrern Kapiteln
\counterwithin{table}{section}
\addtokomafont{caption}{\small}
\usepackage{pdfpages} %bindet PDFdokumente ein


%Schriftfarbe:
%\usepackage{color}
%\definecolor{RUBblau}{HTML}{003561}
%\definecolor{RUBgreen}{HTML}{8DAE10}
\definecolor{Gray}{gray}{0.7}

%Seitenzahl

\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\chead{}
\ohead{}
\cfoot[]{}
\ifoot{}
\ofoot[\pagemark]{\pagemark} % überall Seitenzahl aussen.


\renewcommand{\baselinestretch}{1.15} % Zeilenabstand 1.15fach
\setlength{\parindent}{0pt} %kein Einrücken



%Zwischenraum horizontal \quad 1 cmm Zwischenraum \qquad 2 em Zwischenraum
%Zwischenraum vertikal \vspace*{n mm}

\usepackage[linkcolor=black,citecolor=black,urlcolor=black]{hyperref} %Erzeugt ein Lesenzeichen bzw. eine Dokumentenführung, Ermöglicht das definieren von Dokumenteneigenschaften

\hypersetup{%
colorlinks=true,
pdftitle = {geheim},
pdfsubject = {geheim},
pdfauthor = {geheim},
pdfkeywords = {geheim}}

\begin{document}

\includepdf[pages=1]{PDF/Deckblatt.pdf}
\includepdf[pages=1]{PDF/Sperrvermerk.pdf}

\pagenumbering{Roman} %Seitennummerierung ab hier in römischen Ziffern

\setcounter{page}{1}
{\Large [Aufgabenstellung]}\\

\addcontentsline{toc}{section}{Aufgabenstellung}


\pdfbookmark[1]{\contentsname}{toc}
\tableofcontents %erstellt ein Inhaltsverzeichnis an dieser Stelle
\newpage
\listoffigures %erstellt ein Abbildungsverzeichns an dieser Stelle
\newpage
\listoftables
\newpage
\input{Verzeichnis}
\newpage


\setcounter{page}{1}
\pagenumbering{arabic} %%Seitennummerierung ab hier in arabischen Ziffern


\newpage
\include{Einleitung2}
\include{Stand_der_Technik}

Beispieltabelle:

\begin{table}[h]
\begin{tabularx}{\textwidth}{|X|X|X|X|X|}
\hline \rowcolor{Gray}
\textbf{Tfwefwf} & \textbf{efef} & \textbf{efefZ} & \textbf{ef} & \textbf{TWAIT}\\ \hline
0.1 [s] & 0.1 [s] & 0.5 [s] & 1.0 [s] & 1.0 [s]\\ \hline
\end{tabularx}
\caption{ABX}
\label{tab Entprellzeiten}
\end{table}

Beispielbild

\begin{minipage}{\linewidth}
\begin{center}
\includegraphics[width=\textwidth]{Bilder/Entprellzeiten3}
\captionof{figure}[Position und Häufigkeit der Entprellzeiten der EZLR und TA ]{Position und Häufigkeit der Entprellzeiten der EZLR und TA }
\label{Abb Entprellzeiten}
\end{center}
\end{minipage}\\

\include{Ausgangslage_der_Untersuchungen}
\include{Optimierungsmoeglichkeiten}
\section{Fazit und Ausblick}
\section{Danksagung}
\section{Anhang}


\newpage

%\thispagestyle{plain}



\newpage
\begin{thebibliography}{BREITE}
\bibitem[0]{eigen} eigene/selbsterstellte Abbildungen
\end{thebibliography}

\end{document}

Magger
19-03-2014, 19:38
Ich sehe nur eine Tabelle in deinem Beispiel, das alles andere als minimal ist.

hakaze
19-03-2014, 19:57
Ich tippe mal auf doppelte Label.

Ansonsten versuche deinen Beispielcode noch weiter zu verschlanken. Alle includes und und inputs rausnehmen, etc. Abbildungen kannst du zum Beispiel auch durch
\rule{‹width›}{‹height›} ersetzen.

Ansonsten ist mir noch aufgefallen, dass du fontenc einbindest. Das sollte man bei der Verwendung von Fontspec mit xelatex (http://tex.stackexchange.com/a/3000/17198) nicht machen.

u_fischer
19-03-2014, 20:20
Ansonsten ist mir noch aufgefallen, dass du fontenc einbindest. Das sollte man bei der Verwendung von Fontspec mit xelatex (http://tex.stackexchange.com/a/3000/17198) nicht machen.

Das ist falsch. Man kann ohne Problem fontenc laden (und fontspec tut es sowieso). Man muss nur auf die Reihenfolge achten, damit beim Beginn des Dokuments die korrekte Kodierung aktiv ist. Hier ist [T1]-fontenc wahrscheinlich unnötig, schadet aber überhaupt nicht.

Jürgen
20-03-2014, 08:40
Ich tippe mal auf doppelte Label.

Ansonsten versuche deinen Beispielcode noch weiter zu verschlanken. Alle includes und und inputs rausnehmen, etc. Abbildungen kannst du zum Beispiel auch durch
\rule{‹width›}{‹height›} ersetzen.

Ansonsten ist mir noch aufgefallen, dass du fontenc einbindest. Das sollte man bei der Verwendung von Fontspec mit xelatex (http://tex.stackexchange.com/a/3000/17198) nicht machen.

Es ist kein einziges Label doppelt. Auch keine Caption. Das steht übrigens deutlich auch im Startposting.

Soll ich die includes rausnehmen und das gleiche nochmal posten? ist doch auch quatsch oder?

Ich weiß wirklich nicht woran das liegen kann. Wenn das so bleibt kann ich hyperref vergessen. Lieber gar nicht als falsch.

Das wäre sehr schade.

Jürgen
20-03-2014, 08:49
Mir ist noch was aufgefallen:

Die Bilder und Tabellen werden nicht wahllos falsch verlinkt sondern mtit einem Schema.

Abb. 4.2 springt bpsw zu 3.2, Abb 3.8 zu 2.8.

Es scheint als sei der Kapitelbezug irgendwie falsch. Aber nur zum Hauptkapitel. Der hintere indizie passt.


Meine Kapitel aufteilung ist immergleich:



\section {A} \label {A}
\subsection {A1} \label {subsec: A1}
\subsubsection {A2} \label {subsec: A2}


Die Verlinkung aus dem Inhaltsverzeichnis zu den Kapiteln und Unterkapiteln funktioniert fehlerfrei

Magger
20-03-2014, 12:33
Mach mal bitte ein Minimalbeispiel, das den Fehler reproduzieren kann. Die Betonung liegt auf minimal.

u_fischer
20-03-2014, 12:50
Die Betonung liegt auf minimal.

Bei mir würde die Betonung auf "Beispiel" liegen. D.h. vollständig, auf fremden Computern lauffähig und das Problem demonstrierend. "Minimal" ist höflicher Bonus.

sommerfee
21-03-2014, 07:40
Mir ist noch was aufgefallen:

Die Bilder und Tabellen werden nicht wahllos falsch verlinkt sondern mtit einem Schema.

Abb. 4.2 springt bpsw zu 3.2, Abb 3.8 zu 2.8.

Es scheint als sei der Kapitelbezug irgendwie falsch. Aber nur zum Hauptkapitel. Der hintere indizie passt.

Verschiebe die beiden Zeilen


\counterwithin{figure}{section} %nummeriert Bilder nach ihrern Kapiteln
\counterwithin{table}{section}

nach \usepackage[...]{hyperref}

Hintergrund: Hyperref patcht \counterwithin, d.h. die Reihenfolge muß sein: chngcntr-Paket laden (damit \counterwithin bereitgestellt wird), hyperref-Paket laden (welches \counterwithin modifiziert), erst dann (das modifizierte) \counterwithin anwenden.

Jürgen
21-03-2014, 08:55
Top!

Klappt Alles einbahnfrei!


Was ich bisher verschwiegen habe, da das andere Problem "schlimmer" war und dieses im prinzip nur ein minimaler schönheitsfehler ist:

Wenn ich auf mein erstes kapitel klicke , welches im PDF-dokument die 3 seite ist, wird auf die erste seite verlinkt. Diese und die zweite sind nur eingebundene PDFseiten ( Deckblätter).

Hat jemand da eine Lösung parat?


Allet andere fluppt besstens! Danke vielmals

Jürgen
27-03-2014, 13:46
Hallo,


das Problem mit der verlinkung auf eine eingebundene PDF seite besteht weiterhin.

Heißt ich will bsw. auf die Aufgabenstellung verlinken. Diese ist eine eingebundene PDF-Seite.
Ich habe diese mit



\setcounter{page}{1}
\includepdf[pages=1]{PDF/Aufgabenstellung.pdf}
\phantomsection
\addcontentsline{toc}{Aufgabenstellung}

in das Inhaltsverzeichnis eingebunden.

Dort erscheint sie auch. Die verlinkung geht aber auf seite 2 anstatt auf seite 1.


Jemand ne idee?

hakaze
27-03-2014, 18:28
Du setzt in deinem Beispiel den Anker mit phantomsection erst nach der eingefügten Seite (ergo Seite 2)… also musst du die Reihenfolge ändern:

\phantomsection
\addcontentsline{toc}{Aufgabenstellung}
\includepdf[pages=1]{PDF/Aufgabenstellung.pdf}

Jürgen
28-03-2014, 10:21
Hat geklappt.


Jetzt wird allerdings auf der Seite, wo das PDF eingebunden keine Seitenanzahl angzeigt. Wo drei stehen müsste ist also nichts. Im inhaltsverzeichnis ist auch einfach eine leere stelle anstatt einer Zahl.


der betreffende Code ist:




\addtocounter{page}{-1}
\phantomsection
\addcontentsline{toc}{Aufgabenstellung}
\includepdf[pages=1]{PDF/Aufgabenstellung.pdf}

\setcounter{page}{2}



Die Seite, die Seite 2 sein soll, ist es auch. Nur eben die darüber ist leer anstelle von eins.

Beim ersten kompilieren hat es auch noch gepasst, beim zweiten mal nicht. Latex braucht ja irgendiw mehrere anläufe für solche counter

klops
14-10-2015, 12:11
Hyperref patcht \counterwithin, d.h. die Reihenfolge muß sein: chngcntr-Paket laden (damit \counterwithin bereitgestellt wird), hyperref-Paket laden (welches \counterwithin modifiziert), erst dann (das modifizierte) \counterwithin anwenden.
Nicht ganz. hyperref patcht die LaTeX-Kernanweisung \@addtoreset nicht \counterwithin. \counterwithin wiederum verwendet \@addtoreset. Daher ist es zwar richtig, dass \counterwithin nach dem Laden von hyperref aufgerufen werden muss. Ob man erst chngcntr oder erst hyperref lädt sollte aber egal sein.

Natürlich gilt aber die Regel: hyperref von Ausnahmen abgesehen möglichst als letztes Paket laden. Damit behältst Du also irgendwie doch wieder recht.