
Mein Inhaltsverzeichnis passt nicht auf eine Seite, zwei Kapitel werden auf eine neue Seite verschoben und der Rest der Seite ist leer. Kann man das irgendwie beheben?
Antwort1
Verwenden vonDasalte Antwort von mir (die das \fitbox
Makro definiert – sein Name sollte selbsterklärend sein) Sie könnten Folgendes tun:
\makeatletter
\let\oldtableofcontents\tableofcontents
\renewcommand\tableofcontents{%
\begingroup
\@fileswfalse
\fitbox\textheight{\oldtableofcontents}
\endgroup
\if@filesw
\expandafter\newwrite\csname tf@toc\endcsname
\immediate\openout \csname tf@toc\endcsname \jobname.toc\relax
\fi
}
\makeatother
Vollständiges Beispiel
\documentclass{article}
\usepackage{lipsum}
\renewcommand{\rmdefault}{ppl}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{fp,graphicx}
\setlength\unitlength{1cm}
\makeatletter
\def\accur@cy{0.999}
\newcommand{\fitbox}[3][\textwidth]{%
\@tempdima#2
\edef\@wd{\strip@pt\dimexpr#1\relax}
\def\r@tio{1}
\@temptokena={\scalebox{\r@tio}{\parbox{\@wd pt}{{#3}}}}
\setbox0=\vbox{\the\@temptokena}
\@tempdimb=\dimexpr\ht0+\dp0\relax
\FPdiv\r@tio{\strip@pt\@tempdima}{\strip@pt\@tempdimb}
\FProot\r@tio{\r@tio}{2}
\FPdiv\@wd{\@wd}{\r@tio}
\fitbox@adjust
\setbox0=\vbox{\the\@temptokena}
\box0
}
\newcommand{\fitbox@adjust}{%
\@tempcnta\z@
\def\rel@rror@rec{0}
\fitbox@adjust@
}
\newcommand{\fitbox@adjust@}{%
\advance\@tempcnta by 1
\ifnum\@tempcnta<10
\FPiflt\rel@rror@rec\accur@cy
\setbox0=\vbox{\the\@temptokena}
\@tempdimb=\dimexpr\ht0+\dp0\relax
\FPdiv\rel@rror@rec{\strip@pt\@tempdimb}{\strip@pt\@tempdima}
\FPdiv\r@tio{\r@tio}{\rel@rror@rec}
\FPmul\@wd{\@wd}{\rel@rror@rec}
\fitbox@adjust@
\fi
\fi
}
\let\oldtableofcontents\tableofcontents
\renewcommand\tableofcontents{%
\begingroup
\@fileswfalse
\fitbox\textheight{\oldtableofcontents}
\endgroup
\if@filesw
\expandafter\newwrite\csname tf@toc\endcsname
\immediate\openout \csname tf@toc\endcsname \jobname.toc\relax
\fi
}
\makeatother
\begin{document}
\tableofcontents
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\section{hello world}
\end{document}
Ausgabe
Vor
Nach
Antwort2
Sie können den Speicherplatz reduzierenVorjeder Kapiteltitel im Inhaltsverzeichnis. Der Standardwert ist 1em
. Verwenden Sie entwedertocloft
\usepackage{tocloft}
\setlength{\cftbeforechapskip}{0.8em}
oder über eineetoolbox
Patch
\usepackage{etoolbox}
\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\l@chapter}{1.0em}{0.8em}{}{}
\makeatother
Hier ist ein Minimalbeispiel:
\documentclass{report}
\usepackage[a5paper]{geometry}
\usepackage{tocloft}
\setlength{\cftbeforechapskip}{0.8em}
\begin{document}
\tableofcontents
\chapter{First chapter}
\chapter{Second chapter}
\chapter{Third chapter}
\chapter{Fourth chapter}
\chapter{Fifth chapter}
\chapter{Sixth chapter}
\chapter{Seventh chapter}
\chapter{Eighth chapter}
\chapter{Ninth chapter}
\chapter{Tenth chapter}
\chapter{Eleventh chapter}
\chapter{Twelfth chapter}
\chapter{Thirteenth chapter}
\chapter{Fourteenth chapter}
\end{document}
Vor dem Update:
Nach dem Update:
Sie können den angepassten Abstand anpassen, damit er zu Ihrem Setup passt. Wenn Sie beispielsweise auch Abschnitte im Inhaltsverzeichnis haben, möchten Sie den Wert von möglicherweise nicht \cftbeforechapskip
ganz so stark anpassen und vielleicht auch anpassen \cftbeforesecskip
.
book
Das obige sollte für beide Dokumentklassen funktionieren report
. Wenn Siememoir
können Sie etwas Ähnliches tun wie das, was tocloft
bietet. Passen Sie in der Präambel Folgendes an \cftbeforechapterskip
:
\documentclass[...]{memoir}
\setlength{\cftbeforechapterskip}{0.8em}% Change to suit your needs...
...
Antwort3
Betrachten Sie dieses MWE, das das Problem reproduziert:
\documentclass[oneside]{book}
\usepackage{tikz,lipsum} % for dummy text loop
\begin{document}
\tableofcontents
\foreach \x in {1,2,...,21} {\chapter{blabla\x} \lipsum[\x]}
\end{document}
Aus Gründen der Konsistenz mit dem Rest des Buches würde ich Änderungen am Layout (Ränder und/oder Abstand um den Titel \enlargethispage{}
usw.) oder die Größenänderung eines Felds mit dem Inhaltsverzeichnis vermeiden, da dies zu einer nicht standardmäßigen Schriftgröße führen könnte (die im Rest des Buches nicht verwendet wird).
Mein Vorschlag ist einfacher: Verwenden Sie eine kleinere Standardschriftart (z. B. \footnotesize
), verringern Sie den Zeilenabstand ein wenig (z. B. \linespread{.85}
) oder mischen Sie beide Ansätze für eine subtilere Stiländerung:
\documentclass[oneside]{book}
\usepackage{tikz,lipsum} % for dummy text loop
\begin{document}
{\linespread{.95}\small\tableofcontents}
\foreach \x in {1,2,...,21} {\chapter{blabla\x} \lipsum[\x]}
\end{document}