为什么 dvipdfmx 输出中缺少某些字形,与 pdftex 相矛盾?

为什么 dvipdfmx 输出中缺少某些字形,与 pdftex 相矛盾?

让我们获取字体的表格cmctt10

1)使用tex+ dvipdfmx

$ tex testfont
This is TeX, Version 3.14159265 (TeX Live 2015/Debian) (preloaded format=tex)
(/usr/share/texlive/texmf-dist/tex/plain/knuth-lib/testfont.tex

Name of the font to test = cmctt10
Now type a test command (\help for help):)
*\table

*\bye
[1]
Output written on testfont.dvi (1 page, 4424 bytes).
Transcript written on testfont.log.
$ dvipdfmx testfont.dvi 
testfont.dvi -> testfont.pdf
[1]
dvipdfmx:warning: Glyph "(null)" missing in font "cmctt10".
dvipdfmx:warning: Glyph "(null)" missing in font "cmctt10".
dvipdfmx:warning: Glyph "(null)" missing in font "cmctt10".
dvipdfmx:warning: Glyph "(null)" missing in font "cmctt10".

16039 bytes written

2)使用pdftex

$ pdftex testfont
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdftex)
 restricted \write18 enabled.
entering extended mode
(/usr/share/texlive/texmf-dist/tex/plain/knuth-lib/testfont.tex

Name of the font to test = cmctt10
Now type a test command (\help for help):)
*\table

*\bye
[1{/usr/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}]</usr/share/texli
ve/texmf-dist/fonts/type1/public/cmcyr/cmctt10.pfb></usr/share/texlive/texmf-di
st/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/font
s/type1/public/amsfonts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/
public/amsfonts/cm/cmti10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public
/amsfonts/cm/cmtt10.pfb>
Output written on testfont.pdf (1 page, 59482 bytes).
Transcript written on testfont.log.

如果我们通过 执行此操作dvipdfmx,则插槽 '31,'35,'36,'177 为空。

这个案子到底出了什么问题dvipdfmx

答案1

dvipdfmx 可能不太聪明,无法自动理解如此复杂的 type1 字体。请创建一个名为的文件cmctt10.enc

/CMCTT10Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /afii61352
/.notdef /.notdef /.notdef /guillemotleft /guillemotright /.notdef /space
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/afii10071 /.notdef /afii10023 /.notdef /afii10096 /afii10065 /afii10066 /afii10088
/afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075
/afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097
/afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094
/afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092
/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038
/afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030
/afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036
/afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042
/afii10047 /afii10043 /afii10041 /afii10044 /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
] def

以及一个名为的文件cmctt10.map

cmctt10 cmctt10 <cmctt10.pfb <cmctt10.enc

然后

dvipdfmx -f cmctt10.map testfont.dvi

创建所需的 pdf。请注意,dvipdfmx 知道编码cmctt10.enc

答案2

字体cmctt10.pfb包含以下部分

dup dup 161 10 getinterval 0 exch putinterval
dup dup 173 23 getinterval 10 exch putinterval
dup dup 127 exch 196 get put
readonly def

用于编码向量的定义。

Dvipdfmx 不会考虑此类情况,而 pdftex 和 dvips 则会处理此类情况。您可以使用自己的.enc文件来解决此问题。

相关内容