禁止在 titletoc 的 titlecontents* 块中使用分页符

禁止在 titletoc 的 titlecontents* 块中使用分页符

如何抑制由titlesec\titlecontents*命令而不停止小节之间的换行?

以下内容抑制小节内的换行符,但不处理分页符。 在的定义titlesec内部使用\nobreak和,但我不知道必须在哪里添加它们。\addpenalty\ttl@outnoblock

\documentclass{book}
\usepackage{titletoc}
\titlecontents*{subsection}[3.8em]{\filright\itshape\contentsmargin{2em}}%
  {\thecontentslabel.\nobreakspace\mbox}{\mbox}{,\nobreakspace\thecontentspage}[][ -- ][.]

\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{1}

\usepackage[linktocpage]{hyperref}
\usepackage{bookmark}

\begin{document}

\frontmatter

\phantomsection
\addcontentsline{toc}{chapter}{\contentsname}
\tableofcontents

\mainmatter

\chapter{my first chapter}\label{ch:first}
\section{my first section}\label{sec:first}
\addtocontents{toc}{\vspace{11cm}} %for the example
\chapter{my second chapter}
\section{my second section}\label{sec:second}
\subsection{first subsection}
\subsection{second subsection}
\subsection{third subsection}
\subsection{4th subsection}
\subsection{5th subsection}
\subsection{6th subsection}
\subsection{7th subsection}

\end{document}

一般来说,增加惩罚可能比绝对禁止分页更好,但在我的特定情况下,禁止分页可能就足够了。

titletoc如果可能的话,应该保留分页符功能:

如果第一个条目的级别高于第二个条目,则不会在条目之间分页,例如,在章节和子章节之间。如果两个条目的级别相同,则允许分页;如果第一个条目的级别低于第二个条目,则认为这是分页的好位置。

答案1

我不知道这是否万无一失,但它似乎适用于您的示例:

\usepackage{titletoc}
\titlecontents{section}[2.3em]
  {}
  {\filbreak\contentslabel{2.3em}}
  {\hspace*{-2.3em}}
  {\titlerule*[1pc]{.}\contentspage\nobreak}

\titlecontents*{subsection}[3.8em]
  {\filright\itshape\contentsmargin{2em}}
  {\thecontentslabel.\nobreakspace\mbox}{\mbox}
  {,\nobreakspace\thecontentspage}[][ -- ][.]

我们\filbreak粗略地说,除非以下内容之前的内容\filbreak可以留在页面中,否则请中断。

对于章节之后的第一个部分,我们不能发布\filbreak:这是一个草图,可能需要重新定义章节条目。

\newif\iffilchapter
\titlecontents{chapter}[1cm]
  {}
  {\filbreak\global\filchaptertrue\bfseries\contentslabel{1cm}}
  {\hspace*{-1cm}}
  {\titlerule*[1pc]{.}\contentspage\nobreak}

\titlecontents{section}[2.3em]
  {}
  {\iffilchapter\global\filchapterfalse\else\filbreak\fi\contentslabel{2.3em}}
  {\hspace*{-2.3em}}
  {\titlerule*[1pc]{.}\contentspage\nobreak}

\titlecontents*{subsection}[3.8em]
  {\filright\itshape\contentsmargin{2em}}
  {\thecontentslabel.\nobreakspace\mbox}
  {\mbox}
  {,\nobreakspace\thecontentspage}[][ -- ][.]

相关内容