MakeUppercase 和 Beamer 的 insertsectionhead 错误

MakeUppercase 和 Beamer 的 insertsectionhead 错误

我正在尝试使用\MakeUppercase该类\insertsectionheadbeamer

\documentclass[]{beamer}
\begin{document}
\section{Section 1}
\begin{frame}{Frame 1}
    \MakeUppercase{\insertsectionhead}
\end{frame}
\end{document}

不幸的是,这个例子产生了一系列错误。有什么想法吗?

答案1

\insertsectionhead申请前你必须进行扩展\MakeUppercase

\documentclass[]{beamer}

\newcommand{\insertsectionHEAD}{%
  \expandafter\insertsectionHEADaux\insertsectionhead}
\newcommand{\insertsectionHEADaux}[3]{#1{#2}{\MakeUppercase{#3}}}

\begin{document}
\section{Section 1}

\begin{frame}{Frame 1}

\insertsectionHEAD

\end{frame}
\end{document}

在你的情况下\insertsectionhead扩展为

\hyperlink{Navigation\the\c@page}{Section 1}

因此我们在它前面添加\insertsectionHEADaux作为\hyperlink参数的#1Navigation\the\c@page作为#2Section 1作为#3,最后

\hyperlink{Navigation \the\c@page}{\MakeUppercase{Section 1}}

执行。这样链接名称就不是大写的了。


不同的解决方案是修补负责定义的命令\insertsectionhead;这可能更好,因为它不需要文档中的不同命令。

\documentclass[]{beamer}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\sectionentry}
  {\def\insertsectionhead{#2}}
  {\def\insertsectionhead{\MakeUppercase{#2}}}
  {}{}
\patchcmd{\beamer@section}
  {\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}}
  {\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{\MakeUppercase{#1}}}}
  {}{}
\makeatother

\begin{document}

\section{Section 1}

\begin{frame}{Frame 1}

\insertsectionhead

\end{frame}
\end{document}

答案2

\documentclass[]{beamer}
\begin{document}
\section{Section 1}
\begin{frame}{Frame 1}
    \MakeUppercase{\expandafter\protect\insertsectionhead}
\end{frame}
\end{document}

只是一点扩展控制。请注意,这确实会调整当前的外观\insertsection,存储的字符串本身仍然是小写的。并且它可能会破坏 pdf 链接。

在此处输入图片描述

相关内容