我正在尝试设置自动框架标题和字幕,如下所示:
- 如果框架设置了标题或副标题(甚至设置为
{}
,也会使用)。 - 如果小节标题不为空,则使用节标题作为框架小节标题,使用小节标题作为框架标题。
- 否则,使用章节标题作为框架标题,框架没有副标题。
下面是我尝试过的代码(不遵循上面的第一条规则,取自自动帧标题和字幕)。它不能按预期工作——\subsection*{}
框架标题为空,框架副标题设置为章节标题。
\addtobeamertemplate{frametitle}{
\ifx\insertsubsection\empty
\let\insertframetitle\insertsectionhead
\else
\let\insertframetitle\insertsubsectionhead
\fi
}{}
\addtobeamertemplate{frametitle}{
\ifx\insertsubsection\empty
\else
\let\insertframesubtitle\insertsectionhead
\fi
}{}
\makeatletter
\CheckCommand*\beamer@checkframetitle{%
\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\renewcommand*\beamer@checkframetitle{%
\global\let\beamer@frametitle\relax\@ifnextchar%
\bgroup\beamer@inlineframetitle{}}
\makeatother
有什么提示吗?
答案1
考虑以下代码:
\documentclass{beamer}
\makeatletter
\CheckCommand*\beamer@checkframetitle{%
\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\renewcommand*\beamer@checkframetitle{%
\global\let\beamer@frametitle\relax\@ifnextchar%
\bgroup\beamer@inlineframetitle{}}
\makeatother
\addtobeamertemplate{frametitle}{
\ifx\insertframetitle\empty
\ifx\insertframesubtitle\empty
\ifx\insertsubsection\empty
\frametitle{\insertsectionhead}
\else
\frametitle{\insertsubsectionhead}\framesubtitle{\insertsectionhead}
\fi
\else
\fi
\else
\fi
}{}
\begin{document}
\section{section}
\subsection{subsection}
\begin{frame}
\frametitle{title}
\framesubtitle{subtitle}
Frame with frametitle and framesubtitle set (section and subsection are ignored)
\end{frame}
\begin{frame}
%\frametitle{title}
\framesubtitle{subtitle}
Frame with framesubtitle only (section and subsection are ignored).
\end{frame}
\begin{frame}
%\frametitle{title}
%\framesubtitle{subtitle}
Frame with no frametitle, no framesubtitle, part of a subsection (subsection title is used as frametitle and section title as framesubtitle)
\end{frame}
\section{section}
\begin{frame}
%\subsection{subsection}
%\frametitle{title}
%\framesubtitle{subtitle}
Frame with no frametitle, no framesubtitle and not part of a subsection. Section title is used as frametitle.
\end{frame}
\end{document}
如果您有 ,它也会起作用(即在这种情况下如果没有标题或副标题它仍然显示章节名称作为框架副标题。如果您同时拥有和,\subsection*{}
它则不起作用,即在这种情况下它会将章节或小节名称显示为框架标题。但也许可以解决这个问题,而不必担心用替换。\frametitle{}
\framesubtitle{}
\frametitle{}
\frametitle{~}