我正在尝试让框架标题始终显示大写。我发现MakeUppercase 和 Beamer 的 insertsectionhead 错误有帮助,但与 一起使用的相同命令\insertsectionhead
对 不起作用\insertframetitle
。换句话说,这是有效的(来自链接的问题):
\documentclass[]{beamer}
\newcommand{\insertsectionHEAD}{%
\expandafter\insertsectionHEADaux%
%\insertframetitle}
\insertsectionhead}
\newcommand{\insertsectionHEADaux}[3]{#1{#2}{\MakeUppercase{#3}}}
\begin{document}
\section{Section 1}
\begin{frame}{Frame 1}
\insertsectionHEAD
\end{frame}
\end{document}
但交换上面第 5 行和第 6 行之间的注释会导致编译失败。
我能够让第二个版本发挥作用:
\documentclass[]{beamer}
\setbeamertemplate{frametitle}{
\expandafter\MakeUppercase\expandafter\insertframetitle
}
\begin{document}
\section{Section 1}
\begin{frame}%[allowframebreaks]
{Frame 1}
\tableofcontents
\end{frame}
\end{document}
[allowframebreaks]
但是如果你在框架声明中取消注释,你也会得到错误。 这\tableofcontents
也导致我拥有的一些更复杂的代码出现问题,但我无法在这些 MWE 中重现错误。
答案1
问题是在 中allowframebreaks
添加也是不合法的。Frame 1
\insertframetitle
\usebeamertemplate
\MakeUppercase
我的意见是,如果您想要大写标题,只需将其输入大写即可。不过,这可能有效。
\documentclass[]{beamer}
\usepackage{textcase,regexpatch}
\setbeamertemplate{frametitle}{
\makeatletter
\regexpatchcmd{\insertframetitle}
{(\c{usebeamertemplate}.*)\c{fi}}
{\c{NoCaseChange}\cB\{\1\cE\}\c{fi}}
{}{}%
\makeatother
\MakeTextUppercase{\insertframetitle}
}
\begin{document}
\section{Section 1}
\begin{frame}[allowframebreaks]
{Frame 1}
\tableofcontents
\end{frame}
\end{document}