\addpenalty
\addpenalty
ist eine LaTeX-Kern-Anweisung, um in eine vertikale Liste Penalty-Werte einzutragen.
Inhaltsverzeichnis
Verwendung
Syntax
\addpenalty{Wert}
Parameter
{Wert}
-
- Penalty-Wert (eine ganze Zahl) für den Seitenumbruch an dieser Stelle.
Beschreibung
Penalty-Werte sind bei TeX maßgeblich am Absatz- und Seitenumbruch beteiligt. Als Wert sind nur ganze Zahlen zulässig. Mit \addpenalty
können nur Penalty-Werte im vertikalen Modus gesetzt werden. Sie beeinflussen damit den Seitenumbruch. Bei einem Wert von -10000 (oder kleiner) hat ein Seitenumbruch unbedingt zu erfolgen. Bei einem Wert von 10000 oder größer ist der Seitenumbruch absolut verboten. Wird \addpenalty
nach dem Einfügen eines vertikalen Abstandes abgerufen, so wird der Penalty-Wert automatisch vor diesem vertikalen Abstand eingefügt.
Die Anweisung ist in erster Linie für Paketautoren gedacht. Anwender sollten stattdessen \pagebreak
und \nopagebreak
verwenden. Dabei besteht dann auch nicht die Gefahr einer Fehlermeldung, weil die Anweisung versehentlich im horizontalen Modus verwendet wird.
LaTeX selbst macht beispielsweise beim Setzen von Listen mehrfach Gebrauch von \addpenalty
. Die Anweisung kommt aber auch beispielsweise beim Setzen von Überschriften zur Anwendung.
Fehlermeldungen
Wird \addpenalty
im horizontalen Modus aufgerufen, so wird die Fehlermeldung
LaTeX Error: Something's wrong--perhaps a missing \item.
ausgegeben. Diese Fehlermeldung ist etwas verwirrend, falls man sich gar nicht in einer Liste befindet oder lediglich in einer Umgebung, die intern mit Hilfe einer Liste realisiert wurde. Ihr Ursprung ist jedoch, dass LaTeX an der Verwendung von internen \addpenalty
-Anweisungen im horizontalen Modus erkennt, wenn in einer Liste Text ausgegeben wird, bevor ein \item
verwendet wurde, oder eine Liste ohne \item
wieder beendet wurde.
Beispiele
% ACHTUNG: Dieses Beispiel erzeugt zwei Fehlermeldungen uns soll das auch.
\documentclass{article}
\usepackage[ngerman]{babel}
\begin{document}
Test
\begin{enumerate}
\end{enumerate}
Test
\begin{itemize}
Jetzt beginnt die Liste.
\item Holla
\end{itemize}
Test
\end{document}
Beide Fehlermeldungen in dem Beispiel werden durch \addpenalty
ausgelöst. Im ersten Fall wird darüber erkannt, dass die Liste leer ist – was bei LaTeX nicht zulässig ist –, im zweiten Fall wird darüber erkannt, dass vor dem ersten \item
bereits Text ohne zugehöriges \item
steht.
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{mwe}
\begin{document}
\blindtext
\addpenalty{-10000}% \pagebreak oder \newpage oder \clearpage wäre hier besser!
\blindtext
\end{document}
Hier wird ein Seitenumbruch erzwungen. Allerdings wäre es besser, an dieser Stelle \pagebreak
zu verwenden. Im gezeigten Beispiel wäre sogar \newpage
oder \clearpage
vorzuziehen, wie nachfolgendes Beispiel zeigt:
\documentclass[twoside]{article}
\usepackage[ngerman]{babel}
\usepackage{mwe}
\begin{document}
\blindtext
\blindtext
\addpenalty{-10000}% \newpage oder \clearpage wäre hier besser!
\blindtext
\blindtext
\end{document}
Das Auseinanderziehen der Absätze auf der ersten Seite ist durch den vertikalen Ausgleich, der von Option twoside
verursacht wird, und die Tatsache begründet, dass lediglich ein Seitenumbruch aber kein Seitenende erzwungen wird. Die Seiten wird also genauso behandelt, als wäre an dieser Stelle ein natürlicher Seitenumbruch.
Verwandte Befehle
\penalty
, \addvspace
, \pagebreak
, \nopagebreak
, \newpage
, \clearpage
Verweise
Die Anweisung ist in den LaTeX-Quellen in Datei ltspace.dtx definiert und in source2e.pdf dokumentiert.