我正在尝试使用 Beamer 重建现有的 PowerPoint 模板,为此我需要精确地垂直定位 Beamer 框架的内容。我已经找到了如何处理headline
和footline
以及的内容的方法frametitle
,但是内容又该如何处理呢?我有以下 MWE:
\documentclass[t]{beamer}
\usepackage{tikz}
\setbeamertemplate{frametitle}{\nointerlineskip\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-2cm,minimum height=1cm,fill=green]{frametitle};\end{tikzpicture}}
\setbeamertemplate{footline}{\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-2cm,minimum height=1cm,fill=yellow]{footline};\end{tikzpicture}}
\begin{document}
\begin{frame}
\nointerlineskip\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth,minimum height=1cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{~}
\nointerlineskip
\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth,minimum height=1cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{~}
\nointerlineskip
\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth,minimum height=\paperheight-2cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}[c]
\frametitle{~}
\nointerlineskip
\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth,minimum height=\paperheight-2cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\end{document}
我想要实现的是,内容从顶部开始,没有框架标题,或者只从框架标题的下边缘开始,并且带有选项,并且所有内容都集中在和[t]
之间的区域,所以当我插入全尺寸图像时,它们将填满整个区域,而不是在顶部留有空白。frametitle
footline
如何才能实现内容和框架标题之间或内容和上边缘之间没有垂直空白?我更喜欢通过向主题添加命令来实现这一点。附加问题:在 beamer 中我可以在哪里找到空白的定义?当然,我只在寻找垂直对齐,很明显,这些框的宽度不对。
经过进一步调查,这就是我所寻找的,现在是我问题的第二部分
因此,经过一番尝试并研究了投影仪源之后,我发现了放置选项的配置方式和位置,而这正是我真正想要的:
\documentclass{beamer}
\usepackage{tikz}
\makeatletter
\define@key{beamerframe}{MYc}[true]{% centered
\beamer@frametopskip=0pt plus 1fill\relax%
\beamer@framebottomskip=0pt plus 1fill\relax%
\beamer@frametopskipautobreak=0pt plus .4\paperheight\relax%
\beamer@framebottomskipautobreak=0pt plus .6\paperheight\relax%
}
\define@key{beamerframe}{MYt}[true]{% top
\beamer@frametopskip=0pt\relax%
\beamer@framebottomskip=0pt plus 1fill\relax%
\beamer@frametopskipautobreak=\beamer@frametopskip\relax%
\beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
}
\define@key{beamerframe}{MYb}[true]{% bottom
\beamer@frametopskip=0pt plus 1fill\relax%
\beamer@framebottomskip=0pt\relax%
\beamer@frametopskipautobreak=\beamer@frametopskip\relax%
\beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
}
\makeatother
\setbeamertemplate{frametitle}{\nointerlineskip\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-2cm,minimum height=1cm,fill=green]{frametitle};\end{tikzpicture}}
\setbeamertemplate{footline}{\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-2cm,minimum height=1cm,fill=yellow]{footline};\end{tikzpicture}}
\begin{document}
\begin{frame}[MYt]
\nointerlineskip
\hspace{1cm}\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-1cm,minimum height=1cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}[MYt]
\frametitle{~}
\vspace*{-0.25em}
\nointerlineskip
\hspace{1cm}\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-1cm,minimum height=1cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}[MYt]
\frametitle{~}
\vspace*{-0.25em}
\nointerlineskip
\hspace{1cm}\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-1cm,minimum height=\paperheight-5cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}[MYc]
\frametitle{~}
\vspace*{-0.25em}
\nointerlineskip
\hspace{1cm}\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-1cm,minimum height=\paperheight-5cm,fill=orange]{content};\end{tikzpicture}
\end{frame}
\begin{frame}[MYb]
\frametitle{~}
\vspace*{-0.25em}
\nointerlineskip
\hspace{1cm}\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-1cm,minimum height=\paperheight-5cm,fill=orange]{content};\end{tikzpicture}
\vspace*{-1.3\baselineskip} \end{框架} \end{文档}
但是现在我有两个问题,第一个问题是,如果我将代码留在主题中,它将只适用于框架命令,但我想调用\makeatletter
。或者反过来,我是否可以将其中一个选项设置为主题加载后所有框架的标准行为,以便我可以避免在每个框架之后都调用?\makeatother
\documentclass[MYt]{beamer}
[MYt]
第二个问题是,我是否可以将\vspace*{-0.25em}\nointerlineskip
每个带有 frametitle 的幻灯片所需的 和\nointerlineskip
每个不带 frametitle 的幻灯片所需的 放在某个地方,以便自动调用,而用户无需关心? 同样适用于底部的 ,但对于带有和不带有 frametitle 的幻灯片,和\vspace*{-1.3\baselineskip}
更为重要。[MYt]
[MYc]
答案1
实际上解决方案非常简单,MYt
我们不需要定义新的值,而是可以直接覆盖现有的 t、b 和 c 键,如下所示:
\makeatletter
\define@key{beamerframe}{c}[true]{% centered
\beamer@frametopskip=0pt plus 1fill\relax%
\beamer@framebottomskip=0pt plus 1fill\relax%
\beamer@frametopskipautobreak=0pt plus .4\paperheight\relax%
\beamer@framebottomskipautobreak=0pt plus .6\paperheight\relax%
}
\define@key{beamerframe}{t}[true]{% top
\beamer@frametopskip=0pt\relax%
\beamer@framebottomskip=0pt plus 1fill\relax%
\beamer@frametopskipautobreak=\beamer@frametopskip\relax%
\beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
}
\define@key{beamerframe}{b}[true]{% bottom
\beamer@frametopskip=0pt plus 1fill\relax%
\beamer@framebottomskip=0pt\relax%
\beamer@frametopskipautobreak=\beamer@frametopskip\relax%
\beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
}
\makeatother
\setbeamertemplate{frametitle}{\nointerlineskip\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-2cm,minimum height=1cm,fill=green]{frametitle};\end{tikzpicture}\vspace*{-0.25em}}
\setbeamertemplate{footline}{\begin{tikzpicture}\node[inner sep=0pt,outer sep=0pt,minimum width=\textwidth-2cm,minimum height=1cm,fill=yellow]{footline};\end{tikzpicture}}
这实际上解决了这个问题