为什么加载 beamer 类后无法设置 PDF 次要版本?

为什么加载 beamer 类后无法设置 PDF 次要版本?

我的问题是,我有一个主题,它加载 PDF 版本为 1.7 的 PDF。因此,我希望我的主题将次要版本设置为 7。虽然可以在使用例如选择文档类后设置次要版本article,但beamer似乎在类中执行了某些操作,因此我们不能,每次调用\documentclass更改 PDF 版本后都会导致:pdfTeX error (setup): \pdfminorversion cannot be changed after data is written to the PDF file. \begin{document}

在主题中执行此操作的 MWE 将是:

\documentclass{beamer}
%\usetheme{mytheme} %Remove the comment after a successful run, otherwise file will not be created
\usepackage{filecontents}
\begin{filecontents}{beamerthememytheme.sty}
\pdfoptionpdfminorversion=7
\end{filecontents}

\begin{document}
\begin{frame}
Just a slide
\end{frame}
\end{document}

一种解决方法是设置\pdfinclusionerrorlevel=-1,但我不喜欢这样,因为它创建的 PDF 看起来像是比它们实际包含的版本更低的版本。

答案1

beamer 在加载类时会创建一些对象(它在默认的内部主题中声明图像),因此 pdf 版本以后无法更改。

遗憾的是,这里这也不起作用。

\documentclass[hyperref={pdfversion=1.7}]{beamer}

在加载 hyperref 时仍然可以设置版本,但是 hyperref 太小心了,它检测到 pgf 保留了一些对象,然后拒绝设置版本。

唯一有效的方法是在加载类之前进行更改:

\pdfoptionpdfminorversion=7
\documentclass{beamer}

如果需要使用其他引擎,可以使用 expl3 命令,它适用于所有引擎:

\ExplSyntaxOn
\sys_ensure_backend: %forces loading of backend, in older systems use \RequirePackage{expl3}
\pdf_version_gset:n{1.7}
\ExplSyntaxOff
\documentclass{beamer}

相关内容