![在 Beamer 标题中使用 \alert{} 时出现问题,主题为 metropolis](https://linux22.com/image/320484/%E5%9C%A8%20Beamer%20%E6%A0%87%E9%A2%98%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Calert%7B%7D%20%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%8C%E4%B8%BB%E9%A2%98%E4%B8%BA%20metropolis.png)
我试图强调投影仪文档标题中的某些单词。例如:
\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
您还可以使用\texorpdfstring
from,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}!}
。