Fontes incompatíveis com glyphtounicocode com TeX Live 2021 e posterior: O que = faz em \pdfmapline? Que diferença faz o subconjunto?

Fontes incompatíveis com glyphtounicocode com TeX Live 2021 e posterior: O que = faz em \pdfmapline? Que diferença faz o subconjunto?

O seguinte MNWE falha com TeX Live 2021 em diante.

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

A compilação termina com

<</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!

De acordo comA resposta de David Carlisle, isso ocorre porque TL 2021 e posteriores adicionam um mapeamento gliftounicode por padrão, mas dictsymé incompatível com isso. Sua solução alternativa envolveu desabilitar o mapeamento globalmente, masResposta de Ulrike Fischer a uma pergunta posteriorsugeriu que adicionar

\pdfmapline{=dictsym DictSym <dictsym.pfb}

ser usado para 'sobrescrever e corrigir as linhas originais do mapa'. E, de fato, o seguinte MWE funciona.

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

Isto altera a linha original do mapa de duas maneiras.

  1. Um =é adicionado no início (se sobreviver \pdfmapline).
  2. <substitui <<para que o pdfTeX incorpore apenas um subconjunto da fonte em vez de tudo.

Mas estou curioso sobre o =, que não consegui encontrar documentado na documentação do pdfTeX, onde é explicada a sintaxe das linhas do arquivo de mapa. Observe que o MWE a seguir também é compilado.

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

Os testes básicos sugerem que é a mudança de <<para <que faz a diferença. Enquanto ambos

\pdfmapline{dictsym DictSym <dictsym.pfb}

e

\pdfmapline{=dictsym DictSym <dictsym.pfb}

trabalho, nem

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

nem o original

\pdfmapline{dictsym DictSym <<dictsym.pfb}

fazer.

De acordo comeste comentário, omitir os iguais pode causar problemas mais sutis, mas o uso de =não é comum em arquivos de mapas, pelo que vi. (Talvez seja específico para \pdfmapline?)

Mas testes adicionais sugerem que isso =é crucial, afinal. Em alguns casos, recebo o mesmo erro de compilação, a menos que inclua essa alteração também.

Então, estou intrigado em dois aspectos.

  1. O que exatamente o adicional faz =?
  2. Como a incorporação de toda a fonte versus a incorporação de apenas um subconjunto interage com o mapeamento do glyphtounicocode?

Em alguns casos (se scalednão for usado?) o seguinte também funciona.

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

mas não pode ser assim que eu deveria usá-lo, caso contrário ele falharia. (Achei que seria bom ter uma solução alternativa transparente.)


Saída detalhada para 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!

informação relacionada