Каковы точные правила чтения файлов TFM?

Каковы точные правила чтения файлов TFM?

Этот вопрос связан с ответами на этот вопрос:Как TeX создает DVI, не читая файл TFM?

Давайте изменим только файл TFM для cmr10 (и, конечно, изменим имя шрифта), оставив все остальные файлы, связанные со шрифтами, без изменений:

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

Тест новой метрики:

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

Вывод подтверждает, что новая метрика работает:

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

Теперь скомпилируйте этот test.tex

\font\myfont=mycmr10\myfont
Ab
\bye

В выводе xdvi буквы dvips и dvipdfmx перекрываются. Так что, все они тем не менее читают файл TFM? Хотя вывод dvips этого не показывает, и xdvi не должен этого делать.

решение1

Файл mycmr10.vfвключает вашу новую ширину символа. Поэтому xdviзнает это из этого источника, и символы перекрываются. Но xdviне читает cmr10.tfmфайл (как упоминалось в предыдущей теме).

Вы можете попробовать это в своем рабочем каталоге:

tftopl cmr10.tfm > cmr10.pl

отредактируйте cmr10.pl так, чтобы символ A имел различную ширину.

pltotf cmr10.pl

cmr10.tfmТеперь у вас в рабочем каталоге есть "плохая метрика" . Сгенерируйте формат:

tex -ini plain
\dump

используйте формат:

tex -fmt plain \\relax Ab\\end

Затем xdvi texputотображаются неперекрывающиеся символы (потому что он размещает символы по ширине символов, считанной из cmr10.pfb), но dvipsсчитывает dvipdfmxизмененную вами метрику и выполняет исправление символов: они перекрываются.

Связанный контент