
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
\pdfmapfile
comando à\everyjob{}
lista de tokens para a execução -ini, por exemplo:\everyjob\expandafter{\the\everyjob\pdfmapfile{+myspecial.map}} \dump
Isso sempre seria lido o arquivomyspecial.map
após opdftex.map
arquivo padrão.
Tentei seguir estas instruções na criação do meu formato, sem sucesso. Coloquei a instrução no final do pdftexconfig.tex
arquivo, do jeito que funcionava no pdftex.cfg
arquivo, 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.tex
arquivo) 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\everyjob
deveria expandir para o conteúdo do \everyjob
cadastro, e depois tudo deveria funcionar normalmente. A Missing { inserted
mensagem é 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
INITEX
começ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 letrasA
...Z
ea
...z
possuem categoria 11,%
e\
possuem as respectivas categorias 14 e 0. Segue-se queINITEX
é inicialmente incapaz de executar algumas das primitivas do TeX que dependem de agrupamento; você não pode usar\def
ou\hbox
até que haja caracteres das categorias 1 e 2. O formato no Apêndice B começa com\catcode
comandos 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\everyjob
isso, 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 \everyjob
está 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.cfg
funcionalidade original, você deve adicionar
\begingroup
\catcode`\{=1 %
\catcode`\}=2 %
\global\everyjob\expandafter{\the\everyjob\pdfmapfile{+cmfonts.map}}
\endgroup
no final do pdftexconfig.tex
arquivo. Edite o restante do arquivo de configuração de acordo com suas necessidades.