
Этот вопрос связан сВот этот. Цитата из документации:
Если вы хотите использовать имя файла базовой карты, отличное от 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
. Отредактируйте остальную часть файла конфигурации в соответствии с вашими потребностями.