为什么更改 : 的 catcode 会导致 epsfbox 失败?

为什么更改 : 的 catcode 会导致 epsfbox 失败?

我有以下非常简单的 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所有定义,以防用户习惯性地在标点符号前输入空格。

相关内容