Что означает \суетливый, \небрежный, \экстренно растянутый, \терпимость, \плохой?

Что означает \суетливый, \небрежный, \экстренно растянутый, \терпимость, \плохой?

Есть много способов повлиять на перенос строки и избежать переполнения в длинных неразрывных фрагментах текста. Я озадачен. Нам говорят, что использование\sloppy document-wideне хорошо, что альтернативное решение\sloppy является\emergencystretch, чтоПакет microtype может помочь настроить перенос строки т. д.

Может ли кто-нибудь объяснить действие всех перечисленных команд?

Мой собственный эксперимент:

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

Как мы видим, \sloppyпомогает избежать переполнений, но не в крайних случаях: введите описание изображения здесь

решение1

\sloppyэто латексный макрос, который делает

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

\fussyвозвращает значения к значениям по умолчанию для латекса

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

\toleranceустанавливает максимальную "плохость", которую tex разрешено использовать при установке абзаца, то есть он вставляет контрольные точки, позволяя растягивать пробелы и брать штрафы, пока плохость остается ниже этого порога. Если он не может этого сделать, то вы получаете переполненные блоки. Таким образом, разные значения дают разный результат набора.

\emergencystretch(добавлено в TeX3) используется, если TeX не может установить абзац ниже плохого \tolerance, но вместо того, чтобы делать переполненные блоки, он пытается выполнить дополнительный проход, «притворяясь», что каждая строка имеет дополнительный \emergencystretch растягиваемый клей, это позволяет удерживать общее плохое ниже 1000 и не дает TeX «сдаться» и помещать все растягивание в одну строку. Итак\emergencystretch не изменяет настройки «хороших» абзацев, он изменяет только настройки абзацев, которые могли бы создать переполненные блоки. Обратите внимание, что вы получаете предупреждения онастоящийРасчет некачественности от TeX, даже несмотря на то, что он повторяет попытки с \emergencystretchдополнительным растяжением, используется для управления набором текста, но он не считается хорошим для целей регистрации.

\hfuzzникак не влияет на набор текста, а просто прекращает жаловаться TeX, если поле заполнено лишь немного.

\hbadnessне используется, \sloppyно используется в последнем примере ниже. Аналогично, оно не влияет на набор текста, но прекращает выдачу предупреждений TeX о неполных полях, если уровень неисправностей ниже заданного значения.


Основная проблема с \sloppy— это настройка \toleranceна 9999, что почти бесконечно плохо. Это не распределяет пробелы равномерно, а побуждает отдельные строки абзаца растягивать пробелы до произвольно больших величин. Это был признанный недостаток TeX, и поэтому в TeX3 \emergencystretchбыл добавлен новый параметр. К сожалению, при добавлении \emergencystretchto \sloppyпри его определении для LaTeX2e мы не уменьшили настройку \tolerance, а оставили ее на 9999, что, вероятно, хорошо для совместимости с LaTeX2.09, но плохо для всего остального.

Обратите внимание, что окончательные настройки показывают, что часто вы получаете лучшую настройку, просто устанавливая \emergencystretchи не меняя \toleranceвообще, настройка одинакова в обоих случаях, но \hbadness=10000отключает предупреждения. Не всехотетьокончательную настройку без предупреждения об этом, но в контекстах автоматического набора текста, где изменение ввода невозможно и вы никогда не хотите, чтобы поля были переполнены, это возможно.

введите описание изображения здесь

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

Связанный контент