这个问题与这个引用文档:
如果您想使用除 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
...Z
和a
...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
。根据需要编辑配置文件的其余部分。