我的问题是,我有一个主题,它加载 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}