PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inhalte verlinken mit hyperref?



Julian
16-11-2011, 14:57
Hallo,
derzeit versuche ich Inhalte in meinem LaTeX-Dokument zu verlinken (im PDF-Resultat). Eine saubere und funktionierende Lösung habe ich bisher nicht finden können.

Im Verlauf des Dokumentes sollen Anker (HTML-Analogie) angelegt werden können, die einen tag und ein label besitzen.
\anker{tag}{label}
Bsp: \anker{anker:hinweis5}{Hinweis Nummer 5}

Später soll man sich mit dem tag auf diese Anker beziehen können und das label wird in den Text eingefügt:
\link{tag}
Bsp: siehe \link{anker:hinweis5} ... (führt zu verlinktem "Hinweis Nummer 5")

Mit hypertarget+hyperlink aus dem hyperref-Paket bekommt man immerhin die Verlinkung hin, aber man trägt an beiden Stellen das label manuell ein. Außerdem habe ich das Problem, dass mit dem Link zwar zum Anker gesprungen wird, man aber leider eine Zeile zu tief rauskommt, also die relevante Zeile nicht mehr dargestellt wird.

Gibt es eine Lösung für das o.g. Problem bzw. für mein Vorhaben?

Schweinebacke
16-11-2011, 16:21
Mit hypertarget+hyperlink aus dem hyperref-Paket bekommt man immerhin die Verlinkung hin, aber man trägt an beiden Stellen das label manuell ein.
Machst Du das bei Deinem rudimentären Beispiel nicht ebenfalls?


Außerdem habe ich das Problem, dass mit dem Link zwar zum Anker gesprungen wird, man aber leider eine Zeile zu tief rauskommt, also die relevante Zeile nicht mehr dargestellt wird.
Beispiel?

Am einfachsten geht die Verlinkung übrigens mit \label/\ref und ggf. \phantomsection.


Gibt es eine Lösung für das o.g. Problem bzw. für mein Vorhaben?
Vielleicht solltest Du mal ein vollständiges Minimalbeispiel (http://www.mrunix.de/forums/showthread.php?t=66921) machen, das die Probleme zeigt, die Du mit hyperref hast.

Julian
18-11-2011, 16:32
Minimalbeispiel:
\documentclass[a4paper,12pt,oneside]{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{hyperref}

\begin{document}
\blindtext \\
Ziel: \hypertarget{link:tag}{label}\\
\blindtext[5] \\
Link: \hyperlink{link:tag}{label}
\end{document}

Der Acrobat Reader oder auch SumatraPDF springen nach einem Klick auf den Link zu der Stelle von hypertarget, aber besagte Zeile ist nicht mehr im sichtbaren Ausschnitt. Zudem würde ich gerne, wie oben erwähnt, das label nur beim Ziel setzen und beim Link sollte das label automatisch eingefügt werden.
Ziel der Sache:
Ich habe eine Tabelle, wo jede Zeile eine Nummer bekommt. In dem darauf folgenden Text soll man sich auf bestimmte Zeilen beziehen können. Das soll dann bspw. so aussehen: "laut Anforderung #Nummer wird ..." und #Nummer soll ein Link zu der dazugehörigen Zeile in der Tabelle sein.

\begin{tabular} usw.
\hypertarget{link:tag1}{\texttt{0815}} & [...] \\\hline
\hypertarget{link:tag2}{\texttt{4711}} & [...] \\\hline
\end{tabular}

laut Anforderung \hyperlink{link:tag1} wird ... %funktioniert so natürlich nicht

Gibt es vielleicht Befehle/Pakete mit denen das o.g. möglich ist?

u_fischer
18-11-2011, 17:24
\documentclass[a4paper,12pt,oneside]{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{hyperref}
\makeatletter
\newcommand\mylabel[1]{%
\def\@currentlabel{#1}\phantomsection\label{mylabe l-#1}\textbf{#1}}
\newcommand\myref[1]{\textbf{\ref{mylabel-#1}}}
\begin{document}
\blindtext \\
Ziel: \mylabel{1234}\\
\blindtext[5] \\
Link: \myref{1234}
\end{document}

(Wenn die Labeltexte nicht einfache Nummern sind, solltest du ggfs. zwei Argumente benutzen).

Julian
18-11-2011, 17:38
Wow!
Das funktioniert wirklich prima, vielen Dank! :)

Ich habe es noch um das zweite Label erweitert und so funktioniert es genau wie ich es brauche.


\documentclass[a4paper,12pt,oneside]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{hyperref}
\makeatletter
\newcommand\mylabel[2]{%
\def\@currentlabel{#2}\phantomsection\label{mylabe l:#1}\texttt{#2}}
\newcommand\myref[1]{\texttt{\ref{mylabel:#1}}}
\begin{document}
\blindtext \\
Ziel: \mylabel{1234}{angezeigter Text: Nummer oder was auch immer}\\
\blindtext[5] \\
Link: \myref{1234}
\end{document}