
Meu documento tem capítulos e seções. Quando me refiro a seções do mesmo capítulo, escrevo; \ref{section_label}
quando me refiro a seções de um capítulo diferente, escrevo \ref{chapter_label}.\ref{section_label}
. No papel, isso tem o efeito desejado.
Infelizmente, hyperref
produza (é claro) dois links diferentes no lugar de um. Portanto, substitua a última referência por
\hyperref[section_label]{\ref{chapter_label}.\ref{section_label}}
Isto produz o comportamento desejado em alguns visualizadores (Okular, Evince), mas não tem efeito em outros (PDF.js).
Não acho que o 'hack' acima seja um uso correto de hyperref
. Alguma sugestão?
Responder1
Normalmente a formatação é feita por \label
(na verdade \refstepcounter
). Pode-se usar vários rótulos dependendo de como se deseja que a referência seja. Isso usa a mesma \mylabel
macro usadaaqui.
O Hyperref usa seus próprios rótulos que podem ser encontrados usando \getrefbykeydefault
. Além disso, \ref
é protegido (não será expandido até ser impresso), portanto, se quiser usá-lo em uma macro, você precisará usá-lo \getrefnumber
. Consulte o manual de recontagem.
Eu adicionei a solução do egreg para comparação.
\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}