本节介绍如何定义一个 PostScript 命令来完成一幅 EPS 矢量图形的绘图指令。
这一方法不适合于那些包含位图的 EPS 图形。 为了将一 EPS 图形转化为一 PostScript 命令,必须将 EPS 图形文件分为
两个文件。其中一个定义了 PostScript 字典和图形命令,另一个则含有 图形文件信息和使用已定义的 PostScript 命令。例如,一个用 xfig 生
成的 EPS 文件有如下的形式:
%!PS-Adobe-2.0 EPSF-2.0
%%Title: /tmp/xfig-fig017255
%%Creator: fig2dev Version 2.1.8 Patchlevel 0
%%CreationDate: Sun Sep 3 15:36:01 1995
%%Orientation: Portrait
%%BoundingBox: 0 0 369 255
%%Pages: 0
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
...
%%EndProlog
$F2psBegin
...
$F2psEnd
这里 ... 代表没有列出的命令。一个 EPS 文件一般包括三部分:
- 以 % 开始的 header 命令。
- Prolog 部分开始于
/$F2psDict 200 dict def
结束于
%%EndProlog
Prolog 部分定义了 EPS 文件所使用的 PostScript 字典中的
命令。在这个例子中, PostScript 字典名为 $F2psDict,当然 不同的文件可有不同的名字。
- 最后一部分包含用来绘图的命令。
假设上面的这个 EPS 文件名为 file.eps。新建两个文件,分别
命名为 file.h 和 file.ps。其中 file.h
含有如下内容:
/$F2psDict 200 dict def
$F2psDict begin
...
%%EndProlog
/MyFigure {
$F2psBegin
...
$F2psEnd }
def
file.ps 含有如下内容:
%!PS-Adobe-2.0 EPSF-2.0
%%Title: /tmp/xfig-fig017255
%%Creator: fig2dev Version 2.1.8 Patchlevel 0
%%CreationDate: Sun Sep 3 15:36:01 1995
%%Orientation: Portrait
%%BoundingBox: 0 0 369 255
%%Pages: 0
%%EndComments
$F2psDict begin MyFigure end
file.h 中定义了 PostScript 字典和命令 /MyFigure,
file.ps 则包含了 EPS 文件的 header 信息,
并且使用了 file.h 中定义的 PostScript 命令。 特别指出的是, file.ps 中包含有
%!PS... 行和 BoundingBox 行是非常重要的。 这时,可像下面的例子一样在 LATEX 文件中使用这个图形了。
\documentclass{article}
\usepackage{graphicx}
\special{header=file.h}
\begin{document}
...
\includegraphics[width=2in]{file.ps}
...
\includegraphics[totalheight=1in]{file.ps}
...
\end{document}
注意原始图形文件 file.eps 并没有被使用。 因为 file.h 中的 PostScript 命令只被使用了一次,所以最后得到
的 PS 文件很小。然而,每次插入图形的时候, LATEX 都得
搜索和读取 file.ps 一次。下面的命令将图形存放到 一个 LATEX 盒子中,使得在 LATEX 只搜索和读取 file.ps 一次
的情况下仍得到很小的 PS 文件。
\documentclass{article}
\usepackage{graphicx}
\special{header=file.h}
\newsavebox{\mygraphic}
\sbox{\mygraphic}{%
\includegraphics[width=2in]{file.ps}}
\begin{document}
...
\usebox{\mygraphic}
...
\resizebox*{1in}{!}{\usebox{\mygraphic}}
...
\end{document}
所得的结果和上一个领子是一样的。 |