我正在尝试创建一个链接到目录中的标题页(即单击链接将转到标题页)。它应该看起来像这样:
\documentclass[oneside]{scrbook}
\usepackage{hyperref}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\begin{titlepage}
There's some text up here!
\vfill
\vfill
\begin{center}
\addcontentsline{toc}{chapter}{My Part}
\Huge\bfseries My Part % (*)
\end{center}
\vfill
\vfill
\vfill
And there's more text down here!
\end{titlepage}
\end{document}
不幸的是,当您单击目录中的链接时,您会发现自己位于我的标题页上方一页。
为了正确实现我的目标,我决定使用部分分段命令。因此,让我们将我标记为 (*) 的行替换为\addpart{My Part}
。不幸的是,您会注意到页面断裂了。
我该怎么做才能防止这种情况发生?我知道您可以通过重新定义\partformat
或使用来更改 KOMA-Script 类中的字体\addtokomafont{part}{...}
。是否有类似的命令来控制分页符?
答案1
这看起来像XY问题。
不需要任何\addpart
命令 - 如果您希望 hypperref 链接到特定页面,只需\phantomsection
在文档中的正确位置插入即可。这将充当超链接的锚点。
在这种情况下,将其放在之前\addcontentsline
。
示范:
\documentclass[oneside]{scrbook}
\usepackage{hyperref}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\begin{titlepage}
There's some text up here!
\vfill
\vfill
\begin{center}
\phantomsection % <---- added - this will make sure the hyperlink points to the right place
\addcontentsline{toc}{chapter}{My Part}
\Huge\bfseries My Part % (*)
\end{center}
\vfill
\vfill
\vfill
And there's more text down here!
\end{titlepage}
\end{document}
有关详细信息,请参阅我什么时候需要调用 \phantomsection?
答案2
我找到了以下答案:
https://tex.stackexchange.com/a/474328/175332
您可以通过将新页面放入组中来“让其放松”一会儿,这样就不会发生分页符。
\documentclass[oneside]{scrbook}
\usepackage{hyperref}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\begin{titlepage}
There's some text up here!
\vfill
\vfill
\begin{center}
% \Huge\bfseries My Part % (*)
\begingroup
\let\clearpage\relax
\let\newpage\relax
\addpart{My Part}
\endgroup
\end{center}
\vfill
\vfill
\vfill
And there's more text down here!
\end{titlepage}
\end{document}
请注意,目录中的链接现在如何完美运行!
当然,这似乎不是一个非常干净的解决方案......但如果没有更好的办法,我愿意接受它。
答案3
这使用小页面而不是标题页。 \pageanchor
导致目录链接到页面顶部而不是的位置\refstepcounter
。
\documentclass[oneside]{scrbook}
\usepackage{hyperref}
\usepackage{blindtext}
\makeatletter
\newcommand{\pageanchor}{\edef\@currentHref{page.\arabic{page}}}
\makeatother
\begin{document}
\tableofcontents
\blinddocument
\clearpage
\thispagestyle{plain}% or empty
\markboth{}{}%
\refstepcounter{part}% position on page usually matters
\pageanchor% to link to top of page
\addcontentsline{toc}{part}{My Part}% use \numberine{\thepart} to add part number.
\noindent\begin{minipage}[t][\textheight][s]{\textwidth}
There's some text up here!
\vfill
\vfill
\begin{center}
\Huge\bfseries My Part % (*)
\end{center}
\vfill
\vfill
\vfill
And there's more text down here!
\end{minipage}
\end{document}