У меня есть длинное 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}
решение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
)
В вашем примере это работает так, как задумано:
решение3
С помощьюсурок, мне удалось переместить свой заголовок на следующую страницу с помощью простой \enlargethispage{-0.5cm}
команды. Это не самое идеальное решение, поскольку оно очень ручное и специфичное для проблемы, но, по крайней мере, оно работает.
Из MWE выше я обменял
\tableofcontents
с
{%
\enlargethispage{-0.5cm}
\tableofcontents
}
что дало результат, показанный ниже.