Quais são as regras exatas de leitura de arquivos TFM?

Quais são as regras exatas de leitura de arquivos TFM?

Esta questão está relacionada com as respostas a esta pergunta:Como o TeX cria DVI sem ler o arquivo TFM?

Vamos modificar apenas o arquivo TFM para cmr10 (e alterar o nome da fonte, é claro), deixando todos os demais arquivos relacionados à fonte inalterados:

tftopl cmr10.tfm > mycmr10.vpl
patch <<EOF
--- mycmr10.vpl
+++ mycmr10.vpl
@@ -1,3 +1,4 @@
+(MAPFONT D 0 (FONTNAME cmr10))
 (FAMILY CMR)
 (FACE O 352)
 (CODINGSCHEME TEX TEXT)
@@ -466,7 +467,7 @@
    (CHARHT R 0.694445)
    )
 (CHARACTER C A
-   (CHARWD R 0.750002)
+   (CHARWD R 0.4)
    (CHARHT R 0.683332)
    (COMMENT
       (KRN C t R -0.027779)
EOF
vptovf mycmr10.vpl

Teste a nova métrica:

\setbox0=\hbox{A}
\showbox0
\font\myfont=mycmr10\myfont
\setbox0=\hbox{A}
\showbox0

A saída confirma que a nova métrica funciona:

\hbox(6.83331+0.0)x7.50002
\hbox(6.83331+0.0)x3.99998

Agora compile este test.tex

\font\myfont=mycmr10\myfont
Ab
\bye

Na saída de xdvi, as letras dvips e dvipdfmx se sobrepõem. Então, todos eles ainda leem o arquivo TFM? Embora a saída do dvips não indique isso, o xdvi não deveria fazer isso.

Responder1

O mycmr10.vfarquivo inclui a nova largura do caractere. Então xdvisabe disso desta fonte e os personagens se sobrepõem. Mas xdvinão lê o cmr10.tfmarquivo (como mencionado no tópico anterior).

Você pode tentar isso em seu diretório de trabalho:

tftopl cmr10.tfm > cmr10.pl

edite cmr10.pl para que o caractere A tenha largura diferente.

pltotf cmr10.pl

Agora você tem uma "métrica incorreta" cmr10.tfmem seu diretório de trabalho. Gerar formato:

tex -ini plain
\dump

usar formato:

tex -fmt plain \\relax Ab\\end

Depois xdvi texputmostra os caracteres não sobrepostos (porque coloca os caracteres pelas larguras dos caracteres lidos cmr10.pfb) mas dvipsdvipdfmxsua métrica alterada e faz a correção dos caracteres: eles se sobrepõem.

informação relacionada