我想在每个 beamer 框架(或其中某些框架)中自动插入带有其编号的章节标题。我们该如何实现?
答案1
\documentclass{beamer}
\setbeamertemplate{frametitle}{\thesection.~\insertsection~\insertframetitle}
\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 one}
\begin{frame}
blub
\end{frame}
\section{section two}
\begin{frame}
blub
\end{frame}
\end{document}
答案2
在 Latex beamer 文档类中,框架的框架标题(和副标题)定义在beamerouterthemedefault。
要覆盖定义,您可以将定义复制到 Latex 文件中并将其括在\makeatletter
和 中\makeatother
。
例如,要在标题前添加章节编号,请更改以下行并\thesection.~\insertsection:~
在之前添加\insertframetitle
:
\strut\thesection.~\insertsection:~\insertframetitle\strut\par%
完整示例:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usetheme{default}
\makeatletter
\defbeamertemplate*{frametitle}{customized}[1][left]
{%
\ifbeamercolorempty[bg]{frametitle}{}{\nointerlineskip}%
\@tempdima=\textwidth%
\advance\@tempdima by\beamer@leftmargin%
\advance\@tempdima by\beamer@rightmargin%
\begin{beamercolorbox}[sep=0.3cm,#1,wd=\the\@tempdima]{frametitle}
\usebeamerfont{frametitle}%
\vbox{}\vskip-1ex%
\if@tempswa\else\csname beamer@fte#1\endcsname\fi%
% The following line was modified to insert
% section number (\thesection)
% and section title (\insertsection).
\strut\thesection.~\insertsection:~\insertframetitle\strut\par%
{%
\ifx\insertframesubtitle\@empty%
\else%
{\usebeamerfont{framesubtitle}\usebeamercolor[fg]%
{framesubtitle}\insertframesubtitle\strut\par}%
\fi
}%
\vskip-1ex%
\if@tempswa\else\vskip-.3cm\fi% set inside beamercolorbox... evil here...
\end{beamercolorbox}%
}
\makeatother
\begin{document}
\section{Section Title}
\begin{frame}{Frame Title}
Some text.
\end{frame}
\end{document}
结果: