next up previous contents index
Next: 15.2 在页眉和页脚使用图形 Up: 15. 多次使用同一图形的几种技巧 Previous: 15. 多次使用同一图形的几种技巧


15.1 定义  PostScript  命令

本节介绍如何定义一个 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 文件一般包括三部分:
  1. 以 % 开始的 header 命令。
  2. Prolog 部分开始于
    
          /$F2psDict 200 dict def
    
    结束于
    
          %%EndProlog
          
    Prolog 部分定义了 EPS 文件所使用的 PostScript 字典中的 命令。在这个例子中, PostScript 字典名为 $F2psDict,当然 不同的文件可有不同的名字。
  3. 最后一部分包含用来绘图的命令。
假设上面的这个 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}
所得的结果和上一个领子是一样的。


Wang Lei
2000-04-15