
Problem
Gibt es in TeX/LaTeX eine Möglichkeit, die Nachteile, die durch den Abstand einer Zeile zur Zielhöhe einer Seite entstehen, irgendwie zu verringern?
Kontext
Ich erstelle eine Dokumentklasse für meine Studenten, die LaTeX statt MS Word verwenden, um die Erstellung portabler Dokumente zu automatisieren. Von den Studenten wird erwartet, dass sie überhaupt keine Erfahrung mit LaTeX haben, daher möchte ich in meinem LaTeX-Kurs so viele Sonderfälle wie möglich automatisch behandeln.
Gleichzeitig stellt meine Institution Anforderungen an die Dokumenttypen, die ich abdecken möchte, was Schriftart, Abstände, Ausrichtungen usw. betrifft. Es ist jedoch zulässig, dass die unteren Seitenränder in einem Dokument etwas inkonsistent sind.
Insbesondere ist es erforderlich, dass in den Arbeiten spezielle Schriftarten der Größe 14pt mit einem Zeilenabstand von 1,5 verwendet werden. Daher xelatex
wird es für die Kompilierung verwendet, und, was noch wichtiger ist, die durch den vertikalen Abstand einer Zeile vom unteren Seitenrand bedingte Unzulänglichkeit wächst viel schneller als in gewöhnlichen TeX/LaTeX-Dokumenten.
Das folgende MWE reproduziert das Problem (mit pdflatex
auch):
\documentclass{book}
\renewcommand{\section}[1]{\ifhmode\par\fi\addvspace{0.5em}\textbf{#1}\par
\penalty201\addvspace{0.5em}}
\renewcommand{\subsection}[1]{\ifhmode\par\fi\addvspace{0.5em}\textbf{\textit{#1}}\par\penalty301}
\begin{document}
\parskip=1em\raggedbottom
\tracingonline=1\tracingpages=1
1\par2\par3\par4\par5\par6\par7\par8\par9\par10\par11\par12\par13\par14\par
15\par16\par17\par18\par19\par20\par21\par22
\section{Section 1}\section{Section 2}\subsection{Subsection}
\par23
\end{document}
was zu folgendem Ergebnis führt (hier habe ich zur besseren Lesbarkeit das Bild künstlich zugeschnitten und die Seitenränder verkleinert):
Das Umpausen der Seiten ergibt (den Teil zwischen den Seiten):
% t=472.0 g=550.0 b=10000 p=0 c=100000#
% t=499.0 g=550.0 b=10000 p=201 c=100000#
% t=526.0 g=550.0 b=10000 p=201 c=100000#
% t=553.0 g=550.0 b=* p=301 c=*
[1]
%% goal height=550.0, max depth=5.0
% t=10.0 g=550.0 b=10000 p=301 c=100000#
% t=32.0 g=550.0 b=10000 p=0 c=100000#
In diesem Beispiel möchte ich, dass Abschnitt 2 auf derselben Seite steht wie der Unterabschnitt, und ich möchte, dass der Unterabschnitt unter Berücksichtigung der umgebenden Strafen auf derselben Seite steht wie Absatz „23“.
Ich weiß, ich könnte nach einem Abschnittstitel einfach „unendlich schlecht“ zuweisen \penalty 10000
, aber das würde ein weiteres Problem mit sich bringen. Mir scheint, dass es üblich ist, dass Leute zuerst eine Inhaltsstruktur definieren, indem sie leere Kapitel/Abschnitte/Unterabschnitte usw. einfügen, und dann den eigentlichen Inhalt ausfüllen. Bei einer unendlichen Strafe wären alle diese Abschnitte auf derselben Seite und würden über den Seitenrand hinaus platziert. Und das ist es, was \@startsection
passiert.
Das heißt, ich hätte gerne die Möglichkeit eines Seitenumbruchs zwischen Abschnitt 1 und Abschnitt 2 im MWE, allerdings mit einer Strafe.
Die einzige Möglichkeit, diese Ziele zu erreichen, die ich gefunden habe, ist, mit \parskip
Dehnung (5em im echten Beispiel) und Schrumpfung herumzuspielen. Dies scheint jedoch keine zuverlässige Lösung zu sein, es könnte zu Verstößen gegen die Anforderungen der Institution führen und ich habe gehört, dass dies in der Typografie im Allgemeinen unerwünscht ist. Daher würde ich den unteren Rand lieber dehnbar machen, ohne die Schlechtigkeit unendlich zu machen, um Strafen zu berücksichtigen, und meine Frage bezieht sich auf die Möglichkeit, dies in einer LaTeX-Klasse zu tun.
Ich habe auch versucht, \raggedbottom
und \def\@textbottom{...}
dafür zu verwenden, aber sie haben keinerlei Einfluss auf die Qualität/Kosten von Seitenumbrüchen. Ich habe die resultierenden PDFs mit dem diff-pdf
Tool verglichen, das Platzieren dieser Makros macht überhaupt keinen Unterschied.