为什么 TeX 后端不支持 SVG?

为什么 TeX 后端不支持 SVG?

我一直想知道为什么 SVG 对许多文档创建工具来说都是一个问题。例如,MS Office 无法做到这一点,Libre Office 只能使用非常简单的 SVG,甚至在 Latex 中我们也无法正确使用它们,但必须进行转换,要么手动转换,然后用作位图图形,要么由 InkScape 等外部工具自动转换。虽然我喜欢 InkScape,但这并不令人满意。

尤其是 Latex 或 TeX,我本来期望 SVG 支持,因为学术界有如此多的人直接或间接地使用它,并且非常注重细节,因此必须采用这种变通方法将 SVG 纳入作品中似乎很奇怪。如果 PDF 可以无限缩放,并且图表中的线条仍然清晰,而不是像素化的线条,那就太好了,因为 SVG 在用于 PDF 之前已经进行了转换。

那么为什么 TeX 后端仍然不支持 SVG?实现起来会很难吗?

我对 TeX 后端了解不多,基本上只知道它存在并将您的内容转换为 PDF 文件,所以这个问题可能很幼稚。另一方面,每个浏览器和几乎所有图像查看器软件都支持 SVG,所以我认为应该可以实现这一点。也许是因为 PDF 格式本身不支持包含 SVG,所以在 PDF 格式改变之前,更改 TeX 后端以允许 SVG 是没有意义的?

答案1

传统上 TeX 不处理任何图形格式,dvi 文件仅包含指向要由 dvi 驱动程序包含的图形文件的指针。TeX 只需要知道要留出的空间,它可以从 BoundingBox 注释或中的可选参数中读取\includegraphics

如果图形格式是您为文档生成的格式,则(通常)包含该格式要容易得多,因为 dvi 驱动程序不需要“理解它们”,只需复制到流中即可,例如dvips可以包含 EPS 文件,因为它们只是被逐字复制到输出,类似地,jpg 文件和某些位图格式可以或多或少地转换为 PostScript 位图。

pdftex 的情况类似,只是它不能处理 EPS 文件,但可以再次处理 PDF 文件,因为如果您正在编写 PDF,处理 PDf 要容易得多。

为了处理 pdftex 中的 EPS,您需要一个外部的 EPS 到 PDF 转换程序,该程序可以通过 TeX 的 shell-escape 调用,但从概念上(实际上)来说是完全独立的。

SVG 的情况也一样。如果您要生成 svg(例如 dvisvgm dvi 驱动程序),则包含 SVG 比包含 EPS 或 PDF 更容易,另一方面,如果您要生成 PostScript 或 PDF,则需要在循环中使用转换程序(通常是 incscape)。同样,这可能隐藏在 shell-escape 后面,并在需要时从 TeX 调用。但是,如果最终目的是包含在 PDF 文档中,则应该将 SVG 转换为可缩放格式(PDF 或 EPS),而不是位图。

答案2

把自己置于编写 TeX 编译器的人的角度。有许多程序可以将图像转换为一种格式或另一种格式(inkscape,imagemagick convert,...);那么为什么要花时间支持多种格式呢,这基本上与从头开始重新实现转换器的工作相同?

具体来说,SVG 格式包含除了厨房水槽外的一切:从使用自定义字体和背景颜色模式呈现的曲线贝塞尔路径上的双向中文文本,到成熟的JavaScript 解释器。噢,太可怕了。不用了,谢谢;您最好花时间修复错误并改进核心功能。

(好吧,大多数转换器不支持 SVG 的全部功能集,我同意,但是这个概念是正确的。)

因此,实际上您只支持一种格式(或者可能是一种位图和一种矢量格式),并告诉您的用户使用众多可用的外部工具之一将图形转换为该格式。幸运的是,他们中的大多数人都是聪明的 UNIX 用户,因此他们知道如何使用 Makefile 或构建脚本。

如果你想成为一个优秀的人,你可以支持从eps到 的自动转换pdf,但即使那也不是你的责任。或者你可以和维护者聊聊latexmk,让他们介绍自定义依赖项,因此这可以从他们的角度自动实现。

总结:程序员不喜欢重新发明轮子

答案3

支持通过dvisvgmTeXLive 发行版中的软件包。它的工作原理是转换 DVI 文件(由texlatex而不是pdftex和生成pdflatex)。

相关内容