我正在设计一个 Beamer 主题,有 16:9 和 4:3 两种尺寸。为了区分我遇到的宽高比将 beamer 类选项传递给 beamer 主题和在 .sty 文件中查询 beamer 文档类选项aspectratio对于一般解决方案,应用第二个解决方案来简单打印当前的纵横比:
\documentclass[aspectratio=169]{beamer}
\usepackage{filecontents}
\begin{filecontents}{beamerinnerthemeissue.sty}
\mode<presentation>
\defbeamertemplate*{title page}{texsx}[1][]
{
\vskip5cm%
\begin{beamercolorbox}[wd=12cm,leftskip=3cm,#1]{date}
This presentation has the aspectratio=
\makeatletter
\ifdimcomp{\beamer@paperwidth}{=}{12.80cm}{43}{}
\ifdimcomp{\beamer@paperwidth}{=}{14.85cm}{141}{}
\ifdimcomp{\beamer@paperwidth}{=}{13.50cm}{32}{}
\ifdimcomp{\beamer@paperwidth}{=}{12.50cm}{54}{}
\ifdimcomp{\beamer@paperwidth}{=}{14.00cm}{149}{}
\ifdimcomp{\beamer@paperwidth}{=}{16.00cm}
{
\ifdimcomp{\beamer@paperheight}{=}{10.00cm}{1610}{}
\ifdimcomp{\beamer@paperheight}{=}{9.00cm}{169}{}
}{}
\makeatother
\end{beamercolorbox}
\vfill
}
\mode<all>
\end{filecontents}
\useinnertheme{issue}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\end{document}
但是,如果必须对多个样式元素(标题页、部分页、章节页等)执行此操作,那么最简洁的方法是什么,只进行比较一次,而不是对每个与大小相关的样式元素进行比较?我正在考虑将结果存储在一个简单的\if43
and\if169
或 a中\is169or43{%16:9 code}{%4:3 code}
,然后稍后使用它们。
但是,我应该在主题的哪里放置一个检查项来检查是否选择了 16:9 或 4:3,因为所有其他尺寸都不起作用,然后准备上述命令以供其余命令使用? 是否有一个元素肯定会在之后直接解析和应用\begin{document}
?
答案1
如果 1)我正确地解释了这个问题,并且 2)我假设beamer
在一开始设置纸张尺寸后不会对纸张尺寸做出任何令人讨厌的事情,我会选择这样的事情:
\RequirePackage{filecontents}
\begin{filecontents}{beamerinnerthemeissue.sty}
\newif\if@ratio@wide \@ratio@widetrue
\ifdim\beamer@paperwidth=12.8cm
\@ratio@widefalse
\else
\beamer@paperwidth 16.00cm
\beamer@paperheight 9.00cm
\geometry{papersize={\beamer@paperwidth,\beamer@paperheight}}
\fi
\newcommand*{\foo}{This presentation has aspect ratio \if@ratio@wide16:9\else4:3\fi}
\end{filecontents}
\documentclass[aspectratio=169]{beamer}
\useinnertheme{issue}
\begin{document}
\begin{frame}
\foo
\end{frame}
\end{document}
据我所知,beamer.cls
在开始时设置页面大小。将beamer
类选项传递给主题似乎确实很棘手,但幸运的是,4:3 的页面宽度是一个唯一值。由于您说纵横比必须是 4:3 或 16:9,我只需检查当前页面宽度是否为 12.8 厘米(对应于 4:3 的宽度)并将标志设置\if@ratio@wide
为 false。在任何其他情况下,标志为 true,纵横比被强制为 16:9(即使您传递例如aspectratio=54
)。然后您可以使用熟悉的
\if@ratio@wide
...code for 16:9 ...
\else
... code for 4:3
\fi
区分其余代码中的情况。