Diese Antwort besteht aus einem mehr oder weniger wörtlichen Zitat aus dem LaTeX Begleiter.
Was bedeuten die Warnungen?
Overfull \hbox (<number>pt too wide) <somewhere>
TeX wurde gezwungen, eine horizontale
Box in einer bestimmten Breite zu
erzeugen (z.B. für eine Zeile in einem
Absatz oder einem \makebox
-Befehl).
Dabei war es nicht möglich, das
vorhandene Material auf die
vorgegebene Breite zu reduzieren,
selbst nachdem der gesamte verfügbare
Freiraum so weit wie möglich gestaucht
worden war. Daher wird das betreffende
Material rechts in den Rand
hineinragen. Meistens ist das recht
auffällig, auch wenn es sich nur um
einen geringen Überlauf handelt.
Dieses Problem muss manuell behoben
werden, da TeX es nicht lösen konnte.
[...]
Underfull \hbox (badness <number>) <somewhere>
TeX war gezwungen, eine horizontale
Box (z.B. für eine Absatzzeile oder
einen \makebox
-Befehl) mit einer
bestimmten Breite zu erzeugen. Dabei
musste der Weißraum in dieser Box über
das vorgegebene Maß hinaus gedehnt
werden. Das heißt, die Dehnung betrug
an den erweiterbaren Abständen mehr
als 100% der verfügbaren
plus
-Zugaben. Intern wird das durch
einen Badness-Grad ausgedrückt. Ein
Grad von 800
bedeutet, dass der
Weißraum auf mehr als das Doppelte des
erlaubten Wertes gedehnt werden
musstre, um die erforderliche Breite
zu erreichen. (Die genaue Formel
lautet min(100r²,10000), wobei r
das Verhältnis von „verwendeter
Dehnung“ zu „verfügbarer Dehnung“ ist.
Wenn [...] unbegrenzt dehnbarer
Abstand vorhanden ist [...], beträgt
der Badness-Grad 0
.)
Ob eine solche unzureichend gefüllte
Box tatsächlich ein merkliches Problem
darstellt, muss man gegebenenfalls im
erzeugten Dokument visuell prüfen. Bei
einem Badness-Grad von 10000
kann
die Box beliebig hässlich aussehen. Da
der TeX-Wert für unendlich mit 10000
recht niedrig liegt, kann es
vorkommen, dass eine einzelne extrem
leere Zeile in Kauf genommen wurde,
obwohl auch mehrere nicht gut
gefüllte, aber doch noch akzeptable
Zeilen möglich gewesen wären. In einem
solchen Fall kann sich der
Längenparameter \emergencystrech
als
hilfreich erweisen.
Ab welchem Badness-Grad eine solche
Warnung erfolgt, wird mithilfe des
ganzzahligen Parameters \hbadness
gesteuert. In LaTeX ist der Wert
1000
voreingestellt, so dass nur vor
wirklich unschönen Boxen gewarnt wird.
Bei einem wichtigen Dokument kann man
durchaus einen anspruchsvolleren Wert
wie etwa \hbadness=10
testen, um zu
sehen, wie viele Zeilen TeX wirklich
als unausgewogen erachtet.
Da die Warnung direkt von TeX erzeugt
wird, meldet sie übrigens immer eine
\hbox
, egal welcher Boxbefehl
tatsächlich im Dokument verwendet
wurde. Der Ort, an dem das Problem
aufgetreten ist, wird mit
<somewhere>
angegeben und kann eine
der folgenden vier Möglichkeiten sein:
detected at line <line number>
: Das Problem ist eine explizit
konstruierte Box (sie endet im
Quelltext in Zeile <line number>
).
es kann sich beispielsweise um einen
\makebox
-befehl mit einem expliziten
Argument für die Breite handeln oder
um einen anderen LaTeX-Befehl, der
Boxen erzeugt.
has occurred while \output is active
: TeX war gerade damit
beschäftigt, eine Seite aufzubauen,
und stieß beim Hinzufügen lebender
Kolumnentitel und ähnlichem auf das
Problem. Da dieser Prozess asynchron
verläuft, wird keine Zeilennummer
genannt. Ein Blick auf die Seite, die
am nächsten lag, als die Warnung
ausgegeben wurde, zeigt, ob hier
manuell korrigiert werden muss.
in alignment at lines <line numbers>
: Die Box gehört zu einer
tabular
- oder einer ausgerichteten
Formelumgebung. Die <line numbers>
geben die Position der gesamten
ausgerichteten Struktur im
Quelldokument an, da TeX zu dem
Zeitpunkt, an dem es auf das Problem
stößt, bereits keine Möglichkeit mehr
hat, dessen Ursprungsort genauer
festzustellen.
in paragraph at lines <line numbers>
: Die „Underfull Box“ ist
eine unausgewogene Zeile im genannten
Absatz (bei den angegebenen <line
numbers>
im Quelldokument). Die
zusätzliche symbolische Anzeige der
fraglichen Zeile sollte dabei helfen,
den genauen Ursprung des Problems
ausfindig zu machen.
Diagnose
Für den Fall, dass TeX Zeilenumbrüche
in einem Absatz nicht in geeigneter
Weise anordnen kann, lässt das
Programm als letztes Mittel ein oder
mehrere „überlaufende“ zeilen zu. Jede
dieser Zeilen erzeugt eine Warnung wie
die folgende [...]:
Open in writeLaTeXOverfull \hbox (6.762pt too wide) in paragraph at lines 4267--4285
/hlhr8t@8.50006pt/Hier wer-den die Text-zei-le und die
Zei-len-num-mern des Ab-sat-zes, der sie enthält,
Hier werden die Textzeile und die
Zeilennummern des Absatzes, der sie
enthält symbolisch dargestellt. Durch
einen Blick auf die symbolische
Darstellung findet man leicht heraus,
dass sich das Problem ergibt, weil TeX
das Wort „enthält“ nicht trennen kann
[Anm: Im Begleiter wird dies
übervolle Box, die diese Warnung
erzeugte, direkt ausgegeben und
erwähnt, dass die Autoren TeX explizit
daran hinderten, „enthält“ zu trennen.
Es wäre dazu sonst durchaus in der
Lage]. Damit solche Zeilen im Dokument
extra gekennzeichnet werden, muss man
den Parameter \overfullrule
auf
einen positiven Wert setzen. [...]
dadurch erzeugt er den schwarzen
Tintenklecks, der die überlaufende
Zeile deutlich hervorhebt. In den
Standarddokumentenklassen lässt sich
dieses Verhalten durch die Option
draft
aktivieren. Andererseits kann
es sein, dass man nur gering
überlaufende Zeilen nicht als störend
ansieht. in diesem Fall kann man den
auf 0.1pt
voreingestellten Parameter
\hfuzz
ändern; es werden nur Zeilen
gemeldet, die um mehr als den Wert
dieses Parameters in den Rand
hineinragen.
Lösungsansätze
Die Wortzwischenräume in bündig
formatierten Absätzen (die Leerräume
zwischen den einzelnen Wörtern) werden
durch verschiedene Parameter
gesteuert. Die wichtigsten davon sind
\tolerance
und \emergencystretch
.
Wenn diese Parameter richtig
eingestellt sind, kann man alle oder
zumindest fast alle „Overfull
box“-Warnungen vermeiden, ohne dass
die Zeilen manuell umbrochen werden
müssen. Der Parameter \tolerance
gibt an, wie stark Wortzwischenräume
in einem Absatz von ihrer optimalen
Größe abweichen dürfen. (Die optimale
Größe ist Font-abhängig.) Dieser
Befehl ist ein TeX-Zähler (kein
LaTeX-Zähler) und hat daher eine etwas
ungewöhnliche Syntax für die
Wertzuweisung, z.B. \tolerance=500
.
Niedrigere Werte führen dazu, dass TeX
nur Lösungen in der Nähe des Optimums
akzeptiert, höhere Werte erlauben
größere Abweichungen beim Setzen.
Voreingestellt ist häufig ein Wert von
200
. Wenn TeX nicht innerhalb der
vorgegebenen Toleranz bleiben kann,
erhält man in der Ausgabe überlaufende
Zeilen [...]. Wenn der Wert für
\tolerance
erhöht wird, zieht TeX
auch ungünstigere Zeilenumbrüche in
Betracht [...].
Hier kann angemerkt werden, dass es diese ungünstigeren Zeilenumbrüche nicht nur dann in Betracht zieht, wenn es keine besseren findet, sondern bereits dann, wenn es für den Absatzumbruch zu Trennungen greifen muss. Ein höherer Wert für \tolerance
kann also auch dann eine Verschlechterung des Umbruchs mit sich bringen, wenn dies gar nicht notwendig wäre.
Wenn man wirklich vollautomatische
Zeilenumbrüche benötigt [...], ist es
besser, den Längenparameter
\emergencystretch
auf einen
positiven Wert zu setzen. Wenn TeX
(aufgrund der Einstellungen für
\tolerance
) einen Absatz nicht
umbrechen kann, ohne dabei
Zeilenüberläufe zu produzieren, und
\emergencystretch
positiv ist, fügt
es diese Länge als dehnbaren Leerraum
jeder Zeile hinzu. Dadurch werden
Zeilenumbrüche akzeptabel, die vorher
verworfen wurden. Das kann zu einigen
„underfull box“-Warnungen [...]
führen, da nun alle Zeilen nach einem
lockereren Maßstab gesetzt werden. Das
Ergebnis sieht aber immer noch besser
aus, als eine einzelne, hässliche
Zeile inmitten eines ansonsten perfekt
gesetzten Absatzes.
Hier kann außerdem angemerkt werden, dass \emergencystretch
wirklich nur dann angewendet wird, wenn der Versuch, den Absatz mit Trennungen korrekt zu umbrechen, gescheitert ist und TeX deshalb einen dritten Anlauf zum Absatzumbruch nimmt. Der Umbruch verschlechtert sich also nur, wenn ohne Anwendung von \emergencystretch
weder ein Umbruch ohne Trennung (und ohne \tolerance
) noch ein Umbruch mit Trennung (und mit \tolerance
) möglich war.
Die oben beschriebenen Parameter
werden in LaTeX durch zwei
vordefinierte Befehle beeinflusst:
durch den voreingestellten Befehl
\fussy
und den Befehl \sloppy
, der
relativ ungünstige Zeilenumbrüche
zulässt. Der Befehl \sloppy
wird von
LaTeX automatisch immer dann
verwendet, wenn perfekte
Zeilenumbrüche aufgrund des engen
Zeilenmaßes unwahrscheinlich sind
(z.B. beim Formatieren von
\marginpar
-Befehlen oder von
p
-Spalten in der Umgebung
tabular
).
Da \sloppy
also \tolerance
auf den recht großzügigen Wert von 9999 setzt, führt auch dessen Verwendung dazu, dass Absätze mit Trennung ggf. schlechter umbrochen werden können als dies unbedingt notwendig ist. Man sollte es daher eher nicht global einsetzen. Für einzelne Absätze steht dazu beispielsweise die Umgebung sloppypar
zur Verfügung.
Bevor man sich an die Änderung der genannten Parameter macht, sollte man übrigens sicherstellen, dass TeX in seinem zweiten Umbruchversuch auch wirklich maximal gut arbeiten kann. Dazu ist es notwendig, dass die richtigen Trennmuster aktiv sind, man also mit Hilfe von babel
oder polyglossia
auch die richtige Sprache eingestellt hat.
Außerdem ist zu beachten, dass Wörter, die zusammengesetzte Zeichen enthalten, vom Trennalgorithmus, also im zweiten Umbruchversuch von TeX, nicht korrekt erkannt und behandelt werden können. Daher ist es sinnvoll entweder LuaLaTeX oder XeTeX zu verwenden oder mit pdfLaTeX ein Fontencoding zu verwenden, das zur Sprache passt, beispielsweise mit \usepackage[T1]{fontenc}
für Deutsch (und alle westlichen Sprachen). Mit dem bei pdfLaTeX voreinstellten OT1
sind sonst bereits die Umlaute zusammengesetzte Zeichen. Man vergleiche beispielsweise die erkannten Trennstellen für das Wort »möglich« bei OT1:
Open in writeLaTeX\showhyphens{m"oglich}
Underfull \hbox (badness 10000) detected at line 0
[] \OT1/cmr/m/n/10 m[]oglich
also keine Trennung, im Vergleich zu T1:
Open in writeLaTeX\showhyphens{m"oglich}
Underfull \hbox (badness 10000) detected at line 0
[] \T1/cmr/m/n/10 mög-lich
also korrekt mit Trennung nach dem »g«.