为什么在 \insertsection 上使用 \MakeTextUppercase 会导致引用被固定的引用替换?

为什么在 \insertsection 上使用 \MakeTextUppercase 会导致引用被固定的引用替换?

好的,我想做的是:将章节页面上章节标题的文本大小写更改为大写。但是,如果我将命令放入\insertsection\MakeTextUppercase我会收到警告name{NAVIGATION1} has been referenced but does not exist, replaced by a fixed one。如果我删除,\MakeTextUppercase我会删除它,但我也会删除大写。

这是我的 MWE:

\documentclass{beamer}

\usepackage{textcase}

\defbeamertemplate*{section page}{mytemplate}{\MakeTextUppercase{\insertsection}}

\begin{document}
\section{Conclusions}
\frame{\sectionpage}
\end{document}

如何才能避免出现警告并且仍然在我的章节页面上保留大写的章节标题?

答案1

我认为我的设置存在问题:

Beamer 定义\insertsection\def\insertsection{\expandafter\hyperlink\sectionlink}%,因此在我们实际排版链接之前,它需要进行一些扩展!

现在我看了一下\sectionlink,它被定义为{\let\\=\relax\xdef\sectionlink{{Navigation\the\c@page}{\noexpand\secname}}}%。老实说,我不知道这里的 TeX 魔法,但肯定\sectionlink扩展为两个标记。

所以据我所知,我需要确保超链接已创建并且文本已转换为大写,所以我定义了一个新命令\insertsectionuppercase然后使用它。

这是我的工作结果,不再产生警告:

\documentclass{beamer}

\usepackage{textcase}

\newcommand{\insertsectionuppercase}[2]{\hyperlink{#1}{\MakeTextUppercase{#2}}}

\defbeamertemplate*{section page}{mytemplate}{\expandafter\insertsectionuppercase\sectionlink}

\begin{document}
    \section{Conclusions}
    \frame{\sectionpage}
\end{document}

相关内容