beamer frametitle 重新定义会干扰 allowframebreaks 选项

beamer frametitle 重新定义会干扰 allowframebreaks 选项

问题:在 beamer 中,当我使用该allowframebreaks选项时,第二帧(及后续帧)的标题如下所示:“[ II”、“[ III”等。实际标题在下面的文本中,如下所示:“Title]Title”。

推测原因: 我正在使用同事的 beamer 模板,但我并不完全理解它。它可能有点儿像黑客。不过,我已经找到了问题所在:\frametitle正在重新定义,以便包含大学徽标。

这是一个 MWE(您需要提供一张图形logo.*):

\documentclass[xetex]{beamer}

\usepackage{xltxtra}
\usepackage{lipsum}
\usetheme{Madrid}
\usepackage[absolute,overlay]{textpos}

\newcommand{\MyLogoNeg}{%
\begin{textblock}{90}(12.7,0.09)
  \includegraphics[width=2.5cm]{logo}
\end{textblock}
}

\let\oldframetitle\frametitle
\renewcommand{\frametitle}[1]{\oldframetitle{#1}\MyLogoNeg}

\begin{document}
\begin{frame}[allowframebreaks]{Title}
  \lipsum[1-2]
\end{frame}

\end{document}

我怎样才能在不破坏的情况下添加徽标allowframebreaks

答案1

问题是\frametitle可以有一个覆盖规范以及一个可选参数:完整的语法是(参见beamer手册,第 8.2.6 节

\frametitle<⟨overlay specification⟩>[⟨short frame title⟩]{⟨frame title text⟩}

重新定义\frametitle\renewcommand仅具有一个强制参数会破坏使用其中一个附加参数的情况(如beamer使用选项时在内部完成的那样allowframebreaks)。

不要直接进行黑客攻击\frametitle,可以考虑将你的徽标添加到 beamer 模板中frametitle,这是进行此类修改的更合适的地方:为此,请替换

\let\oldframetitle\frametitle
\renewcommand{\frametitle}[1]{\oldframetitle{#1}\MyLogoNeg}

经过

\addtobeamertemplate{frametitle}{}{\MyLogoNeg}

相关内容