Como saber o limite de encolhimento da “cola” no TeX?

Como saber o limite de encolhimento da “cola” no TeX?

Na página 69 deO TeXbook, há uma figura: insira a descrição da imagem aqui

Na página 70 deO TeXbook, é diz

A cola nunca encolherá mais do que a capacidade de encolhimento declarada. Por exemplo, a primeira gota de cola na nossa ilustração nunca poderá ficar mais estreita do que 8 unidades de largura, e o TEX nunca encolherá a lista horizontal dada para tornar a sua largura total inferior a 49 unidades.

Como o autor calcula os limites de redução aqui?

Responder1

a redução é especificada em unidades, se você for, \setlength\baselineskip{15pt minus 2pt}a redução é 2pt e o tamanho mínimo é. 13ptTambém pode ser infinito ou unidades fil, por exemplo, é a abreviação defillfilll\vss\vskip 0pt plus 1fil minus 1fil

Responder2

Aqui está um exemplo:

\def\ruleA{\vrule height1pt width45pt depth0pt}
\def\ruleB{\vrule height1pt width30pt depth0pt}
\noindent
\vrule height1pt width100pt depth0pt\par
\hbox to 100pt{\ruleA\hskip 20pt plus 4pt minus 15pt\ruleA} % case 1
\hbox to 100pt{\ruleA\hskip 20pt plus 4pt minus 10pt\ruleA} % case 2
\hbox to 100pt{\ruleA\hskip 20pt plus 4pt minus 3pt \ruleA} % case 3
\hbox to 100pt{\ruleB\hskip 20pt plus 4pt minus 3pt \ruleB} % case 4

\bye

insira a descrição da imagem aqui

Eu defini duas regras (uma largura 45pt e outra 30pt). E juntei as réguas com cola em uma caixa horizontal de 100pt de largura.

  • Nos casos 1-3, a largura total de duas réguas é 90pt, então a cola deve encolher 10pt, já que sua largura natural é 20pt.

    • O caso 1 e o caso 2 podem fazer isso porque sua capacidade de encolhimento é de 15pt e 10pt, respectivamente. Mas
    • Caso 3 não, a largura mínima da cola é 20pt-3pt = 17pt (portanto Overfull \hbox (7.0pt too wide) detected at line 7é gerado um aviso.)
  • No caso 4 a cola é 20pt plus 4pt minus 3pt, o que não significa que a largura máxima da cola seja 24pt. Na verdade, a cola pode esticar arbitrariamente, sempre que tiver um componente de estiramento positivo. E como você pode ver na captura de tela, a largura da última cola é 100pt-30pt*2 = 40pt (a quantidade de estiramento é 20pt > 4pt). E este caso dá um Underfull \hbox (badness 10000)alerta.

Responder3

O primeiro pedaço de cola é space 9 stretch 3 shrink 1, então o mais estreito que pode ser é 9 − 1 = 8. (Você pode pensar que o mais largo é 9 + 3 = 12, mas o texto na página 70 imediatamente após a parte que você citou explica que isso não é verdade e pode se estender ainda mais.)

Somando todas as larguras e espaços, obtemos 5 + 9 + 6 + 9 + 3 + 12 + 8 = 52 como a largura natural; mas se incluirmos também as reduções, obteremos 5 + (9 − 1) + 6 + (9 − 2) + 3 + (12 − ​​0) + 8 = 49 como o mais estreito possível.

Então é assim que 52, 8 e 49 são calculados. (Os outros números são simplesmente tirados da cartola.)

Responder4

insira a descrição da imagem aqui

O código abaixo pode fornecer uma visualização do que está acontecendo. É instrutivo pensar na cola como molas, que podem expandir ou encolher para organizar um conjunto de caixas em outras caixas. No diagrama abaixo eles são representados pelos espaços em branco. Você pode observar que quando a largura da linha é de 35 mm e o TeX está construindo, um parágrafo box4cai em uma segunda linha. Em 49mm ele simplesmente cabe. A figura é renderizada inserindo as caixas em uma tabela. Experimente alterar os valores. Para calcular manualmente todas as colas somam-se o positivo e o negativo, para obter a extensibilidade ou encolhimento.

\documentclass{article}
\usepackage{array,xcolor}
\fboxsep=0pt\fboxrule=0pt
\NewDocumentCommand\Fbox{m m}
{
 \colorbox{cyan}{\hbox to#1{box$_#2$\strut}}
}
\parindent0pt
\setlength\arraycolsep{0pt}
\long\def\maketable#1{\par\leavevmode
\begin{tabular}{l|@{}p{#1}@{}|@{}}
#1 &\Fbox{14mm}{1}\hskip\skipa  
\Fbox{15mm}{2}\hskip\skipb  
\Fbox{8mm}{3}\hskip
\skipc \Fbox{8mm}{4}
\end{tabular}
\smallskip
}
% set the skips
\newskip \skipa
\newskip \skipb
\newskip \skipc
\skipa=0mm plus 3mm minus 1mm
\skipb=0mm plus6mm minus 2mm
\skipc=0mm plus0mm minus 0mm
\begin{document}
%make the tables
\maketable{35mm}
\maketable{49mm}
\maketable{52mm}
\maketable{55mm}
\end{document}

informação relacionada