我试图理解为什么这个钩子AtBeginEnvironment{frame}
似乎不适用于这个MWE:
\documentclass{beamer}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usetheme{Madrid}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Redéfinition de l'environnement frame
\AtBeginEnvironment{frame}{%
\frametitle{\thesection - \insertsection}%
\framesubtitle{\thesubsection - \insertsubsection}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\section{section n°1}
\subsection{sous-section 1-1}
\begin{frame}
Texte du slide.
\end{frame}
\end{document}
正常情况下,它应该在框架中打印一个标题和一个副标题,但由于某些我无法理解的原因,它并没有这样做。
谢谢你的帮助。
答案1
在框架环境开始时设置框架标题还为时过早。由于有些人(包括 pandoc 用户)使用极其烦人的语法\begin{frame}{frametitle}{framesubtitle}
,beamer 需要克服许多困难来处理这种复杂的语法。您必须等待\frametitle
beamer 完成此操作后才能使用。
不要弄乱框架环境,禁用 beamer 对框架标题是否存在的检查,并修补框架标题以在框架标题为空时显示部分/子部分:
\documentclass{beamer}
\usepackage{xpatch}
\makeatletter
\patchcmd\beamer@@tmpl@frametitle{\insertframetitle}{%
\ifx\insertframetitle\@empty
\thesection{} - \insertsection
\ifx\insertframesubtitle\@empty
\ifnum\thesubsection>0
\def\insertframesubtitle{\thesubsection{} - \insertsubsection}
\fi\fi
\else
\insertframetitle
\fi
}{}{}
\makeatother
\makeatletter
\CheckCommand*\beamer@checkframetitle{\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\renewcommand*\beamer@checkframetitle{\global\let\beamer@frametitle\relax\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\makeatother
\begin{document}
\section{section 1}
\subsection{sub 1}
\begin{frame}
\end{frame}
\begin{frame}
\frametitle{frametitle}
\framesubtitle{framesub}
\end{frame}
\end{document}
答案2
这里有一种方法:
\documentclass{beamer}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usetheme{Madrid}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Redéfinition de l'environnement frame
\let\oldframe\frame
\def\newframe{%
\oldframe\frametitle{\thesection - \insertsection}%
\framesubtitle{\thesubsection - \insertsubsection}%
}
\def\endnewframe{\endframe}
\renewenvironment{frame}{\newframe}{\endnewframe}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\section{section n°1}
\subsection{sous-section 1-1}
\begin{frame}
Texte du slide.
\end{frame}
\end{document}