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