usando `\pdfmapfile` na criação de formato

usando `\pdfmapfile` na criação de formato

Esta questão está relacionadaEste. Para citar a documentação:

Se você quiser usar um nome de arquivo de mapa base diferente de pdftex.map, ou alterar suas opções de processamento através de um formato pdfTeX, você pode fazer isso anexando o \pdfmapfilecomando à \everyjob{}lista de tokens para a execução -ini, por exemplo: \everyjob\expandafter{\the\everyjob\pdfmapfile{+myspecial.map}} \dumpIsso sempre seria lido o arquivo myspecial.mapapós o pdftex.maparquivo padrão.

Tentei seguir estas instruções na criação do meu formato, sem sucesso. Coloquei a instrução no final do pdftexconfig.texarquivo, do jeito que funcionava no pdftex.cfgarquivo, mas recebo o erro

MLTeX v2.2 enabled
***pdflatex.ini
(/texmf/tex/initex/pdflatex.ini (/texmf/tex/initex/pdftexcf.tex
! Missing { inserted.
<to be read again> 
                   {
l.23 \everyjob\expandafter{\the\everyjob
                                        \pdfmapfile{+cmfonts.map}}
? x

Caso contrário (sem esta adição no final do pdftexcf.texarquivo) a criação do formato ocorrerá sem problemas. Alguém adivinha por que isso acontece?

Advertência: encurtei o nome do arquivo de configuração porque estou executando no DOS; por esse mesmo motivo, não posso me dar ao luxo de concorrer updmap.

Responder1

O erro foi realmente estranho, a princípio, pois \the\everyjobdeveria expandir para o conteúdo do \everyjobcadastro, e depois tudo deveria funcionar normalmente. A Missing { insertedmensagem é clara: o TeX estava procurando por um {(que aparentemente está lá), mas não o encontrou. A única maneira de conseguir isso é se {não forna verdadea {:

\everyjob{}
\catcode`\{=12
\everyjob\expandafter{\the\everyjob\pdfmapfile{+cmfonts.map}}

então a mensagem de erro é a mesma:

! Missing { inserted.
<to be read again>
                   {
l.3 \everyjob\expandafter{\the\everyjob
                                       \pdfmapfile{+cmfonts.map}}
?

Como GuM apontou no comentário, o INITEX faz uma configuração mínima de catcode, para que você possa realmente usá-lo, e todos os outros caracteres são inicializados com catcode 12. O parágrafo deO TeXBook:

Quando INITEXcomeça, ele não conhece nada além dos primitivos do TeX. Todos os 256 caracteres são inicialmente da categoria 12, exceto que <return>possui categoria 5, <space>possui categoria 10, <null>possui categoria 9, <delete>possui categoria 15, as 52 letras A... Ze a... zpossuem categoria 11, %e \possuem as respectivas categorias 14 e 0. Segue-se que INITEXé inicialmente incapaz de executar algumas das primitivas do TeX que dependem de agrupamento; você não pode usar \defou \hboxaté que haja caracteres das categorias 1 e 2. O formato no Apêndice B começa com \catcodecomandos para fornecer caracteres das categorias necessárias; por exemplo,

\catcode`\{=1

Na verdade, se você pulasse a próxima (assumindo pelo menos um catcode-2 }, por uma questão de sanidade) mensagem de erro ( Too many }'s), e você faria \showthe\everyjobisso, veria: {\pdfmapfile {+cmfonts.map. Delicioso :-)

Com essa mensagem, o TeX está lhe dizendo que encontrou um token ilegal (aqui, qualquer coisa não expansível, não {) enquanto procurava por um arquivo {. As duas linhas de contexto inferiores mostram que nem chegou a \pdfmapfile, então esse não é o problema e \everyjobestá vazio (garantimos isso acima). A única coisa que resta é o {próprio. A <to be read again>linha significa que o token {será lido novamente após a {inserção do que falta (TeX é engraçado).

Moral: a mensagem de erro do TeX émuitoclaro no significado. Você só precisa pensar muito para entender alguns.


Por uma questão de integridade, para restaurar a pdftex.cfgfuncionalidade original, você deve adicionar

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  \global\everyjob\expandafter{\the\everyjob\pdfmapfile{+cmfonts.map}}
\endgroup

no final do pdftexconfig.texarquivo. Edite o restante do arquivo de configuração de acordo com suas necessidades.

informação relacionada