是否可以将 beamer 模板设置为与另一个模板相同?我定义了一个名为“myTemplate page”的模板,我希望该模板与“section page”模板相同。这样做的目的是,如果有人更改主题,可能会更改 section page 模板,我希望 myTemplate 也随之更改。例如,在 MWE 中,Frankfurt 主题将 section page 参数设置为colsep=-4bp,rounded=true,shadow=\beamer@themerounded@shadow
。我如何在事先不知道的情况下将这些设置直接传递给“myTemplate page”?
\documentclass{beamer}
\usetheme{Frankfurt}
\AtBeginSection[]{%
\frame{\sectionpage}
}%
\def\myTemplatepage{\usebeamertemplate*{myTemplate page}}
\defbeamertemplate*{myTemplate page}{default}[1][]
{
\begingroup
\centering
{\usebeamerfont{section name}
\usebeamercolor[fg]{section name} Some text}
\vskip1em\par
\begin{beamercolorbox}[sep=12pt,center,#1]{section title}
\usebeamerfont{section title} Some other text \par
\end{beamercolorbox}
\endgroup
}
\begin{document}
\section{First section}
\begin{frame}{}
\myTemplatepage
\end{frame}
\end{document}
更新
我尝试添加
\defbeamertemplateparent{section page}{myTemplate page}[1][default]{[#1]}
(按照 TobiBS 的建议)但似乎什么也没做。另外,我猜测模板修改应该在定义模板父级之后进行,所以我将 移到了 之后\usetheme{Frankfurt}
,\defbeamertemplateparent
但没有任何结果。
我没有找到很多带有\defbeamertemplateparent
或 的示例\defbeamertemplatealias
。我可能不明白它们是如何工作的。但感觉它应该可以工作!
更新2
我查看了课堂上提供的主题beamer
,我认为唯一会相互影响的section page template
是圆角和阴影。所以我决定在序言中手动检查这两个内容并将其应用于myTemplate page
。这真的不是我想要的解决方案,但这是我目前能做的最好的。我更喜欢更通用的东西。我使用该etoolbox
包进行布尔测试。
\AtBeginDocument{%
\@ifpackageloaded{beamerinnerthemerounded}{%
\ifcsdef{beamer@themerounded@shadow}{%
\edef\x{\beamer@themerounded@shadow}%
\ifboolexpe{bool {\x}}{%
\setbeamertemplate{myTemplate page}[default][colsep=-4bp, rounded=true,
shadow=true]%
}{\setbeamertemplate{myTemplate page}[default][colsep=-4bp, rounded=true]}
}{}%
}{}%
}%
答案1
Beamer 的结构不适合处理章节。相反,我会将其用作\part
节之上的下一个节级。“部分”一词可以轻松替换为“章节”或任何您想要的称呼。
\documentclass{beamer}
\usetheme{Frankfurt}
\renewcommand\partname{Chapter}
\AtBeginSection[]{%
\frame{\sectionpage}
}%
\AtBeginPart{
\frame{\partpage}
}
\begin{document}
\part{Chapter title}
\section{First section}
\begin{frame}
content...
\end{frame}
\end{document}
如果确实想自己创建章节,您可以使用现有的section page
并更改一些文字:
\documentclass{beamer}
\usetheme{Frankfurt}
\AtBeginSection[]{%
\frame{\sectionpage}
}%
\newcounter{chapter}
\setcounter{chapter}{42}
\newcommand{\chapterpage}[1]{
\renewcommand{\sectionname}{Chapter}
\renewcommand{\insertsectionnumber}{\thechapter}
\renewcommand{\insertsection}{#1}
\sectionpage
}
\begin{document}
\begin{frame}{}
\chapterpage{Some title}
\end{frame}
\section{First section}
\end{document}