Há muitas maneiras de influenciar a quebra de linha e evitar excessos em trechos de texto longos e inquebráveis. Estou confuso. Somos informados de que o uso \sloppy
de todo o documentonão é bom, que uma solução alternativa \sloppy
é\alongamento de emergência, queO pacote microtype pode ajudar a ajustar a quebra de linhaetc.
Alguém pode explicar o efeito de todos os comandos enumerados?
Meu próprio 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 podemos ver, \sloppy
ajuda a evitar transbordamentos, mas não em casos extremos:
Responder1
\sloppy
é uma macro de látex que faz
\def\sloppy{%
\tolerance 9999%
\emergencystretch 3em%
\hfuzz .5\p@
\vfuzz\hfuzz}
\fussy
define os valores de volta aos padrões do látex
\def\fussy{%
\emergencystretch\z@
\tolerance 200%
\hfuzz .1\p@
\vfuzz\hfuzz}
\tolerance
define a "maldade" máxima que o tex pode usar ao definir o parágrafo, ou seja, ele insere pontos de interrupção permitindo que o espaço em branco seja ampliado e penalidades sejam aplicadas, desde que a maldade se mantenha abaixo desse limite. Se não for possível fazer isso, você terá caixas cheias demais. Portanto, valores diferentes produzem resultados de composição diferentes.
\emergencystretch
(adicionado no TeX3) é usado se o TeX não consegue definir o parágrafo abaixo da \tolerance
maldade, mas em vez de fazer caixas muito cheias ele tenta uma passagem extra "fingindo" que cada linha tem um adicional \emergencystretch
de cola elástica, isso permite que a maldade geral seja mantida abaixo de 1000 e impede o TeX de "desistir" e colocar todo o trecho em uma linha. Portanto, \emergencystretch
não altera a configuração de parágrafos "bons", apenas altera a configuração de parágrafos que teriam produzido caixas cheias demais. Observe que você recebe avisos sobre orealo cálculo de maldade do TeX, embora ele tente novamente com \emergencystretch
o trecho extra, é usado para controlar a composição, mas não é considerado tão bom para fins de registro.
\hfuzz
não afeta a composição de forma alguma, mas apenas impede o TeX de reclamar se a caixa estiver apenas um pouco cheia demais.
\hbadness
não usado, \sloppy
mas usado no exemplo final abaixo` é semelhante, não afeta a composição, mas interrompe o aviso do TeX sobre caixas insuficientemente preenchidas se a maldade estiver abaixo do valor fornecido.
O principal problema \sloppy
é a configuração de \tolerance
9999, que é quase infinitamente ruim. Isso não distribui o espaço em branco uniformemente, mas incentiva as linhas individuais do parágrafo a esticar o espaço em branco para quantidades arbitrariamente grandes. Esta foi uma deficiência reconhecida no TeX e por que no TeX3 o novo parâmetro \emergencystretch
foi adicionado. Infelizmente, ao adicionar \emergencystretch
ao \sloppy
defini-lo para LaTeX2e, não reduzimos a \tolerance
configuração, mas deixamos em 9999, o que provavelmente é bom para compatibilidade com LaTeX2.09, mas ruim para todo o resto.
Observe que as configurações finais mostram que muitas vezes você obtém uma configuração melhor apenas configurando \emergencystretch
e sem alterar \tolerance
nada, a configuração é a mesma em ambos os casos, mas \hbadness=10000
silencia os avisos. Nem todo mundo fariaquerera configuração final sem ser avisado sobre isso, mas em contextos de composição automática onde alterar a entrada não é uma possibilidade e você nunca deseja caixas cheias demais, esta é uma possibilidade.
\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}