Verwenden von `\pdfmapfile` bei der Formaterstellung

Verwenden von `\pdfmapfile` bei der Formaterstellung

Diese Frage bezieht sich aufDieses hierUm aus der Dokumentation zu zitieren:

Wenn Sie einen anderen Basiskartendateinamen als pdftex.map verwenden oder die Verarbeitungsoptionen über ein pdfTeX-Format ändern möchten, können Sie dies tun, indem Sie den \pdfmapfileBefehl an die \everyjob{}Tokenliste für die -ini-Ausführung anhängen, z. B.: \everyjob\expandafter{\the\everyjob\pdfmapfile{+myspecial.map}} \dumpDadurch wird die Datei immer myspecial.mapnach der Standarddatei gelesen pdftex.map.

Ich habe versucht, diese Anweisungen bei der Erstellung meines Formats zu befolgen, aber ohne Erfolg. Ich habe die Anweisung am Ende der pdftexconfig.texDatei platziert, so wie es in der Datei früher funktioniert hat pdftex.cfg, aber ich erhalte die Fehlermeldung

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

Ansonsten (ohne diesen Zusatz am Ende der pdftexcf.texDatei) läuft die Formaterstellung problemlos. Kann jemand raten, warum das so ist?

Vorbehalt: Ich habe den Namen der Konfigurationsdatei gekürzt, da ich unter DOS arbeite; aus genau demselben Grund kann ich es mir nicht leisten, auszuführen updmap.

Antwort1

Der Fehler sah zunächst wirklich seltsam aus, denn er \the\everyjobsollte auf den Inhalt des \everyjobRegisters erweitert werden, und dann sollte alles normal funktionieren. Die Missing { insertedMeldung ist klar: TeX hat nach einem gesucht {(das anscheinend vorhanden ist), es aber nicht gefunden. Die einzige Möglichkeit, dies zu erreichen, ist, wenn {es nicht vorhanden ist.Genau genommenA {:

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

dann ist die Fehlermeldung die gleiche:

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

Wie GuM im Kommentar anmerkte, führt INITEX ein geradezu minimales Catcode-Setup durch, sodass Sie es tatsächlich verwenden können, und alle anderen Zeichen werden mit Catcode 12 initialisiert. Der Absatz vonDas TeXBook:

Zu INITEXBeginn kennt es nichts außer den TeX-Grundelementen. Alle 256 Zeichen sind anfangs von Kategorie 12, außer dass <return>Kategorie 5 hat, <space>Kategorie 10 hat, <null>Kategorie 9 hat, <delete>Kategorie 15 hat, die 52 Buchstaben A... Zund a... zhaben Kategorie 11 %und \haben die jeweiligen Kategorien 14 und 0. Daraus folgt, dass INITEXes anfangs nicht in der Lage ist, einige der TeX-Grundelemente auszuführen, die von der Gruppierung abhängen; Sie können \defoder nicht verwenden \hbox, bis Zeichen der Kategorien 1 und 2 vorhanden sind. Das Format in Anhang B beginnt mit \catcodeBefehlen, um Zeichen der erforderlichen Kategorien bereitzustellen; z. B.

\catcode`\{=1

Wenn Sie tatsächlich die nächste }Fehlermeldung ( Too many }'s) überspringen würden (der Vernunft halber wird davon ausgegangen, dass es sich mindestens um einen catcode-2 handelt), und Sie dies täten, \showthe\everyjobwürden Sie Folgendes sehen: {\pdfmapfile {+cmfonts.map. Herrlich :-)

Mit dieser Meldung teilt Ihnen TeX mit, dass es {beim Suchen nach einem ein ungültiges Token (hier alles, was nicht erweiterbar ist, nicht -) gefunden hat {. Die unteren beiden Kontextzeilen zeigen, dass es nicht einmal bei angekommen ist \pdfmapfile, also ist das nicht das Problem, und \everyjobes ist leer (das haben wir oben sichergestellt). Das Einzige, was übrig bleibt, ist das {selbst. Die <to be read again>Zeile bedeutet, dass das Token {erneut gelesen wird, nachdem das Fehlende {eingefügt wurde (TeX ist lustig).

Moral: TeX's Fehlermeldungen sindsehrDie Bedeutung ist klar. Manches davon muss man nur genau überlegen, um es zu verstehen.


Der Vollständigkeit halber pdftex.cfgmüssen Sie zur Wiederherstellung der ursprünglichen Funktionalität Folgendes hinzufügen:

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

am Ende der pdftexconfig.texDatei. Bearbeiten Sie den Rest der Konfigurationsdatei entsprechend Ihren Anforderungen.

verwandte Informationen