问题描述
在最近在 Debian 测试系统上对 TeXLive 进行升级后,我发现 Beamer(版本 3.40)在<article>
模式下解释空框架标题的方式发生了变化。
Beamer 似乎习惯于解释空框架标题,例如,
\begin{frame}{}
Foo
\end{frame}
与没有标题的框架相同,即
\begin{frame}
Foo
\end{frame}
然而,在 Beamer 3.40 版本中,Beamer 似乎将空框架标题视为“不可见”,即,它不打印任何标题,但为其留下垂直空间并缩进标题后面的文本。
最小工作示例(MWE)
将以下示例保存到.tex
文件并用 进行编译pdflatex
。
\documentclass{article}
\usepackage{beamerarticle}
\begin{document}
\section{Beamer frame with non-empty title}
\begin{frame}{Foo}%
Text after \verb|\begin{frame}{Foo}| is indented.
\end{frame}
\section{Beamer frame with no title at all}
\begin{frame}%
Text after \verb|\begin{frame}| is \emph{not} indented.
\end{frame}
\section{Beamer frame with empty title}
\begin{frame}{}%
Text after \verb|\begin{frame}{}| is indented, and vertical space
is left for the (empty) title. Neither appears to have been the case
in previous versions of Beamer -- I first encountered it under
Beamer v3.40.
\end{frame}
\end{document}
MWE 输出
我正在寻找的解决方案
我正在寻找一种恢复现状的解决方案。换句话说,我希望上述 MWE 中的示例 3 生成的输出与示例 2 的输出完全相同。
原因是我使用了一个自定义宏\autoframetitle
,它在中为空<article>
,但在模式中非空<presentation>
,我将其用作
\begin{frame}{\autoframetitle}
我编写了这个宏,因为我想<article>
完全忽略模式下的框架标题,同时在<presentation>
模式下打印它们。
答案1
要修复此问题,您可以向框架标题添加一个测试,告诉您框架标题是否包含文本:
\documentclass{article}
\usepackage{beamerarticle}
\makeatletter
\mode<article>{%
\setbeamertemplate{frametitle}{%
\setbox0=\hbox{\insertframetitle\unskip}\ifdim\wd0=0pt
\relax
\else%
\paragraph*{\insertframetitle}\ \par\noindent\emph{\insertframesubtitle}\par
\fi%
}
}
\makeatother
\begin{document}
\section{Beamer frame with non-empty title}
\begin{frame}{Foo}%
Text after \verb|\begin{frame}{Foo}| is indented.
\end{frame}
\section{Beamer frame with no title at all}
\begin{frame}%
Text after \verb|\begin{frame}| is \emph{not} indented.
\end{frame}
\section{Beamer frame with empty title}
\begin{frame}{}%
Text after \verb|\begin{frame}{}| is indented, and vertical space is left for the (empty) title. Neither appears to have been the case in previous versions of Beamer -- I first encountered it under Beamer v3.40.
\end{frame}
\end{document}