如果框架标题中包含 LaTeX 标签,如何使用 Beamer 生成框架列表?

如果框架标题中包含 LaTeX 标签,如何使用 Beamer 生成框架列表?

相关:有没有什么办法可以用投影仪生成帧列表?

如果框架标题中没有这样的标签,上述方法有效\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}

结果:

在此处输入图片描述

相关内容