大写框架标题

大写框架标题

我正在尝试让框架标题始终显示大写。我发现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}

相关内容