\addpenalty

Aus goLaTeX

\addpenalty ist eine LaTeX-Kern-Anweisung, um in eine vertikale Liste Penalty-Werte einzutragen.

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.