在 Beamer 标题中使用 \alert{} 时出现问题,主题为 metropolis

在 Beamer 标题中使用 \alert{} 时出现问题,主题为 metropolis

我试图强调投影仪文档标题中的某些单词。例如:

\documentclass{beamer}
  \usepackage[utf8]{inputenc}
  \usetheme{Warsaw}%\usetheme{m}%-->problem

    \usepackage{tikz}
    \usetikzlibrary{arrows,shapes}


  \title{Hello \protect\alert{World}!}
  \author{}

  \begin{document}

  \begin{frame}
  \titlepage
  \end{frame}

  \end{document}

结果如下:

但我想为文档使用一个主题(大都会:参见https://github.com/matze/mtheme)。问题是,当使用此主题而不是 Warsaw 主题时,编译时会出现错误。错误消息为:

"! Undefined control sequence.
\beamer@sort #1#2->\long \def \beamer@todo
{#1}\def \beamer@ospec {}\beamer@...
l.12 \end{frame}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
! Argument of \beamerx@\alert has an extra }.
<inserted text>
..."

\alert{}有没有办法使用这个主题(或\textbf其他环境)来强调标题的某些部分?

答案1

如果\title定义在 之后\begin{document}但在 之前\maketitle,问题就解决了。

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usetheme{m}%\usetheme{m}%-->problem

\usepackage{tikz}
\usetikzlibrary{arrows,shapes}


\begin{document}
\author{}
\title{Hello \protect\alert{World}!}

\begin{frame}
\titlepage
\end{frame}

\end{document}

TiKZ使用时,类似的解决方案可应用于其他主题。

答案2

您还可以使用\texorpdfstringfrom,hyperref因为问题(一般来说)取决于在收集元数据时使用格式化命令。这样,您就可以防止它\alert与特定于 pdf 的程序接触。编译器通常不喜欢在那里看到纯文本以外的任何内容——尤其是使用TikZ命令时,在这种情况下很难预测编译器如何消化材料。以下是完整代码:

\documentclass{beamer}
  \usetheme{Warsaw}
\usepackage{tikz}
\usepackage{hyperref}

\title{Hello \texorpdfstring{\alert{World}}{World}!}
\author{}

\begin{document}
\begin{frame}
\titlepage
\end{frame}
\end{document}

输出

如果你想更花哨一点,你可以说

\let\oldalert\alert
\renewcommand\alert[1]{\texorpdfstring{\oldalert{#1}}{#1}}

之前\title。这样你就可以继续写\title{Hello \alert{World}!}

相关内容