使用 `\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 正在寻找{(显然在那里),但没有找到它。唯一的方法是,如果{不是实际上A {

\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 类,<delete>属于第 15 类,52 个字母A...Za...z属于第 11 类,%并且\分别属于第 14 和第 0 类。因此,INITEX最初无法执行一些依赖于分组的 TeX 基元;在有第 1 类和第 2 类字符之前,您无法使用\def或 。附录 B 中的格式以提供必要类别字符的命令\hbox开始;例如,\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。根据需要编辑配置文件的其余部分。

相关内容