我正在尝试为 Beamer 定义一个自定义主题。我希望有一个包含所有部分的水平列表,但它们之间有一个字符。我拥有的是:
\setbeamertemplate{headline}[text line]{\insertsectionnavigationhorizontal{\paperwidth}{}{}}
我希望看到的是这样的:
Section1 | Section2 | Section3 | Section4
那可能吗?
答案1
是的,这是可能的;虽然不简单,但有可能:
(有时间我会添加一些解释)
\documentclass{beamer}
\usepackage{totcount}
\usepackage{tikz}
\regtotcounter{section}
\newcounter{vertrules}
\setbeamercolor{section in head/foot}{fg=green!40!black}
\setbeamercolor*{frametitle}{fg=green!40!black}
\setbeamercolor{myheadline}{fg=green!40!black,bg=green!10}
\setbeamertemplate{headline}
{%
\begin{beamercolorbox}[wd=\paperwidth]{myheadline}
\vskip1.5ex%
\insertsectionnavigationhorizontal{\paperwidth}{\hskip0pt}{\hskip-12pt}\vskip2pt
\end{beamercolorbox}%
\setcounter{vertrules}{\totvalue{section}}
\ifnum\thevertrules<2 \else
\addtocounter{vertrules}{-1}
\begin{tikzpicture}[remember picture,overlay]
\foreach \i in {1,2,...,\thevertrules}
\draw[ultra thick,green!40!black] (\i*\sectionboxwd+0.5\i,0) -- (\i*\sectionboxwd+0.5\i,1);
\end{tikzpicture}%
\fi%
}
\setbeamertemplate{section in head/foot}{%
\hspace*{-6pt}\setlength\fboxsep{0pt}%
\parbox[c][4ex][t]{\dimexpr\sectionboxwd-5pt\relax}{%
\hfill\parbox{\dimexpr\sectionboxwd-12pt\relax}{%
\raggedright\insertsectionhead%
}\hfill\mbox{}%
}\hspace*{6pt}%
}
\newlength\sectionboxwd
\AtBeginDocument{%
\ifnum\totvalue{section}>0
\setlength\sectionboxwd{\dimexpr\paperwidth/\totvalue{section}\relax}
\else
\setlength\sectionboxwd{\paperwidth}
\fi
}
\begin{document}
\section{Test Section One with a really long title}
\begin{frame}\frametitle{Test frame one}test\end{frame}
\section{Test Section Two}
\begin{frame}\frametitle{Test frame two}test\end{frame}
\section{Test Section Three}
\begin{frame}\frametitle{Test frame three}test\end{frame}
\section{Test Section Four}
\begin{frame}\frametitle{Test frame four}test\end{frame}
\end{document}
一些图像显示了使用垂直规则的结果:
答案2
因此我尝试了一下贡佐拉麦地那这就是我想要的——再次感谢!
\setbeamertemplate{section in head/foot shaded}{%
\color{white}\insertsectionhead\ \ \ \ |
}
\setbeamertemplate{section in head/foot}{%
\insertsectionhead\color{white}\ \ \ \ |
}
\setbeamertemplate{headline}{%
\begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex]{myheadline}
\Tiny\hspace*{4mm} {\hspace*{2ex}\color{white}|\hspace*{-2ex}}\insertsectionnavigationhorizontal{0ex}{}{}
\end{beamercolorbox}%
}
它会打印所有部分以及它们之间的位置|
。白色是因为在我的配色方案中它应该是白色的。
我唯一不知道的是如何更改每个部分的边距/填充。您可以看到我添加的尾随空格。我这样做是为了让每个部分前后的空间相同。