我有以下非常简单的 TeX 文件:
\input epsf
\catcode`\:=\active\def:{\thinspace\string:}
a: b
\centerline{\epsfbox{test.1}}
\bye
包含test.mp
beginfig(1);
draw (0,0) -- (100,0);
endfig;
end;
?
当更改、等目录代码时!
(按照法国印刷规则规定),一切看起来都很好。但具体来说:
,图形会移到页面中一个非常奇怪的地方。
答案1
该\epsfbox
宏读取给定 PostScript 文件的标题以获取 BoundingBox 值。您可以查看 test.1 文件的前两行:
%!PS
%%BoundingBox: -1 -1 101 1
你看到:
这里了吗?这一行是用 active 读取的:
,不开心就解决了。你可以修改你的代码:
\centerline{\catcode`\:=12 \epsfbox{test.1}}
答案2
您想要更新\dospecials
,其中包含需要在逐字上下文中更改其类别代码的字符列表。这是因为epsf.tex
查找边界框信息的例程会扫描文件并期望标准类别代码,因此它用于\dospecials
安全起见。
实际上,只需添加\do\:
就足够了,但是通用逐字记录也需要其他内容。
%%% must go before changing catcodes
\input epsf
%% something for French typography
\frenchspacing
\catcode`\:=\active
\catcode`\;=\active
\catcode`\?=\active
\catcode`\!=\active
\def;{\unskip\thinspace\string;}
\def?{\unskip\thinspace\string?}
\def!{\unskip\thinspace\string!}
\def:{\unskip~\string:}
\expandafter\def\expandafter\dospecials\expandafter{%
\dospecials\do\:\do\;\do\?\do\!%
}
%%% the document
a; b a ; b
a! a? a ! a ?
a: b a : b
\centerline{\epsfbox{tryepsf.1}}
\bye
据我所知,冒号周围的空格应该相等,这与其他标点符号的情况相反,因此我相应地更改了定义。我还添加了\unskip
所有定义,以防用户习惯性地在标点符号前输入空格。