Inhaltsverzeichnis auf eine Seite ausrichten

Inhaltsverzeichnis auf eine Seite ausrichten

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 \fitboxMakro 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

Ausgabe_1

Nach

Ausgabe_2

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 eineetoolboxPatch

\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:

Bildbeschreibung hier eingeben

Nach dem Update:

Bildbeschreibung hier eingeben

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 \cftbeforechapskipganz so stark anpassen und vielleicht auch anpassen \cftbeforesecskip.


bookDas obige sollte für beide Dokumentklassen funktionieren report. Wenn Siememoirkönnen Sie etwas Ähnliches tun wie das, was tocloftbietet. 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}

mwe

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}

Lösung

verwandte Informationen