防止分页符出现在部分之前和之后

防止分页符出现在部分之前和之后

我正在尝试创建一个链接到目录中的标题页(即单击链接将转到标题页)。它应该看起来像这样:

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

相关内容