如何才能将目录放入一页?重新审视

如何才能将目录放入一页?重新审视

这个问题本质上与我怎样才能将目录放入一页?

“当我使用时,\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}

相关内容