glyphtounicode 字体与 TeX Live 2021 及更高版本不兼容: \pdfmapline 中的 = 起什么作用?子集化有什么区别?

glyphtounicode 字体与 TeX Live 2021 及更高版本不兼容: \pdfmapline 中的 = 起什么作用?子集化有什么区别?

以下 MNWE 在 TeX Live 2021 及更高版本中失败。

\documentclass{article}
\usepackage{dictsym}
\begin{document}
  \dsbiological
\end{document}

编译结束于

<</usr/local/texlive/2023/texmf-dist/fonts/type1/public/dictsym/dictsym.pfb>>
    !pdfTeX error: pdflatex: builtin glyph names is empty
     ==> Fatal error occurred, no output PDF file produced!

根据大卫·卡莱尔的回答,这是因为 TL 2021 及更高版本默认添加了 glyphtounicode 映射,但dictsym与此不兼容。他的解决方法是全局禁用映射,但Ulrike Fischer 对后面问题的回答建议添加

\pdfmapline{=dictsym DictSym <dictsym.pfb}

用来“覆盖并更正原始地图线条”。事实上,以下 MWE 确实有效。

\documentclass{article}
\usepackage{dictsym}
\pdfmapline{=dictsym DictSym <dictsym.pfb}
\begin{document}
  \dsbiological
\end{document}

这从两个方面改变了原始的地图线。

  1. =在开头添加了一个(如果这个还存在的话\pdfmapline)。
  2. <替换<<后,pdfTeX 将仅嵌入字体的子集而不是全部。

但我对 感到好奇=,我在 pdfTeX 的文档中找不到相关记录,其中解释了地图文件行的语法。请注意,以下 MWE 也可以编译。

\documentclass{article}
\usepackage{dictsym}
\pdfmapline{dictsym DictSym <dictsym.pfb}
\begin{document}
  \dsbiological
\end{document}

<<基本测试表明,从到 的变化才是<造成差异的原因。虽然两者

\pdfmapline{dictsym DictSym <dictsym.pfb}

\pdfmapline{=dictsym DictSym <dictsym.pfb}

工作,既不

\pdfmapline{=dictsym DictSym <<dictsym.pfb}

也不是原来的

\pdfmapline{dictsym DictSym <<dictsym.pfb}

做。

根据此评论=,省略等号可能会导致更微妙的问题,但据我所知,在 map 文件中使用并不常见。(也许它特定于\pdfmapline?)

但进一步的测试表明,这=毕竟是至关重要的。在某些情况下,除非我也包括此更改,否则我会得到相同的编译错误。

因此,有两点我感到困惑。

  1. 附加项具体起什么作用=
  2. 嵌入整个字体与仅嵌入子集如何与 glyphtounicode 映射交互?

在某些情况下(如果scaled不使用?),以下方法也有效。

\usepackage{dictsym}
\font\f=dictsym
\pdfnobuiltintounicode \f

但这不是我应该使用的方式,否则它会失败。(我只是认为有一个透明的解决方法会很好。)


MNWE 的详细输出:

This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./prawf.tex
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22>
(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2023/texmf-dist/tex/latex/dictsym/dictsym.sty
(/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/pifont.sty
(/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/upzd.fd)
(/usr/local/texlive/2023/texmf-dist/tex/latex/psnfss/upsy.fd))
(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty))
(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def)
(./prawf.aux) [1{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdft
ex.map}] (./prawf.aux) )</usr/local/texlive/2023/texmf-dist/fonts/type1/public/
amsfonts/cm/cmr10.pfb><</usr/local/texlive/2023/texmf-dist/fonts/type1/public/d
ictsym/dictsym.pfb>>
!pdfTeX error: pdflatex: builtin glyph names is empty
 ==> Fatal error occurred, no output PDF file produced!

相关内容