Hyperref, índice y subsecciones

Hyperref, índice y subsecciones

Me he encontrado con un problema en el látex que no he podido solucionar. Si bien el paquete hyperref genera enlaces en los que se puede hacer clic en la tabla de contenido, no vincula ninguna subsección a la subsección real sino a la sección en la que se encuentran. ¿Hay alguna forma de cambiar este comportamiento para que se vincule a la subsección misma o a la página en la que se encuentra la subsección?

Después de investigarlo un poco más, parece que es necesario deshabilitar la numeración de secciones y usar el paquete titlesec para que se muestre este problema. A continuación se muestra un ejemplo de este problema:

\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\setcounter{secnumdepth}{0}
\usepackage{titlesec}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}

\begin{document}
\tableofcontents
\chapter{test}

Test text
\newpage
\section{A section}

Lorem Ipsum
\newpage
\subsection{This link is wrong}

\end{document}

Respuesta1

Como está poniendo secnumdeptha cero, no se generan anclajes para los hipervínculos y esto produce el efecto no deseado mencionado; el siguiente código funciona como se esperaba:

\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\usepackage{titlesec}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}

\begin{document}
\tableofcontents
\chapter{test}

Test text
\newpage
\section{A section}

Lorem Ipsum
\newpage
\subsection{This link is correct}

\end{document}

Si desea que todas sus secciones y subsecciones no estén numeradas pero se incluyan en el ToC y aún generen los hipervínculos correctos, una opción sería usar el \phantomsectioncomando para generar los anclajes:

\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\setcounter{secnumdepth}{0}
\usepackage{titlesec}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}

\begin{document}
\tableofcontents
\chapter{test}

Test text
\newpage
\phantomsection
\section{A section}

Lorem Ipsum
\newpage
\phantomsection
\subsection{This link is correct}

\end{document}

Otra opción sería utilizar los paquetes titlesecand titletocpara eliminar la numeración tanto del cuerpo del documento como del ToC:

\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\usepackage{titlesec}
\usepackage{titletoc}

\titleformat{\section}
  {\normalfont\Large\bfseries}{}{1em}{}
\titleformat{\subsection}
  {\normalfont\large\bfseries}{}{1em}{}
\titlecontents{section}
  [1.5em] {}{}{}
  {\titlerule*[1em]{.}\contentspage}
\titlecontents{subsection}
  [3.8em] {}{}{}
  {\titlerule*[1em]{.}\contentspage}

\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}

\begin{document}
\tableofcontents
\chapter{test}

Test text
\newpage
\section{A section}

Lorem Ipsum
\newpage
\subsection{This link is correct}

\end{document}

Otra opción más sería usar las versiones destacadas de las unidades seccionales (es decir, \section*, \subsection*) y usarlas \addcontentslinepara agregar manualmente las entradas al ToC:

\documentclass{report}
\usepackage[linktoc=all]{hyperref}

\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}

\begin{document}
\tableofcontents
\chapter{test}

Test text
\newpage
\section*{A section}
\addcontentsline{toc}{section}{A section}

Lorem Ipsum
\newpage
\subsection*{This link is correct}
\addcontentsline{toc}{subsection}{This link is correct}

\end{document}

información relacionada