我正在使用beamer
并多次包含相同的图像pgf
,声明一次并插入。
看起来,PS 文件dvips
在我创建幻灯片时呈线性增长(图像在背景上)。在线阅读时,这在 Unix 系统上应该不是问题,但在 Windows 上可能是一个问题。
有人有解决方案吗,因为编译现在大约需要 1 分钟,而 PS 文件是 200mb,不太方便?
目前的用途:
\pgfdeclareimage{redtree}{images/red_tree}%
\setbeamertemplate{background}{%
\pgftext[at=\pgfpoint{30mm}{\framesep-0.22\framesep},base,base]{\pgfuseimage{redtree}}
}
答案1
多次包含相同的 PostScript 图形的问题在“16 多次包含一个 EPS 文件”一章中有很好的解释。
Keith Reckdahl,《在 LaTeX 和 pdfLaTeX 中使用导入的图形》,2006 年,URL:http://mirror.ctan.org/info/epslatex.pdf
诀窍在于将原始 PostScript 文件分成两部分。dvips 的头文件以某种方式将图形数据加载到 PostScript 内存中,而实际的 PostScript 图像文件很小,仅加载先前存储的图形文件。第二个文件再次被多次包含,但文件大小较小,因为较大的图形部分仅写入一次。
这样 PostScript 的大小就很小了。但是 PDF 文件可能很大,因为 PDF 生成应用程序必须识别出相同的图形被多次包含。
PDF 的重用功能适用于“表单 XObject”,它们可以通过pdfmark
运算符生成。缺点是 PostScript 查看器对此不太满意。作为 XObject 加载的图片不会显示。但是 PDF 文件只包含一次图片,文件大小很小。
答案2
pdftex
与和不同xetex
,dvips
后端不会自行检测同一文件的多次包含,而是会\special{psfile=...}
一次又一次地插入到 DVI 文件中,导致中间 PostScript 和最终目标 PDF 中多次嵌入的图像文件的代码复制。
Heiko Oberdiek 指出,可以通过在ps2pdf
转换步骤中从图像创建一次 PDF 表单 XObject 并在需要重复的位置插入引用来解决此问题。这已在xsavebox
包。中间的 PS(尺寸较小)不显示重复的图像,但从 PDF 转换回来的 PS(又变大了)可以正确显示所有图像。
使用http://mirrors.ctan.org/graphics/pstricks/base/doc/images/tiger.eps(78,815 字节)
--> PS: 241,428 B ;目标 PDF 的 228,002 字节:
\pdfoutput=0
\documentclass[multido=true]{standalone}
\usepackage{xsavebox} %embed content only once
\usepackage{graphicx}
\usepackage{multido}
\parindent=0pt
\begin{document}
\xsavebox{Tiger}{\includegraphics[width=5in]{tiger}}%
\multido{}{400}{\xusebox{Tiger}}
%\multido{}{400}{\includegraphics[width=5in]{tiger}}
\end{document}
尽管
\multido{}{400}{\includegraphics[width=5in]{tiger}}
--> PS: 31,676,394 B ;目标 PDF 为 13,063,945 B