1

I use the following code to create a section navigation bar:

\setbeamercolor{section in head/foot}{bg=blue,fg=white}
\addtobeamertemplate{footline}{%
    \leavevmode%
    \hbox{%
        \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,center]{section in head/foot}%
            \insertsectionnavigationhorizontal{\paperwidth}{}{}
        \end{beamercolorbox}}%

}{}

Now the navigation bar has blue background, and white font for current section while gray font for other sections. But is it possible to have different background colors for those? For example, dark blue bg for the current section, and light blue bg for other sections?

The whole beamer tex file is just this very minimal one.

\documentclass{beamer}

\usetheme{Madrid}
\title{Title}
\author{Author}
\date{\today}
\addtobeamertemplate{footline}{%
    \leavevmode%
    \hbox{%
        \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
            \insertsectionnavigationhorizontal{\paperwidth}{}{}
        \end{beamercolorbox}}%

}{}

\begin{document}
\titlepage
\section{Sec 1}
\begin{frame}{Frame Title}{Frame Subtitle}
    Frame contents
    \begin{itemize}
        \item Item 1
        \item Item 2
              \begin{itemize}
                  \item Subitem 2.1
                  \item Subitem 2.2
              \end{itemize}
    \end{itemize}
    This is \textbf{bold text for normal text}.
\end{frame}

\section{Sec 2}
\begin{frame}{Frame Title}{Frame Subtitle}
    \begin{block}{Block}
        This is \textbf{bold text for blocks}.
    \end{block}
    \begin{alertblock}{Alert Block}
        This is \textbf{bold text for alert blocks}.
    \end{alertblock}
    \begin{example}
        This is \textbf{bold text for example blocks}.
    \end{example}
    \begin{block}{}
        \centering
        This is \textbf{bold text for unnamed blocks}.
    \end{block}
\end{frame}

\end{document}

And the result is enter image description here

As easily seen, the sec 1 and sec 2 in the navigation bar seems to belong to a whole, long horizontal bar without any boundary between them. They share the same background color, just with the current one highlighted. I would like to make different background colors for them. Is that possible?

2
  • Please add a short, but compilable test file which allows us to reproduce the problem. It should include a class, the necessary packages and a document environment. Commented Jan 13 at 11:54
  • @samcarter_is_at_topanswers.xyz Thank you for your reminder! I added more information here.
    – Isaac Wang
    Commented Jan 14 at 20:17

1 Answer 1

0

You could redefine the section in head/foot (shaded) templates to include some kind of colorbox:

\documentclass{beamer}

\usetheme{Madrid}
\title{Title}
\author{Author}
\date{\today}

\addtobeamertemplate{footline}{%
    \leavevmode%
    \hbox{%
        \begin{beamercolorbox}[wd=\paperwidth,ht=2.5ex,dp=1.1ex,center]{author in head/foot}%
            \insertsectionnavigationhorizontal{\paperwidth}{}{\hskip0pt plus1filll}
        \end{beamercolorbox}}%

}{}

\makeatletter
\newcommand{\secwidth}{\dimexpr\paperwidth/\beamer@sectionmax-2\fboxsep\relax}

\setbeamertemplate{section in head/foot}{\colorbox{orange}{\parbox{\secwidth}{\centering\insertsectionhead}}}
\setbeamertemplate{section in head/foot shaded}{\colorbox{cyan}{\parbox{\secwidth}{\centering\insertsectionhead}}}

\def\insertsectionnavigationhorizontal#1#2#3{%
  \hbox to #1{{%
     \def\slideentry##1##2##3##4##5##6{}%
     #2%\hskip.3cm%
     \usebeamerfont{section in head/foot}\usebeamercolor[fg]{section in head/foot}%
     \setbox\beamer@sectionbox=\hbox{}%
     \ht\beamer@sectionbox=1.875ex%
     \dp\beamer@sectionbox=0.75ex%
     \dohead%
     \box\beamer@sectionbox\hfil%\hskip.3cm%
     #3}}}
     
\def\sectionentry#1#2#3#4#5{% section number, section title, page
  \beamer@xpos=0\relax%
  \beamer@ypos=1\relax%
  \beamer@ypos@offset=0\relax%
  \ifnum#5=\c@part%
  \beamer@section@set@min@width%
  \box\beamer@sectionbox\hskip0ex plus 1fill%
  \setbox\beamer@sectionbox=
  \hbox{\def\insertsectionhead{#2}%
    \def\insertsectionheadnumber{#1}%
    \def\insertpartheadnumber{#5}%
    {%
      \usebeamerfont{section in head/foot}\usebeamercolor[fg]{section in head/foot}%
      \ifnum\c@section=#1%
        \hyperlink{Navigation#3}{{\usebeamertemplate{section in head/foot}}}%
      \else%
        \hyperlink{Navigation#3}{{\usebeamertemplate{section in head/foot shaded}}}%
      \fi}%
  }%
  \ht\beamer@sectionbox=1.875ex%
  \dp\beamer@sectionbox=0.75ex%
  \fi\ignorespaces}     
\makeatother

\begin{document}

\section{Sec 1}
\begin{frame}
\end{frame}

\section{Sec 2}
\begin{frame}
\end{frame}

\section{Sec 3}
\begin{frame}
\end{frame}

\end{document}

enter image description here

4
  • Thank you very much! Just wondering is it possible to let it expand and occupy the whole width? i.e. no gap between sections and no gap on the side of the bar.
    – Isaac Wang
    Commented Jan 14 at 21:44
  • @IsaacWang See my updated answer Commented Jan 14 at 22:25
  • Thank you so much! That's exactly the thing I want!
    – Isaac Wang
    Commented Jan 15 at 2:20
  • @IsaacWang You're welcome! Commented Jan 15 at 8:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .