Was bedeutet \fussy, \sloppy, \emergencystretch, \tolerance, \hbadness?

Was bedeutet \fussy, \sloppy, \emergencystretch, \tolerance, \hbadness?

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 \sloppydokumentenweitenist nicht gut, dass eine alternative Lösung zu \sloppyist\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, \sloppyhilft es, Überfüllungen zu vermeiden, allerdings nicht in Extremfällen: Bildbeschreibung hier eingeben

Antwort1

\sloppyist ein Latex-Makro, das

\def\sloppy{%
  \tolerance 9999%
  \emergencystretch 3em%
  \hfuzz .5\p@
  \vfuzz\hfuzz}

\fussysetzt die Werte auf die Latex-Standardwerte zurück

\def\fussy{%
  \emergencystretch\z@
  \tolerance 200%
  \hfuzz .1\p@
  \vfuzz\hfuzz}

\tolerancelegt 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 \toleranceSchlechtigkeit 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 \emergencystretchwird 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.

\hfuzzhat 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, \sloppywird 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 \sloppyist die Einstellung von \toleranceauf 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 \emergencystretchhinzugefügt wurde. Leider haben wir bei \emergencystretchder \sloppyDefinition 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 \emergencystretchund überhaupt nichts ändern \tolerance. Die Einstellungen sind in beiden Fällen gleich, aber \hbadness=10000die 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.

Bildbeschreibung hier eingeben

\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}

verwandte Informationen