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 \sloppy
todo el documentono es bueno, que una solución alternativa \sloppy
es\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, \sloppy
ayuda evitar los excesos, pero no en casos extremos:
Respuesta1
\sloppy
es una macro de látex que hace
\def\sloppy{%
\tolerance 9999%
\emergencystretch 3em%
\hfuzz .5\p@
\vfuzz\hfuzz}
\fussy
establece los valores de nuevo a los valores predeterminados de látex
\def\fussy{%
\emergencystretch\z@
\tolerance 200%
\hfuzz .1\p@
\vfuzz\hfuzz}
\tolerance
establece 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 \tolerance
maldad, 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 \emergencystretch
el estiramiento adicional, se usa para controlar la composición tipográfica, pero no se considera bueno para fines de registro.
\hfuzz
no afecta la composición tipográfica de ninguna manera, pero simplemente evita que TeX se queje si la caja está ligeramente llena.
\hbadness
no usado \sloppy
pero 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 \sloppy
es la configuración de \tolerance
9999, 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 \emergencystretch
se agregó el nuevo parámetro. Desafortunadamente, al agregarlo \emergencystretch
al \sloppy
definirlo para LaTeX2e, no reducimos la \tolerance
configuració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 \emergencystretch
y sin cambiar \tolerance
nada, 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.
\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}