我希望运行文本中的章节标题链接到目录中的“行”,以便获得“双向”导航,例如:用户在目录中查找章节标题,跳转到那里,阅读几行,再次单击章节标题并再次被带到目录中该章节的条目。
有任何想法吗? :)
(有点相关这个问题)
答案1
这是另一种方法,使用中的titlesec
包和\hypertarget
机制。一个小例子展示了、和它们带星号的版本的必要设置:\hyperlink
hyperref
\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
\contentsline
toc
\hyperlinks
titlesec
\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}