Qual é o significado de \exigente, \sloppy, \emergencystretch, \tolerance, \hbadness?

Qual é o significado de \exigente, \sloppy, \emergencystretch, \tolerance, \hbadness?

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 \sloppyde 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, \sloppyajuda a evitar transbordamentos, mas não em casos extremos: insira a descrição da imagem aqui

Responder1

\sloppyé uma macro de látex que faz

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

\fussydefine os valores de volta aos padrões do látex

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

\tolerancedefine 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 \tolerancemaldade, 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, \emergencystretchnã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 \emergencystretcho trecho extra, é usado para controlar a composição, mas não é considerado tão bom para fins de registro.

\hfuzznão afeta a composição de forma alguma, mas apenas impede o TeX de reclamar se a caixa estiver apenas um pouco cheia demais.

\hbadnessnão usado, \sloppymas 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 \tolerance9999, 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 \emergencystretchfoi adicionado. Infelizmente, ao adicionar \emergencystretchao \sloppydefini-lo para LaTeX2e, não reduzimos a \toleranceconfiguraçã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 \emergencystretche sem alterar \tolerancenada, a configuração é a mesma em ambos os casos, mas \hbadness=10000silencia 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.

insira a descrição da imagem aqui

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

informação relacionada