考虑以下 MWE
\documentclass{beamer}
\usepackage{lmodern}
\usetheme{Madrid}
\begin{document}
\begin{frame}
\frametitle{A frame title}
\framesubtitle{A frame subtitle}
\end{frame}
\end{document}
如何减少框架标题(可能包含也可能不包含副标题)的高度以占用尽可能小的空间(即足够的空间以适应字体高度)?我想我需要重新定义\setbeamertemplate{frametitle}
。该定义中的高度可以用etoolbox
包来修补吗?
答案1
我会从头开始设计框架标题,因为马德里主题的模板非常简单。所以:
\documentclass{beamer}
\usepackage{lmodern}
\usetheme{Madrid}
\setbeamertemplate{frametitle}{%
\nointerlineskip
\begin{beamercolorbox}[sep=.1ex,wd=\paperwidth,leftskip=.5cm,rightskip=0cm]{frametitle}%
\usebeamerfont{frametitle}\usebeamercolor[fg]{frametitle}\insertframetitle\\
\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\insertframesubtitle
\end{beamercolorbox}%
}
\begin{document}
\begin{frame}
\frametitle{A frame title}
\framesubtitle{A frame subtitle}
\end{frame}
\end{document}
标题前和副标题后的极小空间来自键sep=.1ex
。您可以根据需要将其减少为零。您还可以通过\\[-5pt]
或类似方法减少标题和副标题之间的空间。
当没有字幕时恢复更多空间
\documentclass{beamer}
\usepackage{lmodern}
\usetheme{Madrid}
\makeatletter
\setbeamertemplate{frametitle}{%
\nointerlineskip
\begin{beamercolorbox}[sep=.1ex,wd=\paperwidth,leftskip=.5cm,rightskip=0cm]{frametitle}%
\usebeamerfont{frametitle}\usebeamercolor[fg]{framesubtitle}\insertframetitle
\end{beamercolorbox}
\ifx\insertframesubtitle\@empty%
\else
\nointerlineskip%
\begin{beamercolorbox}[sep=.3ex,wd=\paperwidth,leftskip=.5cm,rightskip=0cm]{frametitle}%
\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\insertframesubtitle%
\end{beamercolorbox}
\fi
}
\makeatother
\begin{document}
\begin{frame}
\frametitle{A frame title}
\framesubtitle{A frame subtitle}
\end{frame}
\begin{frame}
\frametitle{A frame with no subtitle}
\end{frame}
\end{document}
在这个“增强”版本中,由于构造的原因,当没有字幕时,字幕空间会被隐藏ifx
。