Latex Beamer: Increase spacing between sections in section navigation bar - latex

I would like to modify my Latex Beamer Template.
Hence, I would like to increase the space between the displayed sections in the section navigation bar. At the moment the are left indented but the sections are way to close together.
I use the following code to generate the headline:
setbeamertemplate{headline}{%
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1.125ex]{palette tertiary}%
\insertsectionnavigationhorizontal{\paperwidth}{}{\hskip0pt plus1filll}
\end{beamercolorbox}%
}
}
How can I modify the spacing between the displayed section?

The tipple fill plus1filll you insert after the navigation makes it flush left. If you remove it, the sections will automatically be distributed within the available paper width:
\documentclass{beamer}
\setbeamertemplate{headline}{%
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1.125ex]{palette tertiary}%
\insertsectionnavigationhorizontal{\paperwidth}{}{}
\end{beamercolorbox}%
}
}
\begin{document}
\section{title}
\begin{frame}
content...
\end{frame}
\section{title}
\begin{frame}
content...
\end{frame}
\end{document}
If you want to keep the sections flush left and just add some additional space between:
\documentclass{beamer}
\setbeamertemplate{headline}{%
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=\paperwidth,ht=3ex,dp=1.125ex]{palette tertiary}%
\insertsectionnavigationhorizontal{\paperwidth}{}{\hskip0pt plus1filll}
\end{beamercolorbox}%
}
}
\setbeamertemplate{section in head/foot}{\insertsectionhead\hspace{0.5cm}}
\begin{document}
\section{title}
\begin{frame}
content...
\end{frame}
\section{title}
\begin{frame}
content...
\end{frame}
\end{document}

Related

How to set text margin without conflict with block environment?

