
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 \mylabel
macro usadaaquí.
Hyperref utiliza sus propias etiquetas que se pueden encontrar usando \getrefbykeydefault
. Además, \ref
está 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}