¿Cuál es el significado de \quissy, \sloppy, \emergencystretch, \tolerance, \hbadness?

¿Cuál es el significado de \quissy, \sloppy, \emergencystretch, \tolerance, \hbadness?

Hay muchas formas de influir en el salto de línea y evitar el exceso de texto en fragmentos de texto largos e irrompibles. Estoy confundido. Se nos dice que usar \sloppytodo el documentono es bueno, que una solución alternativa \sloppyes\emergenciastretch, esoEl paquete de microtipos puede ayudar a ajustar los saltos de línea.etc.

¿Alguien puede explicar el efecto de todos los comandos enumerados?

Mi propio experimento:

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

Como vemos, \sloppyayuda evitar los excesos, pero no en casos extremos: ingrese la descripción de la imagen aquí

Respuesta1

\sloppyes una macro de látex que hace

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

\fussyestablece los valores de nuevo a los valores predeterminados de látex

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

\toleranceestablece la "maldad" máxima que tex puede usar al configurar el párrafo, es decir, inserta puntos de interrupción que permiten que los espacios en blanco se estiren y se apliquen penalizaciones, siempre que la maldad se mantenga por debajo de este umbral. Si no puede hacer eso, obtendrá cajas demasiado llenas. Por lo tanto, diferentes valores producen diferentes resultados tipográficos.

\emergencystretch(agregado en TeX3) se usa si TeX no puede configurar el párrafo debajo de la \tolerancemaldad, pero en lugar de llenar cajas demasiado, intenta una pasada adicional "pretendiendo" que cada línea tiene un \emergencystretch pegamento elástico adicional, esto permite mantener la maldad general. por debajo de 1000 y evita que TeX "se rinda" y ponga todo el estiramiento en una línea. Entonces\emergencystretch no cambia la configuración de los párrafos "buenos", solo cambia la configuración de los párrafos que habrían producido cuadros demasiado llenos. Tenga en cuenta que recibirá advertencias sobre elrealEl cálculo de maldad de TeX, aunque lo reintenta con \emergencystretchel estiramiento adicional, se usa para controlar la composición tipográfica, pero no se considera bueno para fines de registro.

\hfuzzno afecta la composición tipográfica de ninguna manera, pero simplemente evita que TeX se queje si la caja está ligeramente llena.

\hbadnessno usado \sloppypero usado en el ejemplo final a continuación es similar, no afecta la composición tipográfica pero detiene la advertencia de TeX sobre cuadros insuficientemente llenos si la maldad está por debajo de la cantidad dada.


El principal problema \sloppyes la configuración de \tolerance9999, que es casi infinitamente mala. Eso no distribuye el espacio en blanco de manera uniforme, pero fomenta que las líneas individuales del párrafo estiren el espacio en blanco en cantidades arbitrariamente grandes. Esta fue una deficiencia reconocida en TeX y por qué en TeX3 \emergencystretchse agregó el nuevo parámetro. Desafortunadamente, al agregarlo \emergencystretchal \sloppydefinirlo para LaTeX2e, no reducimos la \toleranceconfiguración, sino que la dejamos en 9999, lo que probablemente sea bueno para la compatibilidad con LaTeX2.09, pero malo para todo lo demás.

Tenga en cuenta que la configuración final muestra que a menudo se obtiene una mejor configuración simplemente configurando \emergencystretchy sin cambiar \tolerancenada, la configuración es la misma en ambos casos, pero\hbadness=10000 silencia las advertencias. No todos lo haríandesearla configuración final sin que se le advierta al respecto, pero en contextos de composición tipográfica automática donde cambiar la entrada no es una posibilidad y nunca desea que los cuadros estén demasiado llenos, esta es una posibilidad.

ingrese la descripción de la imagen aquí

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

información relacionada