
Mein Dokument hat Kapitel und Abschnitte. Wenn ich auf Abschnitte im selben Kapitel verweise, schreibe ich, \ref{section_label}
wenn ich auf Abschnitte in einem anderen Kapitel verweise, schreibe ich \ref{chapter_label}.\ref{section_label}
. Auf dem Papier hat dies den gewünschten Effekt.
Leider hyperref
erzeugen (natürlich) zwei verschiedene Links anstelle von einem. Ersetzen Sie also die letztere Referenz durch
\hyperref[section_label]{\ref{chapter_label}.\ref{section_label}}
Dies erzeugt in einigen Viewern (Okular, Evince) das gewünschte Verhalten, hat jedoch auf andere (PDF.js) keine Auswirkungen.
Ich glaube nicht, dass der obige „Hack“ eine korrekte Verwendung von ist hyperref
. Irgendwelche Vorschläge?
Antwort1
Normalerweise wird die Formatierung durch \label
(eigentlich \refstepcounter
) durchgeführt. Man kann mehrere Beschriftungen verwenden, je nachdem, wie die Referenz aussehen soll. Dies verwendet dasselbe \mylabel
Makro wieHier.
Hyperref verwendet seine eigenen Labels, die mit gefunden werden können \getrefbykeydefault
. Außerdem \ref
ist geschützt (wird erst erweitert, wenn gedruckt wird). Wenn Sie es also in einem Makro verwenden möchten, müssen Sie \getrefnumber
stattdessen verwenden. Siehe Refcount-Handbuch.
Ich habe die Lösung von egreg zum Vergleich eingefügt.
\documentclass{report}
\usepackage{hyperref}
\renewcommand{\thesection}{\arabic{section}}% non-standard definition
\makeatletter
\@ifpackageloaded{hyperref}%
{\newcommand{\mylabel}[2]% #1=name, #2 = contents
{\protected@write\@auxout{}{\string\newlabel{#1}{{#2}{\thepage}%
{\@currentlabelname}{\@currentHref}{}}}}}%
{\newcommand{\mylabel}[2]% #1=name, #2 = contents
{\protected@write\@auxout{}{\string\newlabel{#1}{{#2}{\thepage}}}}}
\makeatother
\newcommand{\getrefanchor}[1]% #1 = label
{\getrefbykeydefault{#1}{anchor}{Doc-Start}}
\begin{document}
One can use \ref*{chapter}.\ref{section}, \ref{mylabel} or
\hyperlink{\getrefanchor{section}}{\getrefnumber{chapter}.\getrefnumber{section}}.
\chapter{chapter}\label{chapter}
\section{dummy}
\section{section}\label{section}\mylabel{mylabel}{\thechapter.\thesection}%
\end{document}