Quando eu corro
\documentclass{article}
\begin{document}
Aaaaaa aaaaa aajcaaaaaa $a:A_{aa}\to a_a$a$\ge$ aaaaaaaaaaaaaaaaaaaaaa
$a_a\dots\to$
\end{document}
a saída da compilação contém a seguinte linha:
LaTeX-Result: 1 Error(s), 0 Warning(s), 1 Bad Box(es), 1 Page(s)
Quando clico em Próximo erro, ele aponta na saída do build para a linha que começa com! no parágrafo seguinte:
Overfull \hbox (1.65294pt too wide) in paragraph at lines 3--4
[]\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $\OML/cmm/m/it/10 a \OT1/cmr/m/n/10 : \OML/cmm/m/it/10 A[] \OMS/cmsy/m/n/10
! \OML/cmm/m/it/10 a[]$\OT1/cmr/m/n/10 a$\OMS/cmsy/m/n/10 $ \OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $\OML/cmm/m/it/10 a[
] [] \OMS/cmsy/m/n/10 !$
[]
Procurando esse erro, vejo que algo semelhante aparece com as fontes, mas o código do erro é um pouco diferente.
Meu palpite é que tem algo a ver com o $\to$ no final sendo estourado, mas isso não é tudo porque posso mover algumas das letras sem alterar o tamanho da caixa ruim para remover o erro.
Alguém pode me dizer qual é a causa desse erro?
ATUALIZAÇÃO: De acordo com um dos comentários, pode depender de qual programa está sendo utilizado. Recebi esse erro no TeXnicCenter, e esse código de erro também aparece nolatexbase. commas não é relatado como um erro.
Responder1
Resposta curta: Este é um aviso, mas seu editor (TeXnicCenter) confundiu-o com um erro. Segue uma resposta mais longa.
(Uma pergunta anterior“Erro ininteligível após digitar uma única letra”cobre isso, mas achei que valia a pena entrar em mais detalhes, então tente novamente.)
Índice
- Por que a saída é tratada como um erro (e como corrigir isso)
- Como fazer com que essa saída desapareça (corrigindo o aviso)
- O que a saída significa
1. Por que a saída é tratada como um erro
Há três coisas que conspiram aqui para confundir seu editor:
TeX imprime mensagens de erro em uma nova linha, começando com
!␣
(a!
seguido por um espaço; apenas usando␣
para denotar um espaço porque caso contrário não será visível aqui). (Aliás, isso não está realmente documentado emO TeXbook—Acho que Knuth não queria especificar detalhes da interação do usuário e esperava que eles mudassem com a implementação do TeX — mas veja os exemplos nos Capítulos 6 e 27, e tambémParte 6 “Relatando Erros” §73 emTeX: O Programa.)Quando o TeX é forçado a compor uma caixa cheia demais, ele imprime um diagnóstico mostrando a caixa que estava cheia demais. (Da mesma forma com caixas apertadas, etc.) Este diagnóstico pode conter coisas como
!
, dependendo dos caracteres que ocorrem dentro da caixa e das fontes utilizadas.O TeX agrupa as linhas de saída por padrão, em width
max_print_line
. Nesse caso, parece que seu ambiente TeX foi configurado para agrupar linhas de saída de erro com exatamente 120 caracteres, e como resultado uma das linhas (coincidentemente) começa com!
. Você pode alterar esta quebra de linhaconforme descrito na outra resposta, ou simplesmente invocando o TeX com um valor maiormax_print_line
no ambiente shell, comomax_print_line=1000 pdflatex ...
).
Como uma combinação desses fatores, temos um diagnóstico de caixa superlotada impresso, agrupado em 120 caracteres e interpretado erroneamente pelo seu editor como um erro.
Se você aumentar a largura da quebra de linha (por exemplo, max_print_line=10000
), evitará essa confusão e obterá uma saída como esta, com a caixa cheia demais exibida inteiramente em uma linha (e nenhuma linha começando com a !
):
Overfull \hbox (1.65294pt too wide) in paragraph at lines 3--5
[]\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $\OML/cmm/m/it/10 a \OT1/cmr/m/n/10 : \OML/cmm/m/it/10 A[] \OMS/cmsy/m/n/10 ! \OML/cmm/m/it/10 a[]$\OT1/cmr/m/n/10 a$\OMS/cmsy/m/n/10 ^^U$ \OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $\OML/cmm/m/it/10 a[] [] \OMS/cmsy/m/n/10 !$
2. Como fazer com que a saída desapareça
A saída (aviso) é sobre uma caixa cheia demais, o que significa uma linha saindo um pouco mais do que deveria. Quanto mais? Podemos ver isso visualmente adicionando um parágrafo de texto próximo a ele:
Você consegue perceber que a seta se destaca mais do que as linhas de texto acima? Talvez com isso:
Para lidar com caixas muito cheias, suas opções (em ordem crescente de esforço necessário e ordem decrescente de estética) são ignorá-las, permitir mais alongamento, permitir mais pausas ou reescrever o texto.
Neste caso, como você pode ver, não está muito cheio (a mensagem de aviso diz 1,65 pt). Portanto, se você não achar isso visualmente chocante, a melhor coisa será simplesmente ignorá-lo. (Você pode fazer com que o aviso não apareça mais, aumentando \hfuzz
para dizer 1.66pt
ou algo maior.)
Caso contrário, a melhor abordagem aqui (já que há matemática e introduzir quebras na matemática pode ser ruim) pode ser reescrever o texto. Ou se você não quiser se preocupar, você pode simplesmente definir \sloppy
(vejaesta respostapara o que exatamente \sloppy
faz) ou aumento \emergencystretch
, para obter uma quebra de linha ao custo de um pouco mais de alongamento do que o TeX se sente confortável por padrão:
(Para evitar afetar outros parágrafos do documento, você pode restringir as alterações de \sloppy
e/ou \emergencystretch
apenas a este parágrafo, usando { … }
agrupamento, por exemplo, o LaTeX fornece um sloppypar
ambiente que faz exatamente isso.)
3. O que significa a saída
A questão restante épor queo diagnóstico de caixa excessivamente cheia tem a aparência que tem: O que essa saída significa?
É basicamente uma lista de tudo que o TeX colocou naquela linha, incluindo cola e caracteres de diferentes fontes. Em uma linha contendo muitas fontes diferentes, grande parte da saída pode acabar sendo sobre as fontes.
Você pode usar o pacote fonttable
e
\xfonttable{OT1}{cmr}{m}{n}
\xfonttable{OML}{cmm}{m}{it}
\xfonttable{OMS}{cmsy}{m}{n}
para entender com mais detalhes as fontes que ocorreram na linha de saída. Esta é a OT1/cmr/m/n
fonte:
e isso é OML/cmm/m/it
:
e isso é OMS/cmsy/m/n
:
Então, na Overfull \hbox
linha de log, quando ele imprime qual foi o hbox cheio demais que foi digitado,
como
[]\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $\OML/cmm/m/it/10 a \OT1/cmr/m/n/10 : \OML/cmm/m/it/10 A[] \OMS/cmsy/m/n/10 ! \OML/cmm/m/it/10 a[]$\OT1/cmr/m/n/10 a$\OMS/cmsy/m/n/10 ^^U$ \OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $\OML/cmm/m/it/10 a[] [] \OMS/cmsy/m/n/10 !$
podemos dividi-lo por partes como:
[]
- esta é a cola parindent\OT1/cmr/m/n/10 Aaaaaa aaaaa aa-j-caaaaaa $
— significa simplesmente “Aaaaaa aaaaa aajcaaaaaa” na fonteOT1/cmr/m/n/10
(veja acima), com quebras discricionárias (potenciais pontos de hifenização) conforme indicado emaaaaa aa-j-caaaaaa
, seguido pelo início do modo matemático.\OML/cmm/m/it/10 a
\OT1/cmr/m/n/10 :
- observe que mesmo estando no modo matemático, o:
vem dacmr
fonte OT1, porque deveria estar na vertical, etc.\OML/cmm/m/it/10 A[]
- o subscritoaa
é sua própria caixa (eu acho), e é simplesmente mostrado aqui como[]
\OMS/cmsy/m/n/10 !
- observe que!
(personagem 33) inOMS/cmsy/m/n
é o→
personagem. Em mecanismos TeX não Unicode (basicamente pdfTeX em oposição a XeTeX ou LuaTeX) as fontes podem ter no máximo 256 glifos, portanto caracteres como→
devem ser mapeados para alguma posição entre 0–255.\OML/cmm/m/it/10 a[]$
- novamente o subscritoa
é denotado apenas por[]
\OT1/cmr/m/n/10 a$
\OMS/cmsy/m/n/10 ^^U$
- aqui^^U
denota o caractere 21 (porqueU
é ASCII 85 e em TeX^^
significa adicionar ou subtrair 64), e o caractere 21 nessa fonte é≥
\OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaa $
\OML/cmm/m/it/10 a[] []
\OMS/cmsy/m/n/10 !$
- novamente,!
aqui significa→
(É claro que o resultado de como essas caixas cheias são mostradas, embora seja bom para a época em que o TeX foi desenvolvido (~1980) e útil para alguém que leu o manual com atenção, poderia ser melhorado hoje, por exemplo, tendo opções para colorir a saída, converter caracteres para Unicode ou suprimir/alternar informações de fonte, mas infelizmente não foi feito muito trabalho nessas melhorias no TeX. Usando LuaTeX e post_linebreak_filter
, consegui obter uma saída um pouco mais estruturada para a linha:aqui. Isso é muito detalhado para usos típicos, mas um sistema interativo poderia ter expansão/exibição, mostrando os glifos reais das fontes em vez de confundir coisas como !
, etc.)