如何抑制由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}[][ -- ][.]