Hyperref、目录和子节

Hyperref、目录和子节

我在 latex 中遇到了一个无法解决的问题。虽然 hyperref 包会在目录中生成可点击的链接,但它不会将任何子节链接到实际的子节,而是链接到它们所在的节。有没有办法改变这种行为,使其链接到子节本身或子节所在的页面?

经过进一步研究,似乎需要禁用节编号并使用 titlesec 包才能显示此问题。以下是此问题的一个示例:

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

答案1

由于您将其设置secnumdepth为零,因此不会为超链接生成任何锚点,从而产生上述不良效果;以下代码按预期工作:

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

如果您希望所有章节和小节不编号但包含在目录中,并且仍生成正确的超链接,则一种选择是使用该\phantomsection命令生成锚点:

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

另一种选择是使用titlesectitletoc包从文档主体和目录中删除编号:

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

另一个选择是使用带星号的版本部分单位(即,\section*\subsection*,并使用\addcontentsline手动将条目添加到目录中:

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

相关内容