использование `\pdfmapfile` при создании формата

использование `\pdfmapfile` при создании формата

Этот вопрос связан сВот этот. Цитата из документации:

Если вы хотите использовать имя файла базовой карты, отличное от pdftex.map, или изменить параметры его обработки через формат pdfTeX, вы можете сделать это, добавив команду \pdfmapfileв \everyjob{}список токенов для запуска -ini, например: \everyjob\expandafter{\the\everyjob\pdfmapfile{+myspecial.map}} \dumpЭто всегда будет считывать файл myspecial.mapпосле файла по умолчанию pdftex.map.

Я пытался следовать этим инструкциям по созданию формата, но безуспешно. Я поместил инструкцию в конец файла pdftexconfig.tex, как это работало в pdftex.cfgфайле, но получаю ошибку

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

В противном случае (без этого добавления в конце файла pdftexcf.tex) создание формата проходит без проблем. Кто-нибудь догадывается, почему так?

Предупреждение: я сократил имя файла конфигурации, поскольку работаю в DOS; по этой же причине я не могу позволить себе запустить updmap.

решение1

Ошибка была действительно странно выглядящей, сначала, потому что \the\everyjobдолжна была расшириться до содержимого регистра \everyjob, и тогда все должно было работать нормально. Сообщение Missing { insertedясно: TeX искал {(который там, по-видимому, есть), но не нашел его. Единственный способ получить это, если {это нена самом делеа {:

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

то сообщение об ошибке то же самое:

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

Как отметил GuM в комментарии, INITEX делает едва ли минимальную настройку каткода, так что вы действительно можете его использовать, а все остальные символы инициализируются каткодом 12. Параграф изTeXBook:

Когда INITEXначинается, он не знает ничего, кроме примитивов TeX. Все 256 символов изначально имеют категорию 12, за исключением того, что <return>имеет категорию 5, <space>имеет категорию 10, <null>имеет категорию 9, <delete>имеет категорию 15, 52 буквы A... Zи a... zимеют категорию 11 %и \имеют соответствующие категории 14 и 0. Из этого следует, что INITEXизначально неспособен выполнять некоторые примитивы TeX, которые зависят от группировки; вы не можете использовать \defили \hbox, пока не появятся символы категорий 1 и 2. Формат в Приложении B начинается с \catcodeкоманд для предоставления символов необходимых категорий; например,

\catcode`\{=1

На самом деле, если бы вы пропустили следующее (предполагая, что это будет catcode-2 }, ради здравого смысла) сообщение об ошибке ( Too many }'s), а вы это сделали, \showthe\everyjobвы бы увидели: {\pdfmapfile {+cmfonts.map. Замечательно :-)

Этим сообщением TeX сообщает вам, что он обнаружил недопустимый токен (в данном случае, что-либо нерасширяемое, не- {) при поиске {. Две нижние строки контекста показывают, что он даже не достиг \pdfmapfile, так что это не проблема, и \everyjobон пуст (мы убедились в этом выше). Единственное, что осталось, это {сам . Строка <to be read again>означает, что токен {будет прочитан снова после вставки отсутствующего {(TeX забавен).

Мораль: сообщение об ошибке TeXоченьясно по смыслу. Просто нужно очень хорошо подумать, чтобы понять некоторые.


Для полноты картины, чтобы восстановить первоначальную pdftex.cfgфункциональность, необходимо добавить

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

в конце файла pdftexconfig.tex. Отредактируйте остальную часть файла конфигурации в соответствии с вашими потребностями.

Связанный контент