この質問は本質的には目次を 1 ページに収めるにはどうすればよいですか?
\tableofcontents
「他のページに移動する行を除いて、すべてのコンテンツが 1 ページに収まるようにするには、どうすればすべてを同じページに表示できますか?」
しかし、そこで示されている解決策は、次の理由で役に立ちません。ToC の次のページはテキストのみ (ToC の 1 行を含む) で、その次のページはセクション タイトルで始まります。セクション タイトルが下部に表示されるのを避けるために、LaTeX によって ToC の最後の行が強制されているようです。段落間ではなく、ToC とテキストの間にスペースを入れることを優先します。
これに対するエレガントな解決策はあるでしょうか?
答え1
Henrique のソリューションは、ドキュメント内の位置に固定されており、toc
ページが 1 つだけであると想定しています。別のソリューションを次に示します。
\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の最初の回答に続いて目次を 1 ページに収めるにはどうすればよいですか?\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}