我正在尝试使用\MakeUppercase
该类\insertsectionhead
:beamer
\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
参数的#1
,Navigation\the\c@page
作为#2
和Section 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 链接。