
O TeXbook descreve (no capítulo 14) em detalhes como o TeX calcula os deméritos totais associados à quebra de um parágrafo em linhas e que o TeX escolhe a sequência de pontos de interrupção que produz o menor número de deméritos totais (em um processo com três passagens). No entanto, descreve apenas brevemente o que exatamente acontece se não existir nenhuma sequência de pontos de interrupção que satisfaça os requisitos:
A grosso modo, \TeX\ quebra parágrafos em linhas da seguinte maneira: Pontos de interrupção são inseridos entre palavras ou após hifens para produzir linhas cujos pontos negativos não excedam o atual ^|\tolerance|. Se não houver como inserir tais pontos de interrupção, uma ^{overfull box} será definida.
Não há mais detalhes sobre o cenário de caixa excessivamente cheia. Estou interessado nestes detalhes: É possível descrever em termos simples quais palavras o TeX escolhe para ficar na margem nesse caso? (Ou você precisa ler o código-fonte do TeX para entender isso?) Como o TeX considera um parágrafo como um todo, o problema de não ter uma sequência permitida de pontos de interrupção não é realmente causado por uma única palavra.
Além disso, acho que a afirmação acima do TeXbook não está totalmente correta: quando um parágrafo contém um \linebreak
, ele pode ser definido com linhas pouco cheias. Este cenário basicamente satisfaz a premissa "não há como inserir tais pontos de interrupção", mas o TeX define linhas insuficientemente preenchidas em vez de linhas excessivamente preenchidas, como mencionado acima.
(Esta questão é principalmente desinteressante. Mas existe de facto um cenário em que um parágrafo com linhas demasiado cheias pode acabar num documento finalizado, nomeadamente se o tamanho excessivo das linhas demasiado cheias não for superior a \hfuzz
.)
Responder1
O TeX escolhe quebras de linha com base em um cálculo de deméritos de linha que são totalizados em um valor chamadodeméritos totais.
Uma primeira passagem que não aplica a capacidade de hifenização do TeX pode falhar em obedecer aos limites definidos por um parâmetro inteiro \pretolerance
. Mas a segunda passagem do TeX sempre dá certo. Pode não ser bem-sucedido no sentido de que o TeX precisa criar linhas muito cheias. Linhas subchegadas só são criadas se o usuário desejar.
O que eu quero dizer. Você pode definir \parfillskip=0pt
e fornecer ao TeX uma linha curta com, digamos, apenas um espaço e relatórios do TeX e linha insuficiente. O autor é sempre responsável pela última quebra de linha; nada é inserido pelo TeX em um parágrafo de uma linha. Da mesma forma, um comando de quebra de linha gerado \penalty-10000
força o TeX a obedecer ao desejo do autor de quebrar a linha neste ponto. É uma quebra forçada, nada que o TeX insere.
Aqui está como o TeX funciona; Tento usar palavras simples, mas é um tópico técnico: o TeX quebra linhas na cola (incluindo no kern seguido de cola e no final da matemática inline seguida de cola) ou com penalidade, ou seja, um hífen no texto, um hífen inserido pelo TeX na segunda passagem, após uma relação no modo matemático, etc., bem como \penalty-10000
como explicado acima.
Claro, o TeX conta o início do texto como o ponto de interrupção inicial. Para criar um parágrafo, o TeX vai de um local onde uma quebra é possível --- na segunda passagem o local pode ser criado pelo TeX através de um hífen inserido --- para o próximo até a largura do material coletado incluindo encolher ou a elasticidade permite que o TeX construa uma linha com uma maldade obedecendo à tolerância atual junto com um dos pontos de interrupção encontrados (ou forçados) anteriormente. O TeX marca esse local como um ponto de interrupção e lembra o ponto de interrupção anterior associado para que possa posteriormente voltar do final do parágrafo ao início com as linhas que minimizam os deméritos totais.
O TeX também cria um ponto de interrupção se vir um usuário inserido \penalty-10000
. Depois inicia o processo como se estivesse no início do parágrafo. Nenhum ponto de interrupção seguinte pode ultrapassar esse ponto de interrupção, ou seja, o próximo ponto de interrupção deve registrar esse ponto de interrupção forçado pelo usuário como o ponto de interrupção anterior.
Se não for encontrado nenhum lugar para construir uma linha com uma maldade no máximo tão grande quanto a tolerância atual, o TeX interrompe o processamento se estiver na primeira passagem e então inicia a segunda passagem. Caso contrário, se o TeX estiver na segunda passagem, ele procurará o próximo local onde uma quebra é possível sem construir uma linha insuficiente. Isso se torna um ponto de interrupção, embora a linha esteja cheia demais. Em seguida, o TeX continua o processo. Assim, a segunda passagem percorre todo o parágrafo. Observe que um parágrafo pode ter mais de uma linha cheia demais.
Se \emergencystretch
não for 0pt e a segunda passagem não puder fazer o que foi solicitado, ou seja, encontrar pontos de interrupção sem uma linha muito cheia ou reduzir o número de linhas if \looseness=-1
, então o TeX inicia uma terceira passagem que funciona como a segunda. A diferença é que o TeX adiciona a dimensão da \emergencystretch
elasticidade de cada linha. Assim, o TeX aceita um local como ponto de interrupção, embora a largura do material coletado e a elasticidade do material não possam preencher a linha com uma maldade menor ou igual à tolerância atual. Mas a largura mais a elasticidade mais a dimensão
\emergencystretch
são grandes o suficiente para fazer isso; visualmente, essa linha está insuficientemente preenchida.
Existem vários parâmetros que influenciam o relatório e a marcação. Como você disse, a \hfuzz
dimensão pode omitir a regra do excesso, mas isso não muda o fato: existe uma linha do excesso. Outro parâmetro chamado \hbadness
é responsável se um aviso for emitido.
Assim, não vejo por que o texto citado do TeXbook está errado, pois é uma descrição informal de alto nível.