如何在 beamer 中根据章节标题自动创建标题?

如何在 beamer 中根据章节标题自动创建标题?

我想在 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

一种可能性是重新定义sectionsubsection命令,以便将当前标题存储到全局定义中(嗯,到目前为止是错误的代码;-))

然后检查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}

带章节标题的框架 带小节标题的框架

相关内容