如果框架标题中没有这样的标签,上述方法有效\emph{}
。但是,如果框架标题中有这样的标签,则错误消息为:
"Undefined control sequence: \end{frame}"
如何修复此问题?
这是一个最小的例子:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\mode<presentation>
{
\usetheme{Boadilla}
\useoutertheme{tree}
\useinnertheme{circles}
\usecolortheme{rose}
\usefonttheme{structurebold}
\setbeamercovered{transparent}
\setbeamertemplate{footline}
}
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother
\addtobeamertemplate{frametitle}{}{%
\addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
\protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}%
\insertframetitle\par}%
}
\begin{document}
\begin{frame}
\listofframes
\end{frame}
\begin{frame}[fragile]
% error location
\frametitle{\emph{emph in frametitle}}
\end{frame}
\end{document}
谢谢。
答案1
要了解使用\emph
导致错误的原因,请参阅脆弱命令和坚固命令之间有什么区别?。
解决方法是\protect
强调标题,从而使用\frametitle{\protect\emph{emph in frametitle}}
。
工作示例:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\mode<presentation>
{
\usetheme{Boadilla}
\useoutertheme{tree}
\useinnertheme{circles}
\usecolortheme{rose}
\usefonttheme{structurebold}
\setbeamercovered{transparent}
\setbeamertemplate{footline}
}
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother
\addtobeamertemplate{frametitle}{}{%
\addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
\protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}%
\insertframetitle\par}%
}
\begin{document}
\begin{frame}
\listofframes
\end{frame}
\begin{frame}[fragile]
\frametitle{\protect\emph{emph in frametitle}}
\end{frame}
\end{document}
结果: