注意:原标题是“Latex 可以创建的最大 PDF 大小是多少?”。我编辑了标题,以便更好地反映我发现的问题。
我正在 Beamer 中创建一个演示文稿,并使用动画包添加了几个动画。
当我有大约 6 个动画并生成相当大的 pdf(~95 Mb)时,这种方法效果很好。但是,当我尝试添加更多动画时,我的编译器会在一段时间后冻结。没有给出错误消息。如果我注释掉新动画,一切仍然有效。我尝试使用 pdflatex 和 lualatex 进行编译,但最终得到的结果相同。
latex 制作的 pdf 大小有限制吗?或者有其他解释?
编辑1:
如下所述,问题不在于 PDF 的大小。我似乎可以通过包含同一动画的多个副本来重现该问题。我进行了一些搜索,但在其他地方找不到有关这种情况的报告。有人知道是什么原因造成的吗?
如果需要 MWE,我可以尝试提供一个。
编辑2:
这是 MWE。它确实可以编译,但在添加动画的第一个副本后它会挂起大约一分钟。我尝试让我的原始演示文稿进行编译,但一个小时后它仍然挂起。我使用的是 Windows 10 机器。
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{animate}
\begin{document}
\begin{frame}
\animategraphics[autoplay,loop,width=0.4\textwidth]{8}{animation}{1}{99}
\animategraphics[autoplay,loop,width=0.4\textwidth]{8}{animation}{1}{99}
\end{frame}
\end{document}
答案1
animate
确保在动画重复的情况下,多页文件中的图形文件/页面仅嵌入一次。它通过验证要嵌入的文件的 MD5 校验和来实现这一点。计算校验和的成本相当高。
在版本中[2017/02/24]代码经过优化,将 MD5 计算次数降至最低。这将使嵌入动画的外部文件(animation.pdf
OP 中的链接)的速度加快 2 倍。所有后续副本的处理时间与第一个原始副本大致相同,甚至更少。
下面是一段用于测试的代码,它将经过的时间以“缩放秒数” (参见 pdfTeX 手册) 写入终端:
\documentclass{beamer}
\usepackage{animate}[2017/02/24]
\begin{document}
\begin{frame}
\pdfresettimer%
\animategraphics[autoplay,loop,width=0.4\textwidth]{8}{animation}{}{}
\typeout{anim 0: \the\pdfelapsedtime}\pdfresettimer%
\animategraphics[autoplay,loop,width=0.4\textwidth]{8}{animation}{}{}
\typeout{anim 1: \the\pdfelapsedtime}\pdfresettimer%
\animategraphics[autoplay,loop,width=0.4\textwidth]{8}{animation}{}{}
\typeout{anim 2: \the\pdfelapsedtime}\pdfresettimer%
\animategraphics[autoplay,loop,width=0.4\textwidth]{8}{animation}{}{}
\typeout{anim 3: \the\pdfelapsedtime}%
\end{frame}
\end{document}
答案2
PDF 文件有一个交叉引用表,用于记录间接对象的文件偏移量。这些偏移量以十位十进制数字存储。这将最大文件大小限制为大约 10 10字节(约 10 GB)。
其他限制因素:
- 文件系统。
- 32 位软件需要编译大文件支持(据我所知,pdfTeX 支持大文件)。
总结:除了古老的软件,生成100MB的文件应该不成问题。
答案3
你已经有一些很好的答案了,但为了给你一个新的数据点,在我的工作中,我使用一本 10,000 页的书,大约 600mb。这就是SAS/STAT 用户指南,用pdflatex完成。