next up previous contents index
Next: 5. 下载和安装GhostScript Up: 4. 怎样在LATEX中使用 EPS 图 Previous: 4. 怎样在LATEX中使用 EPS 图


4.1 行缓冲区溢出

LATEX 在读取 ASCII 文件时是每次从中读取一行,然后把它放到自己 的行缓冲区里。 LATEX 的行缓冲区大约有 3000 字节。如果 EPS 文件中 有一行的长度超过了行缓冲区的长度,就会产生如下的错误讯息:

Unable to read an entire line--bufsize=3000. 
Please ask a wizard to enlarge me.
因为 EPS 很少有一行长度超过 3000 字节的情形,所以产生行缓冲区溢出 的原因可能有两种:
  1. EPS 文件中有一个长的二进制的预览图 有些应用程序生成的 EPS 文件在开始部分放置了一个二进制的预览图, 这样就可使得像 DVI 浏览器等一些不能解释 PostScript 的软件也可来显示  EPS 图形。目前有少数与 TEX 有关的软件使用这种方法。 如果这个二进制的预览图比行缓冲区小, \includegraphics 将会 略过它(像 \psfig 等过时的命令则不会这样)。但是,如果这个 二进制的预览图比行缓冲区大的话,就会发生行缓冲区溢出的错误。 有两种解决办法:
    1. 如果不需要预览图,可以用文本编辑器将它删掉或在生成 EPS  图形时就选择不要预览图。
    2. 因为 LATEX 读取 EPS 文件的唯一目的就是取得 BoundingBox  的大小,故可在插图命令中给出 BoundingBox  的值(如在 \includegraphics 中使用 bb 选项) 从而使得 LATEX 不再读取 EPS 文件。
  2.  EPS 文件中的分行符在不适当的传输中被损坏 (这里所谈到的问题不会在一些最新版本的 TEX 软件中出现,因为这 些软件中的 TEX 都会正确的识别所有的分行符。) 不同的操作系统平台使用不同分行符。 Unix 使用 ^J,  Macintosh 使用 ^M,而 DOS/Windows 则使用 ^M^J。 比如一个 EPS 文件从 Macintosh 机上用二进制方式传输到 Unix 机上, 那么 Unix 机上的 TEX 会因找不到分行符  ^J 而把整个文件 作为一行,导致行缓冲区溢出的错误。 如果 EPS 文件中不含有二进制的部分(如预览图和嵌入的图形),以文本 方式传输就可以解决这一问题。否则,由于文件必须用二进制方式传输, 分行符的问题不可避免,这时就需要用一些工具来转换不同的格式或在 在插图命令中给出 BoundingBox 的值来解决。


Wang Lei
2000-04-15