在格式建立中使用“\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 {(顯然它就在那裡),但沒有找到它。唯一的方法就是如果{不是實際上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 初始化。電子書:

開始時INITEX,它只知道 TeX 的原語。所有 256 個字元最初都屬於類別 12,除了<return>具有類別 5、<space>具有類別 10、<null>具有類別 9、<delete>具有類別 15、52 個字母A...Za...z具有類別 11%以及\各自的類別 14 和 0。 因此INITEX最初無法執行一些依賴分組的TeX 原語;除非有類別 1 和類別 2 的字符,否則不能使用\def或。例如,\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。根據您的需求編輯設定檔的其餘部分。

相關內容