I want to decrease the margin between the content text and the page edge. I follow the method from: https://tex.stackexchange.com/questions/354022/modifying-the-margins-of-all-slides-in-beamer by using \setbeamersize{text margin left=1.40mm, text margin left=1.40mm}.
However, it will make the block not centered in the slide. Thus, how do I set the text margin without influencing the setting of the block?
Is there another way to set the text margin?
The full scripts as follows:
\documentclass[t]{beamer}
\usetheme{Madrid}
\usecolortheme{beaver}
\usefonttheme{structurebold}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{multicol}
\title[Short title]{Full Title of the Talk}
\author{JJ XX}
\institute[UCLA]
{
University of California \\
\medskip
\textit{jx#111.com}
}
\date{\today}
% set the text margin
\setbeamersize{text margin left=1.40mm, text margin left=1.40mm}
\settowidth{\leftmargini}{\usebeamertemplate{itemize item}}
\settowidth{\leftmargini}{\usebeamertemplate{enumerate item}}
\addtolength{\leftmargini}{-0.2\labelsep}
\begin{document}
\begin{frame}
\titlepage % Print the title page as the first slide
\end{frame}
\begin{frame}
\frametitle{Contents}
\begin{multicols}{2}
\tableofcontents
\end{multicols}
\end{frame}
\section{blocka}
\begin{frame}
\frametitle{blocka}
\begin{itemize}
\item First
\item Second
\end{itemize}
\begin{exampleblock}{Introduction to Beamer}
Beamer is a class of \LaTeX.
\end{exampleblock}
\end{frame}
\section{blockb}
\begin{frame}
The second example.
\frametitle{blockb}
\begin{block}{Beamer Intro}
New is New.
\end{block}
\end{frame}
The margins of beamer blocks are designed in such a way that the text within the block is still aligned with the surrounding text. If you set the margin independently, this will break this alignment:
\documentclass[t]{beamer}
\usetheme{Madrid}
\usecolortheme{beaver}
\setbeamersize{text margin left=1.40mm, text margin left=1.40mm}
\makeatletter
\setbeamertemplate{block begin}
{%
\par\vskip\medskipamount%
\hfill\begin{minipage}{.98\textwidth}%
\begin{beamerboxesrounded}[upper=block title,lower=block body,shadow=true]%
{\raggedright\usebeamerfont*{block title}\insertblocktitle}%
\raggedright%
\usebeamerfont{block body}%
}
\setbeamertemplate{block end}
{\end{beamerboxesrounded}\end{minipage}\vskip\smallskipamount}
\makeatother
\begin{document}
\begin{frame}
The second example.
\frametitle{blockb}
\begin{block}{Beamer Intro}
New is New.
\end{block}
\end{frame}
\end{document}
Alternatively, you could use the tcolorbox inner theme:
\documentclass[t]{beamer}
\usetheme{Madrid}
\usecolortheme{beaver}
\setbeamersize{text margin left=1.40mm, text margin left=1.40mm}
\useinnertheme{tcolorbox}
\tcbset{
center,
width=\linewidth
}
\begin{document}
\begin{frame}
The second example.
\frametitle{blockb}
\begin{block}{Beamer Intro}
New is New.
\end{block}
\end{frame}
\end{document}

How can I create different content slides?

I know how to create different backgrounds for title slides with
\defbeamertemplate{background}{title_horizontal}{
...
}
then assign them to the title page (and remove footline for title) with
\def\ps#titlepage#horizontal{%
\setbeamertemplate{background}[title_horizontal]
\setbeamertemplate{footline}{}
}
and then create a text layout with matching background with
\defbeamertemplate*{title page}{custom}[1]{
\ifthenelse{\equal{#1}{horizontal}}
{
\thispagestyle{titlepage#horizontal}
}{}
...
}
and use them in the document with
\setbeamertemplate{title page}[custom][horizontal]
However, I was not able to find anything about how to create and select different layouts of normal content slides.
Is it possible to create different layouts for normal content slides in a similar way?
What is the keyword for content slides?
You could use the same technique as in https://topanswers.xyz/tex?q=1162#a1369 :
\documentclass{beamer}
\usepackage{tikz}
\makeatletter
\defbeamertemplate{background canvas}{image}[1][]{%
\begin{tikzpicture}[remember picture,overlay,inner sep=0pt,outer sep=0pt]
\node[anchor=east] at (current page.east) {\includegraphics[height=\paperheight]{#1}};
\end{tikzpicture}%
}
\BeforeBeginEnvironment{frame}{%
\setbeamertemplate{background canvas}[default]%
}
\makeatletter
\define#key{beamerframe}{myimage}[]{
\setbeamertemplate{background canvas}[image][#1]%
}
\makeatother
\begin{document}
\begin{frame}[plain,myimage=example-image-golden-upright]
\begin{columns}[onlytextwidth]
\begin{column}{.5\textwidth}
image frame
\end{column}
\begin{column}{.5\textwidth}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
regular
\end{frame}
\end{document}

Beamer Slide header is not including subsubsection

I am using beamer to make my slides. I managed to have the subsections show in the header. For example subsection of Security is (1) Background (2) PerSpectron (3) Commercial ....
How can I add subsubsections in the header too? For example, I want to have several subsections to the background appear in an extra column in the header, similar to subsections. Is there any way to do this? Thank you.
First I'd like to quote the beamer users guide:
"Do not use subsubsections, they are evil."
If you want to torture your audience, you can use this quick hack. Make sure that:
you have more sections/subsections than subsubsections, otherwise the height might be wrong
you set the counter for the number of subsubsection in each subsection
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{pgffor}
\newcounter{totalsubsub}
\AtBeginSubsubsection[]{\label{subsubsec:\thesection:\thesubsection:\thesubsubsection}}
\makeatletter
\setbeamertemplate{headline}{%
\leavevmode%
\#tempdimb=2.4375ex%
\ifnum\beamer#subsectionmax<\beamer#sectionmax%
\multiply\#tempdimb by\beamer#sectionmax%
\else%
\multiply\#tempdimb by\beamer#subsectionmax%
\fi%
\ifdim\#tempdimb>0pt%
\advance\#tempdimb by 1.825ex%
\begin{beamercolorbox}[wd=.33\paperwidth,ht=\#tempdimb]{section in head/foot}%
\vbox to\#tempdimb{\vfil\insertsectionnavigation{.33\paperwidth}\vfil}%
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.34\paperwidth,ht=\#tempdimb]{subsection in head/foot}%
\vbox to\#tempdimb{\vfil\insertsubsectionnavigation{.33\paperwidth}\vfil}%
\end{beamercolorbox}%
\begin{beamercolorbox}[leftskip=3.3ex,wd=.33\paperwidth,ht=\#tempdimb]{section in head/foot}%
\begin{minipage}[b][\#tempdimb][c]{.9\linewidth}%
\ifnum\thetotalsubsub>0
\foreach \i in {1,...,\thetotalsubsub}{%
\ifnum\i=\thesubsubsection
\usebeamercolor[fg]{subsubsection in sidebar}
\else
\usebeamercolor[fg]{subsubsection in sidebar shaded}
\fi
\hyperlink{subsubsec:\thesection:\thesubsection:\i}{\nameref{subsubsec:\thesection:\thesubsection:\i}}\par
}
\fi
\end{minipage}%
\end{beamercolorbox}%
\fi%
}
\makeatother
\begin{document}
\section{section}
\subsection{sub 1}
\setcounter{totalsubsub}{3}
\subsubsection{subsub 1}
\begin{frame}
subsub 1
\end{frame}
\subsubsection{subsub 2}
\begin{frame}
subsub 2
\end{frame}
\subsubsection{subsub 3}
\begin{frame}
subsub 3
\end{frame}
\subsection{sub 2}
\setcounter{totalsubsub}{0}
\begin{frame}
abc
\end{frame}
\subsection{sub 3}
\setcounter{totalsubsub}{2}
\begin{frame}
content...
\end{frame}
\subsubsection{subsub 1}
\begin{frame}
subsub 1
\end{frame}
\subsubsection{subsub 2}
\begin{frame}
subsub 2
\end{frame}
\end{document}

Vim beamer: dynamic frame title

I am trying to create a new command in Latex Beamer to automatically add the frame title and subtitle with respected to section and subsection. In general, my command will look like:
\newcommand {\myframe}[1] {
\begin{frame}
if in a section {
\frametitle{\secname}
}
if in a subsection {
\framesubtitle{\subsecname}
}
#1
\end{frame}
}
How can I detect whether the frame is in a section or subsection?
You can add conditionals to the \section and \subsection command, which you can use to test within your \myframe macro:
\documentclass{beamer}
\let\Tiny\tiny% http://tex.stackexchange.com/a/94159/5764
\newif\ifinsection
\newif\ifinsubsection
\let\oldsection\section
\renewcommand{\section}{%
\global\insectiontrue% In section
\global\insubsectionfalse% Not in subsection
\oldsection}
\let\oldsubsection\subsection
\renewcommand{\subsection}{%
%\global\insectionfalse% No in section
\global\insubsectiontrue% In subsection
\oldsubsection}
\newcommand {\myframe}[1] {%
\begin{frame}
\ifinsection\frametitle{\secname}\fi
\ifinsubsection\framesubtitle{\subsecname}\fi
#1
\end{frame}
}
\begin{document}
\begin{frame}
\frametitle{A frame}
\end{frame}
\section{A section}
\myframe{Some content}
\subsection{A subsection}
\myframe{Some content}
\end{document}

How to split table of contents across multiple slides with Latex Beamer?

I currently am preparing some slides for a presentation and am using Latex with the Beamer package. Currently the sections and subsections of my presentation cause the presentation overview text in the table of contents slide to extend past the bottom of the page.
Is there a way to split my table of contents up so they are displayed across multiple slides?
\begin{frame}[allowframebreaks]{Outline}
The above code will split any over hang across multiple slides.
You can also try:
\begin{frame}[shrink]{Outline}
The above will try to shrink content to fit frame margins.
You can divide your presentations in parts with
\part{1} .... \part{n}
then you can show the toc of every part on an other slide with
\tableofcontents[part=1]
If you use
\tableofcontents[currentsection]
only the toc of the part will be displayed...
If you split the table of contents manually, you have more fine control to select a good break point:
\documentclass{beamer}
\begin{document}
\begin{frame}
\only<1>{\tableofcontents[sections={1-4}]}
\only<2>{\tableofcontents[sections={5-}]}
\end{frame}
\section{title1}
\begin{frame}
content...
\end{frame}
\section{title2}
\begin{frame}
content...
\end{frame}
\section{title3}
\begin{frame}
content...
\end{frame}
\section{title4}
\begin{frame}
content...
\end{frame}
\section{title5}
\begin{frame}
content...
\end{frame}
\section{title6}
\begin{frame}
content...
\end{frame}
\section{title7}
\begin{frame}
content...
\end{frame}
\section{title8}
\begin{frame}
content...
\end{frame}
\end{document}

Resources