我想在 beamer 中自动创建标题,以便环境Frame
将标题设置为这种模式
<current-section> (<frame-number>)
其中<current-section>
是当前节(包括小节或小小节)的标题,<frame-number>
是框架的编号在当前部分内(不是总帧数)。
以下是 MWE:
\documentclass{beamer}
% includes
\usepackage{ifthen}
% commands
\newcommand{\CurrentSectionTitle}{%
\ifthenelse{%
\equal{\insertsubsubsectionhead}{}%
}%
{%
(...)
}%
{\insertsubsubsectionhead}%
}
\newenvironment{Frame}%
{%
\begin{frame}
\frametitle{\CurrentSectionTitle (\insertframenumber)}
}%
{%
\end{frame}
}%
\title{Test}
\author{}
\date{\today}
\begin{document}
\frame{\titlepage}
\frame{
\frametitle{Table Of Contents}
\tableofcontents
}
\section{A}
\subsection{A.1}
\begin{Frame}
\begin{itemize}
\item a
\item b
\end{itemize}
\end{Frame}
\begin{Frame}
\begin{itemize}
\item c
\item d
\end{itemize}
\end{Frame}
\end{document}
我在获取当前章节标题时遇到了麻烦\ifthenelse
,并且不知道如何获取当前章节中当前帧的编号。
有什么想法或指点吗?
答案1
一种可能性是重新定义section
和subsection
命令,以便将当前标题存储到全局定义中(嗯,到目前为止是错误的代码;-))
然后检查subsection
数字是否大于零,如果是,则subsection
包含标题,否则包含section
标题。
这可以进一步解决,特别是到目前为止目录条目都是错误的。
frame
重新定义环境而不是使用 也将是更精细的代码Frame
。
\documentclass{beamer}
% includes
\usepackage{blindtext}
\usepackage{etoolbox}
\let\LaTeXStandardSection\section
\let\LaTeXStandardSubsection\subsection
\def\CurrentSectionTitle{}% Two dummy defs
\def\CurrentSubsectionTitle{}%
\makeatletter
\@addtoreset{subsection}{section}
\@addtoreset{framenumber}{section}
\newrobustcmd{\section@noopt}[1]{%
\gdef\CurrentSectionTitle{#1}%
\LaTeXStandardSection{#1}%
}%
\newrobustcmd{\section@opt}[2][]{%
\gdef\CurrentSectionTitle{#2}%
\LaTeXStandardSection[#1]{#2}%
}%
\renewcommand{\section}{%
\@ifnextchar[{\section@opt}{\section@noopt}%
}%
\newrobustcmd{\subsection@noopt}[1]{%
\gdef\CurrentSubsectionTitle{#1}%
\LaTeXStandardSubsection{#1}%
}%
\newrobustcmd{\subsection@opt}[2][]{%
\gdef\CurrentSubsectionTitle{#2}%
\LaTeXStandardSubsection[#1]{#2}%
}%
\renewcommand{\subsection}{%
\@ifnextchar[{\subsection@opt}{\subsection@noopt}%
}%
\makeatother
\newrobustcmd{\CheckWhichTitleToUse}{%
\ifnumgreater{\number\value{subsection}}{0}{\CurrentSubsectionTitle}{\CurrentSectionTitle}%
}%
% commands
\renewcommand{\theframenumber}{-- Frame \arabic{framenumber}}
\newenvironment{Frame}{%
\begin{frame}{\CheckWhichTitleToUse~\theframenumber}%
}{%
\end{frame}% End code of environment
}% End of newenvironment
\title{Test}
\author{}
\date{\today}
\begin{document}
\frame{\titlepage}
\frame{%
\frametitle{Table Of Contents}
\tableofcontents
}
\section{A}
% No subsection
\begin{Frame}
\begin{itemize}
\item a
\item b
\end{itemize}
\end{Frame}
\subsection{A.1}
\begin{Frame}
\begin{itemize}
\item a
\item b
\end{itemize}
\end{Frame}
\begin{Frame}
\begin{itemize}
\item c
\item d
\end{itemize}
\end{Frame}
\section{Another Section}
\begin{Frame}
\begin{itemize}
\item<1-2> e
\item<2-2> f
\end{itemize}
\end{Frame}
\begin{Frame}
\blindtext
\end{Frame}
\end{document}