从内部来看,是什么原因导致 latex.exe 无法直接导入 *.jpg、*.png、*.pdf?
答案1
Knuth TeX(最初的 TeX 引擎)并不直接支持任何图像,我们唯一能做的就是用\special
命令告诉dvi
驱动程序处理图像文件,当.dvi
文件通过驱动程序转换为 PostScript 后Dvips
,就可以支持 PostScript 图像;并且dvipdfm(x)
支持 pdf/png/jpg 格式。
TeX 需要知道导入图像的边界框。Eps 文件通常是 ASCII 文本,并且有一个元注释,如
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 276 362 335 429
这样 eps 大小的图片就可以用 TeX 很好的渲染了。但是 TeX 自身无法判断二进制图片文件(JPEG、PNG 等)的大小,需要借助诸如extractbb
(主要用于 dvipdfm) 或(使用 pdfTeX) 之类的工具。bmpsize.sty
如果dvi
不是输出格式,现代 TeX 引擎(pdfTeX、XeTeX 和 LuaTeX)可以很好地导入二进制图像。
答案2
年龄!TeX 开发时,这些标准都不存在。事实上,当时只有点阵打印机!在我看来,Knuth 明智地决定冻结 TeX 的开发,并集中精力使其变得更好、更无错误,这些标准后来通过诸如 之类的软件包的命令special
添加graphicx
。
答案3
TeX 对图形不感兴趣,它只需要一个边界框,其余部分由导入过滤器驱动程序完成,并且 LaTeX 除了支持 ps、eps、mp 和一些位图格式之外不支持其他格式...
答案4
在 LaTeX 步骤(从 tex 到 dvi)中,LaTeX 只需要知道图像的大小。由于 eps 是一个简单的文本文件,因此 LaTeX 可以读取该文件并找到边界框信息。对于二进制图像格式,这是不可能的。但是,如果您将边界框信息提供给 LaTeX - 无论是使用 bb 键还是 .bb 文件 - LaTeX 都会很乐意处理每幅图像:
\documentclass[12pt]{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[bb = 0 0 100 100]{dontexit.exotic}
\end{document}
在第二步(dvi 到 ps 或 pdf 或 ...)中,插入真实图像,并且此步骤中可以处理哪些格式取决于驱动程序(dvips、dvipdfmx、...)。其中一些(dvips)可以原生处理 eps,一些可以处理 png,一些可以在后台调用转换器(例如 dvipdfmx 可以调用 ghostscript 来处理 eps)。