Раздел и подраздел должны быть вместе в содержании.

Раздел и подраздел должны быть вместе в содержании.

У меня есть длинное ToC, предоставленное пакетом tocloft. Оно достаточно длинное, чтобы переходить на вторую страницу. Тогда у меня получается, что (например) раздел 2 находится в конце первой страницы, а раздел 2.1 — в начале второй страницы.

В идеале я хотел бы сгруппировать разделы и подразделы в ToC так, чтобы если они будут разделены такой страницей, то они просто будут перемещены на новую страницу. Конечным результатом будет то, что первая страница будет заканчиваться разделом 1.X, а вторая страница будет начинаться с раздела 2 (и так далее...).

Есть ли способ это настроить?


MWE, иллюстрирующий эту проблему.

\documentclass{article}
\usepackage{tocloft}

\begin{document}

\tableofcontents
\clearpage

\section{Section 1}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsection{A subsection}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}

\section{A Second Section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}
\subsubsection{A subsubsection}

\section{A Third Section}
\subsection{A subsection}
\subsubsection{A subsubsection}

\end{document}

Иллюстрация MWE

решение1

Вот отрывок со страницы 6 руководства пользователя пакета tocloft:

Вы можете получить нежелательные разрывы страниц в ToC. Например, у вас может быть длинный многострочный заголовок раздела, а в ToC между строками есть разрыв страницы. После того, как ваш документ станет стабильным, вы можете использовать \addtocontentsв соответствующих местах в теле документа, чтобы настроить разрыв страниц в ToC. Вот примеры:

  • \addtocontents{toc}{\protect\newpage}для принудительного разрыва страницы.

  • \addtocontents{toc}{\protect\enlargethispage{2\baselineskip}} чтобы сделать страницу длиннее.

  • \addtocontents{toc}{\protect\needspace{2\baselineskip}}чтобы указать, что если на странице не осталось вертикального пространства в две базовые линии, то следует начать новую страницу. (Макрос \needspaceопределен в needspace пакете.)

Кстати, обратите внимание, что эти советы не зависят от tocloftзагружаемой посылки.

Для вашего документа оптимальным действием будет вставить инструкцию

\addtocontents{toc}{\protect\newpage}

непосредственно перед

\section{A Second Section}

в тексте документа.

Наконец, обратите внимание на квалификатор «после того, как ваш документ станет стабильным». Конечно, не занимайтесь этими операциями тонкой настройки, пока ваш документ не будет в целом практически завершен.

решение2

Другой l̶e̶s̶s̶ ̶h̶a̶c̶k̶y вариант, который не требует финализации настройки вашего документа, — это добавление \nopagebreakпосле заголовков разделов. С помощью tocloftэтого можно сделать через

\renewcommand{\cftsecafterpnum}{\nopagebreak}

(если вы хотите добавить его вручную в отдельный раздел, вам нужно будет добавить \protect\nopagebreak)

В вашем примере это работает так, как задумано:

toc с перерывом в нужном месте

решение3

С помощьюсурок, мне удалось переместить свой заголовок на следующую страницу с помощью простой \enlargethispage{-0.5cm}команды. Это не самое идеальное решение, поскольку оно очень ручное и специфичное для проблемы, но, по крайней мере, оно работает.

Из MWE выше я обменял

\tableofcontents

с

{%
    \enlargethispage{-0.5cm}
    \tableofcontents
}

что дало результат, показанный ниже.

Пример фиксированного ToC

Связанный контент