Es gibt viele Möglichkeiten, Zeilenumbrüche zu beeinflussen und Überfüllungen bei langen, nicht umbrechbaren Textstücken zu vermeiden. Ich bin verwirrt. Uns wird gesagt, dass die Verwendung von \sloppy
dokumentenweitenist nicht gut, dass eine alternative Lösung zu \sloppy
ist\Notfallstrecke, DasDas Microtype-Paket kann beim Optimieren von Zeilenumbrüchen helfenusw.
Kann jemand die Wirkung aller aufgezählten Befehle erklären?
Mein eigenes Experiment:
\documentclass[12pt]{article}
\usepackage{showframe}
\begin{document}
\fussy
Long made-up words, fussy:
abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl
\sloppy
Long made-up words, sloppy:
abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl
\fussy
Long made-up words, textit, fussy:
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
\sloppy
Long made-up words, textit, sloppy:
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
\fussy
Here is a line with long unbreakable rule, fussy. \rule{3cm}{.2cm} \rule{3cm}{.2cm}
\sloppy
Here is a line with long unbreakable rule, sloppy. \rule{3cm}{.2cm} \rule{3cm}{.2cm}
\fussy
Extreme unbreakable rule, fussy. \rule{8cm}{.2cm} \rule{8cm}{.2cm}
\sloppy
Extreme unbreakable rule, sloppy. \rule{8cm}{.2cm} \rule{8cm}{.2cm}
\end{document}
Wie wir sehen, \sloppy
hilft es, Überfüllungen zu vermeiden, allerdings nicht in Extremfällen:
Antwort1
\sloppy
ist ein Latex-Makro, das
\def\sloppy{%
\tolerance 9999%
\emergencystretch 3em%
\hfuzz .5\p@
\vfuzz\hfuzz}
\fussy
setzt die Werte auf die Latex-Standardwerte zurück
\def\fussy{%
\emergencystretch\z@
\tolerance 200%
\hfuzz .1\p@
\vfuzz\hfuzz}
\tolerance
legt die maximale "Schlechtheit" fest, die Tex beim Setzen des Absatzes verwenden darf, d. h. es fügt Haltepunkte ein, die es ermöglichen, Leerraum zu erweitern und Strafen zu verhängen, solange die Schlechtheit unter diesem Schwellenwert bleibt. Wenn dies nicht möglich ist, erhalten Sie überfüllte Kästchen. Unterschiedliche Werte führen also zu unterschiedlichen Satzergebnissen.
\emergencystretch
(hinzugefügt bei TeX3) wird verwendet, wenn TeX den Absatz nicht unter die \tolerance
Schlechtigkeit setzen kann, aber anstatt überfüllte Kästchen zu erstellen, versucht es einen zusätzlichen Durchgang, bei dem "vorgetäuscht" wird, dass jede Zeile einen zusätzlichen \emergencystretch
dehnbaren Kleber hat. Dadurch kann die Gesamtschlechtigkeit unter 1000 gehalten werden und TeX wird daran gehindert, "aufzugeben" und alle Dehnungen in eine Zeile zu packen. Es \emergencystretch
ändert also nicht die Einstellung der "guten" Absätze, sondern nur die Einstellung der Absätze, die überfüllte Kästchen erzeugt hätten. Beachten Sie, dass Sie Warnungen über dierealDie Schlechtigkeitsberechnung von TeX \emergencystretch
wird zur Steuerung des Schriftsatzes verwendet, obwohl sie mit der zusätzlichen Streckung einen erneuten Versuch unternimmt, für Protokollierungszwecke wird sie jedoch nicht als gut angesehen.
\hfuzz
hat keinerlei Auswirkungen auf den Schriftsatz, sondern verhindert lediglich, dass TeX sich beschwert, wenn das Feld nur geringfügig überfüllt ist.
\hbadness
„wird nicht verwendet, \sloppy
wird aber im letzten Beispiel unten verwendet“ ist ähnlich, es wirkt sich nicht auf den Schriftsatz aus, stoppt aber die TeX-Warnung bezüglich nicht gefüllter Boxen, wenn die Fehlerhaftigkeit unter dem angegebenen Wert liegt.
Das Hauptproblem bei \sloppy
ist die Einstellung von \tolerance
auf 9999, was nahezu unendlich schlecht ist. Dadurch wird der Leerraum nicht gleichmäßig verteilt, sondern einzelne Zeilen des Absatzes werden dazu angeregt, den Leerraum beliebig weit auszudehnen. Dies war ein anerkannter Mangel in TeX und der Grund, warum in TeX3 der neue Parameter \emergencystretch
hinzugefügt wurde. Leider haben wir bei \emergencystretch
der \sloppy
Definition von für LaTeX2e die Einstellung nicht reduziert \tolerance
, sondern bei 9999 belassen, was wahrscheinlich gut für die Kompatibilität mit LaTeX2.09 ist, aber schlecht für alles andere.
Beachten Sie, dass die endgültigen Einstellungen oft eine bessere Einstellung ergeben, wenn Sie nur die Einstellungen ändern \emergencystretch
und überhaupt nichts ändern \tolerance
. Die Einstellungen sind in beiden Fällen gleich, aber \hbadness=10000
die Warnungen werden stummgeschaltet. Nicht jeder würdewollendie endgültige Einstellung, ohne davor gewarnt zu werden, aber in automatischen Satzkontexten, wo eine Änderung der Eingabe nicht möglich ist und Sie keine überfüllten Felder möchten, ist dies eine Möglichkeit.
\documentclass[12pt]{article}
\usepackage{showframe}
\begin{document}
\def\test#1{{#1
\texttt{\detokenize{#1}}
Long made-up words, sloppy:
abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
Long made-up words, textit, sloppy:
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
Here is a line with long unbreakable math, sloppy. ${a+b+c+d a+b+c+d}$ ${a+b+c+d a+b+c+d }$
Extreme unbreakable math, sloppy. ${a+b+c+d+e a+b+c+d+e a+b+c+d+e a+b+c+d+e }$ break ${a+b+c+d+e a+b+c+d+e a+b+c+d+e a+b+c+d+e }$
\nobreak\bigskip\hrule\filbreak}}
\test{}
\test{\sloppy}
\test{\setlength\emergencystretch{\hsize}}
\test{\setlength\emergencystretch{\hsize}\hbadness=10000}
\end{document}