将章节文本链接到目录

将章节文本链接到目录

我希望运行文本中的章节标题链接到目录中的“行”,以便获得“双向”导航,例如:用户在目录中查找章节标题,跳转到那里,阅读几行,再次单击章节标题并再次被带到目录中该章节的条目。

有任何想法吗? :)

(有点相关这个问题

答案1

这是另一种方法,使用中的titlesec包和\hypertarget机制。一个小例子展示了、和它们带星号的版本的必要设置:\hyperlinkhyperref\chapter\section\subsection

\documentclass{book}
\usepackage[explicit]{titlesec}
\usepackage{hyperref}

\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries}{\chaptertitlename\ {\fontfamily{cmr}\selectfont\thechapter}}{20pt}{\hyperlink{chap-\thechapter}{\Huge#1}
\addtocontents{toc}{\protect\hypertarget{chap-\thechapter}{}}}
\titleformat{name=\chapter,numberless}
  {\normalfont\huge\bfseries}{}{-20pt}{\Huge#1}
\titleformat{\section}
  {\normalfont\Large\bfseries}{\thesection}{1em}{\hyperlink{sec-\thesection}{#1}
\addtocontents{toc}{\protect\hypertarget{sec-\thesection}{}}}
\titleformat{name=\section,numberless}
  {\normalfont\Large\bfseries}{}{0pt}{#1}
\titleformat{\subsection}
  {\normalfont\large\bfseries}{\thesubsection}{1em}{\hyperlink{subsec-\thesubsection}{#1}
\addtocontents{toc}{\protect\hypertarget{subsec-\thesubsection}{}}}
\titleformat{name=\subsection,numberless}
  {\normalfont\large\bfseries}{\thesubsection}{0pt}{#1}

\begin{document}

\tableofcontents

\chapter{Numbered test chapter one}

\section{Test section one}

\subsection{test subsection one one}

\subsection{test subsection one two}

\chapter*{Unnumbered test chapter one}

\section*{Unnumbered test section}

\subsection*{Unnumbered test subsection}

\end{document}

答案2

此解决方案通过更新命令\hypertargets在中设置。它通过将节标题设置为使用包来链接回。请注意,每个新标题都以单词“toc”开头toc\contentslinetoc\hyperlinkstitlesec\hypertarget

您可以轻松地复制此方法chapters等等。

\documentclass{article}
\usepackage{lipsum} % sample text
\usepackage[explicit]{titlesec} % to change headings
\usepackage{hyperref}

% renew \contentsline for toc to include hypertarget
\let\oldcontentsline\contentsline%
\renewcommand\contentsline[4]{%
\hypertarget{toc#4}{}%
\oldcontentsline{#1}{#2}{#3}{#4}}

% renew \section to link to the toc
\titleformat{\section}
{\normalfont\Large\bf}
{{\thesection} \hyperlink{tocsection.\thesection}{#1}}
{1pc}
{}

% renew \subsection to link to the toc
\titleformat{\subsection}
{\normalfont\bf}
{{\thesection} \hyperlink{tocsubsection.\thesubsection}{#1}}
{1pc}
{}

\begin{document}
\tableofcontents

\clearpage

\section{First section}
\lipsum[1]
\subsection{my sub section}
\lipsum[1]

\section{Second section}
\lipsum[2]

\clearpage

\section{Third section}
\lipsum[3]
\end{document}

解释

请注意,如果您查看.toc上述示例的文件,您将看到以下条目

\contentsline {section}{\numberline {1}First section}{2}{section.1}
\contentsline {subsection}{\numberline {1.1}my sub section}{2}{subsection.1.1}
\contentsline {section}{\numberline {2}Second section}{2}{section.2}
\contentsline {section}{\numberline {3}Third section}{3}{section.3}

需要\contentsline四个参数,其中第四个参数将唯一地标识每个条目。我使用这个唯一条目与字符串“toc”组合作为\hypertarget{toc#4}{};如果没有附加字符串“toc”(或类似字符串),它将无法工作,因为它会导致重复,identifier并且将被忽略。

答案3

我自己写了一个非常简单的例子。

\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}

\let\oldsection\section
\renewcommand\section[1]{%
    \addtocontents{toc}{\protect\hypertarget{#1}{}}
    \oldsection{\texorpdfstring{\protect\hyperlink{#1}{#1}}{#1}}
    } %%

\let\oldsubsection\subsection
\renewcommand\subsection[1]{%
    \addtocontents{toc}{\protect\hypertarget{#1}{}}
    \oldsubsection{\texorpdfstring{\protect\hyperlink{#1}{#1}}{#1}}
    } %%

\begin{document}
{
    \let\section\oldsection
    \pdfbookmark{Contents}{Contents} 
    \vspace*{.5cm}
    \tableofcontents
}
\clearpage

\section{First section}
\lipsum[1]
\subsection{my sub section}
\lipsum[1]

\section{Second section}
\lipsum[2]

\clearpage

\section{Third section}
\lipsum[3]
\end{document}

相关内容