フォーマット作成時に `\pdfmapfile` を使用する

フォーマット作成時に `\pdfmapfile` を使用する

この質問はこれですドキュメントを引用すると:

pdftex.map 以外のベース マップ ファイル名を使用する場合、または pdfTeX 形式を介してその処理オプションを変更する場合は、-ini 実行のトークン リスト\pdfmapfileにコマンドを追加することでこれを実行できます。例: これにより、常に既定のファイルの後の ファイルが読み取られます 。\everyjob{}\everyjob\expandafter{\the\everyjob\pdfmapfile{+myspecial.map}} \dumpmyspecial.mappdftex.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は最小限のcatcode設定を行うので、実際に使用することができ、他のすべての文字はcatcode 12で初期化されます。TeXBook について:

が開始するときINITEX、TeX のプリミティブ以外は何も知りません。256 文字すべてが最初はカテゴリ 12 ですが、<return>はカテゴリ 5、<space>はカテゴリ 10、<null>はカテゴリ 9、はカテゴリ 15、 ...と...<delete>の 52 文字はカテゴリ 11、はそれぞれカテゴリ 14 と 0 です。したがって、 は最初はグループ化に依存する TeX のプリミティブの一部を実行することができません。カテゴリ 1 と 2 の文字が存在するまで、または は使用できません。付録 B の形式は、必要なカテゴリの文字を提供するコマンドで始まります。例:AZaz%\INITEX\def\hbox\catcode

\catcode`\{=1

実際、次のエラー メッセージ ( )をスキップすると (}正気を保つために、少なくとも catcode-2 を想定) 、次のように表示されます。素晴らしいですね :-)Too many }'s\showthe\everyjob{\pdfmapfile {+cmfonts.map

{このメッセージで、TeX はを探しているときに不正なトークン (ここでは、展開できないもの、 以外) が見つかったことを伝えています{。下の 2 つのコンテキスト行は に到達していないことを示しているので\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。必要に応じて、構成ファイルの残りの部分を編集します。

関連情報