cambiar el enlace predeterminado de \ref{} en hiperref

cambiar el enlace predeterminado de \ref{} en hiperref

Mi documento tiene capítulos y secciones. Cuando me refiero a secciones de un mismo capítulo, escribo. \ref{section_label}Cuando me refiero a secciones de un capítulo diferente, escribo \ref{chapter_label}.\ref{section_label}. Sobre el papel esto tiene el efecto deseado.

Desafortunadamente,hyperref produzca (por supuesto) dos enlaces diferentes en lugar de uno. Así que reemplace la última referencia con

\hyperref[section_label]{\ref{chapter_label}.\ref{section_label}}

Esto produce el comportamiento deseado en algún visor (Okular, Evince) pero no tiene ningún efecto en otros (PDF.js).

No creo que el 'truco' anterior sea un uso correcto de hyperref. ¿Cualquier sugerencia?

Respuesta1

Normalmente el formateo se realiza mediante\label (en realidad \refstepcounter). Se podrían usar varias etiquetas dependiendo de cómo se quisiera que se viera la referencia. Esto usa la misma \mylabelmacro usadaaquí.

Hyperref utiliza sus propias etiquetas que se pueden encontrar usando \getrefbykeydefault. Además, \refestá protegido (no se expandirá hasta que se imprima), por lo que si desea usarlo en una macro, debe usar\getrefnumber en su lugar. Ver manual de recuento.

Agregué la solución de egreg para comparar.

\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}

información relacionada