这碎片包能够截取 eps 文件中的某些指令,并用新指令替换它们。这样,就可以用文档中其他地方使用的字体替换图像中的字体。我想实现更通用但更简单的功能:当包含 eps 文件时,字符串 A 将被字符串 B 替换(逐字替换)。例如,假设以下杰作要包含在文档中:
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pumpkin.eps
%%BoundingBox: 0 0 200 200
/tri {newpath 0 0 moveto 10 0 lineto 0 20 lineto -10 0 lineto closepath fill} bind def
1.0 0.6 0.25 setrgbcolor
1 setlinewidth
100 100 100 0 360 arc gsave stroke grestore fill
0 0 0 setrgbcolor
100 90 60 190 350 arc stroke
100 100 translate tri
-50 40 translate tri
100 0 translate tri
showpage
%EOF
但是,作者决定线条粗细应为 2,而不是 1。也就是说,1 setlinewidth
应将其替换为2 setlinewidth
。如何在 LaTeX 文档中实现这一点?
我所想到的实际应用涉及加粗 Matlab 生成的某些类型的图上的框架。Matlab 本身没有选项可以执行此操作,而我目前的方法(手动编辑后记,以及在导出文件后使用系统调用 sed 来更改文件)相当笨拙。
答案1
对于 psfrag,tex 根本不访问文件(除了可选地查找注释)%%BoundingBox
。它通过加载 PostScript 标头来工作,该标头重新定义(在 EPS 范围内)后记show
(和相关运算符),以便它们不是简单地排版提供的字符串,而是查找字符串并显示 latex 排版的替代方案。
因此,您情况下的类似操作将是重新定义setlinewidth
,以便如果其参数为 1,那么它将执行实际的 setlinewidth 2,但是在这种情况下,您可能只想调整命令的特定实例,这可能很棘手(或者不,取决于后记的可读性,查看要重新定义哪些命令,以及如何测试“正确”的实例。)
也许另一种方法是将原始 eps 放在修改后的filecontents
环境中,然后将其写出并定义替换,并使用新的/修改后的名称\includegraphics
。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
aaa
\includegraphics{zz.eps}
bbb
\special{ps: save /zz {setlinewidth} bind def /setlinewidth { 10 mul zz} bind def}
\includegraphics{zz.eps}
\special{ps: restore}
ccc
\end{document}