我正在尝试更改 Beamer 演示文稿中目录的颜色,例如更改 Beamer 目录中的颜色和项目符号除了我想让每个部分的“项目符号”具有不同的颜色。也许这需要重新实现宏\tableofcontents
,我愿意这样做,但有人知道更简单的方法吗?(有包吗?)我目前对华沙主题感兴趣,但对任何主题的意见都将不胜感激。
答案1
您必须重新定义\sectionintoc
命令(原始定义位于 中beamerbasetoc.sty
),并且根据使用的选项,重新定义其他模板;在下面的示例中,我重新定义了section in toc
默认circle
选项的模板(原始定义位于 中beamerbaseauxtemplates.sty
);模板负责使用特殊装饰(示例中的圆圈),但命令实际上控制信息在目录中的显示方式。可以根据节计数器使用条件选择颜色方案\ifcase
。在下面的示例代码中,我使用 标记了用于重新定义的行%NEW
:
\documentclass{beamer}
\usetheme{Warsaw}
\makeatletter
\newcommand\SectionColor{black}%NEW
\setbeamertemplate{section in toc}
{\leavevmode\leftskip=2ex%
\llap{%
\usebeamerfont*{section number projected}%
\usebeamercolor{section number projected}%
\begin{pgfpicture}{-1ex}{0ex}{1ex}{2ex}
\color{\SectionColor}%NEW
\pgfpathcircle{\pgfpoint{0pt}{.75ex}}{1.3ex}
\pgfusepath{fill}
\pgftext[base]{\color{fg}\inserttocsectionnumber}
\end{pgfpicture}\kern1.25ex%
}%
\inserttocsection\par}
\def\sectionintoc{}
\def\beamer@sectionintoc#1#2#3#4#5{%
\ifnum\c@tocdepth>0%
\ifnum#4=\beamer@showpartnumber%
{
\beamer@saveanother%
\gdef\beamer@todo{}%
\beamer@slideinframe=#1\relax%
\expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
\beamer@tempcount=#5\relax%
\renewcommand\SectionColor{%NEW
\ifcase\the\beamer@tempcount\or green!30!black\or yellow!60!black\or blue!20!black\or orange!30!black\else magenta!30!black\fi } %NEW
\advance\beamer@tempcount by\beamer@sectionadjust%
\edef\inserttocsectionnumber{\the\beamer@tempcount}%
\def\inserttocsection{\hyperlink{Navigation#3}{#2}}%
\beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}%
{
\ifbeamer@pausesections\pause\fi%
\ifx\beamer@toc@ooss\beamer@hidetext
\vskip1.5em
\else
\vfill
\fi
{%
\hbox{\vbox{%
\def\beamer@breakhere{\\}%
\beamer@tocact{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}{section in toc}}}%
\par%
}%
}%
}
}%
\beamer@restoreanother%
}
\beamer@todo%
\fi\fi%
}
\makeatother
\begin{document}
\begin{frame}
\tableofcontents
\end{frame}
\section{One}
\begin{frame}test\end{frame}
\section{Two}
\begin{frame}test\end{frame}
\section{Three}
\begin{frame}test\end{frame}
\section{Four}
\begin{frame}test\end{frame}
\section{Five}
\begin{frame}test\end{frame}
\end{document}