pdfstringdefDisableCommands 用于带有可选参数的命令(beamer 脚注)

pdfstringdefDisableCommands 用于带有可选参数的命令(beamer 脚注)

我正在尝试从 beamer 框架标题中删除\cite\footnote等 pdf 字符串。我使用 为所有框架标题生成书签\bookmark[page=\the\c@page,level=3]{\beamer@frametitle},因此每当框架标题中出现此类命令时,它们都会造成麻烦。我知道我可以使用 手动解决这些问题\texorpdfstring,但我更希望有“正常工作”的默认值,因为这些错误很容易被忽略。

\boldmath这对于和的基本情况来说没问题\cite{key},但我无法让它与具有可选参数的命令一起使用,例如

\footnote[frame]{footnote text}

我曾尝试过例如

\pdfstringdefDisableCommands{%
  \def\boldmath{}% easy case you'll find in many examples
  \def\cite{\@gobble}% supposedly does not work with optionals either
  \renewcommand<>{\footnote}[1][]{}%
}

但那不起作用。

最小工作示例(问题出在 PDF 中书签!):

\documentclass{beamer}
\usepackage{hyperref,bookmark}
\makeatletter
\setbeamertemplate{frametitle}{\insertframetitle
  \bookmark[page=\the\c@page,level=3]{\beamer@frametitle}}
\makeatother

\begin{document}
\begin{frame}{Frametitle \footnote[frame]{Footnote}}
  Frame text
\end{frame}
\end{document}

此文件将有一个书签,如“Frametitle [frame]Footnote”。我只想要“Frametitle”。我想全局解决这个问题,而不是通过包装为局部解决这个问题\texorpdfstring{\footnote[frame]{Footnote}}{}(这可行,但需要逐一检查所有有问题的框架)。 书签问题

答案1

\documentclass{beamer}
\usepackage{hyperref,bookmark}
\usepackage{xparse}
\makeatletter
\setbeamertemplate{frametitle}{\insertframetitle
  \bookmark[page=\the\c@page,level=3]{\beamer@frametitle}}
\makeatother
\NewExpandableDocumentCommand\gobbleoptandarg{om}{}
\pdfstringdefDisableCommands{\let\footnote\gobbleoptandarg}%
\begin{document}
\begin{frame}{Frametitle \footnote[frame]{Footnote}}
  Frame text
\end{frame}
\end{document}

相关内容