Этот вопрос по сути тот же самый, что иКак разместить оглавление на одной странице?
«Когда я использую, \tableofcontents
я размещаю все свое содержимое на одной странице, за исключением строки, которая находится на другой странице. Как мне разместить все на одной странице?»
Однако решение, приведенное там, мне не помогает по следующей причине. Страница рядом с ToC — это только текст (плюс одна строка ToC), страница после нее начинается с заголовка раздела. Последняя строка ToC, похоже, вставлена сюда LaTeX, чтобы избежать попадания заголовка раздела в конец: он предпочитает ставить пробел между ToC и текстом, а не между абзацами.
Есть ли элегантное решение этой проблемы?
решение1
Решение Энрике жестко привязано к позиции в документе и предполагает, что toc
будет только одна страница. Вот еще одно решение.
\documentclass[12pt,a6paper]{article}
\usepackage{blindtext}
\makeatletter
\def\enlargetocpage{%
\begingroup
\@ifstar{\def\x{*}\@enlargetocpage}{\def\x{}\@enlargetocpage}%
}
\def\@enlargetocpage#1{%
\toks@{#1}%
\protected@edef\x{%
\endgroup\noexpand\AtEndDocument{\noexpand\addtocontents{toc}%
{\protect\enlargethispage\x{\the\toks@}}}%
}\x
}
\makeatother
\enlargetocpage*{\baselineskip}
\begin{document}
\tableofcontents
\blindtext
\section{A section}
\subsection{And a subsection}
\blindtext
\blinddocument
\blinddocument
\blinddocument
\end{document}
решение2
После первого ответа @lockstep наКак разместить оглавление на одной странице?, мне удалось добиться того, чего вы ожидаете, добавив \addtocontents{toc}{\protect\enlargethispage{\baselineskip}}
сразупослезаголовок первого разделаВот MWE:
\documentclass[12pt,a6paper]{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blindtext
\section{A section}
\addtocontents{toc}{\protect\enlargethispage{\baselineskip}}
\subsection{And a subsection}
\blindtext
\blinddocument
\blinddocument
\blinddocument
\end{document}