我需要在哪里与 beamer 中的纵横比进行比较,以免复制代码?

我需要在哪里与 beamer 中的纵横比进行比较,以免复制代码?

我正在设计一个 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}

但是,如果必须对多个样式元素(标题页、部分页、章节页等)执行此操作,那么最简洁的方法是什么,只进行比较一次,而不是对每个与大小相关的样式元素进行比较?我正在考虑将结果存储在一个简单的\if43and\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

区分其余代码中的情况。

相关内容