Hyperref, Inhaltsverzeichnis und Unterabschnitte

Hyperref, Inhaltsverzeichnis und Unterabschnitte

Ich bin auf ein Problem in Latex gestoßen, das ich nicht lösen konnte. Während das Hyperref-Paket anklickbare Links im Inhaltsverzeichnis generiert, verknüpft es keinen Unterabschnitt mit dem tatsächlichen Unterabschnitt, sondern mit dem Abschnitt, unter dem er sich befindet. Gibt es eine Möglichkeit, dieses Verhalten so zu ändern, dass es entweder mit dem Unterabschnitt selbst oder mit der Seite verknüpft, auf der sich der Unterabschnitt befindet?

Nach genauerer Betrachtung scheint es erforderlich zu sein, die Abschnittsnummerierung zu deaktivieren und das Paket „titlesec“ zu verwenden, damit dieses Problem angezeigt wird. Nachfolgend sehen Sie ein Beispiel für dieses Problem:

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

Antwort1

Da Sie auf Null setzen secnumdepth, werden keine Anker für die Hyperlinks generiert und es kommt zu dem erwähnten unerwünschten Effekt; folgender Code funktioniert wie erwartet:

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

Wenn Sie alle Abschnitte und Unterabschnitte unnummeriert lassen, aber in das Inhaltsverzeichnis aufnehmen und trotzdem die richtigen Hyperlinks generieren möchten, besteht eine Möglichkeit darin, den folgenden \phantomsectionBefehl zum Generieren der Anker zu verwenden:

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

Eine andere Möglichkeit wäre, die Pakete titlesecund zu verwenden titletoc, um die Nummerierung sowohl aus dem Dokumenttext als auch aus dem Inhaltsverzeichnis zu entfernen:

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

Eine weitere Möglichkeit besteht darin, die mit Sternchen versehenen Versionen der Abschnittseinheiten (d. h. \section*, \subsection*) zu verwenden und \addcontentslinedie Einträge manuell zum Inhaltsverzeichnis hinzuzufügen:

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

verwandte Informationen