这个问题本质上与我怎样才能将目录放入一页?
“当我使用时,\tableofcontents
除了另一页上的一行之外,我将所有内容都放在一页中,如何才能将所有内容都放在同一页上?”
但是,那里给出的解决方案对我没有帮助,原因如下。目录旁边的页面只有文本(加上一行目录),之后的页面以章节标题开头。目录的最后一行似乎是由 LaTeX 强制在此处出现的,以避免将章节标题放在底部:它更喜欢在目录和文本之间而不是段落之间留一个空格。
有一个优雅的解决方案吗?
答案1
Henrique 的解决方案是将文档中的位置固定下来,并假设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}