Meine Navigationsleiste in Beamer ist in ihrer aktuellen Formatierung zu lang. Ich habe überlegt, die Kreisnavigation auf mehrere Zeilen umzustellen, aber dadurch nimmt die vertikale Navigationsleiste zu viel Platz ein. Ich meine, mich irgendwann einmal an eine Präsentation erinnert zu haben, in der die Kreise zu einem einzigen Kreis zusammenfallen, es sei denn, sie befinden sich tatsächlich innerhalb des aktuellen Unterabschnitts, wo sie sich wieder ausdehnen und an dieser Stelle Punkte für jeden Frame haben.
Ich wäre für Vorschläge dankbar, wie ich die einzeilige Navigationsleiste so beibehalten kann, wie ich sie habe, aber auch für Möglichkeiten, die Leiste so zu verdichten, dass sie in meine vorhandene Breite passt.
Ich meine mich auch an eine Präsentation zu erinnern, bei der es Linien zwischen den kreisförmigen Navigationsmarkierungen für jeden Unterabschnitt der Präsentation gab, aber ich konnte bisher nichts darüber finden, wie man das macht. Wenn Sie mir sagen könnten, wo das zu finden ist, wäre das großartig.
Dank im Voraus.
Antwort1
Die Beamer-Vorlage „Mini-Frames“ verfügt über 3 vordefinierte Vorlagen:
[default]
zeigt kleine Kreise als Minirahmen[box]
zeigt kleine Rechtecke als Minirahmen[tick]
zeigt kleine vertikale Balken als Minirahmen
So könnte man zum Beispiel einfach auf die tick
Vorlage umsteigen, da diese nicht so viel Platz einnimmt:
\setbeamertemplate{mini frame}[tick]
\setbeamertemplate{mini frame in current subsection}{tick}
Aber es scheint, als ob Sie die Kreise behalten möchten. Warum also nicht einfach verkleinern? Dazu müssen Sie die mini frame
Vorlagen neu definieren. Also habe ich einfach die Vorlage kopiert default
, sie umbenannt scaled circle
und einen Skalierungsfaktor eingeführt.
\defbeamertemplate{mini frame}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
[action]
{
\newlength{\myminiframesize}
\setlength{\myminiframesize}{0.14cm}
\newlength{\myminiframeoffset}
\setlength{\myminiframeoffset}{0.03cm}
\setbeamersize{mini frame size=#1\myminiframesize,mini frame offset=#1\myminiframeoffset}
}
\defbeamertemplate{mini frame in current section}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current subsection}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
Sie können es dann einfach laden mit
\setbeamertemplate{mini frame}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current section}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current subsection}[scaled circle]{0.7}
wobei 0.7
der Skalierungsfaktor ist.
Komplettes MWE:
\documentclass[compress]{beamer}
\usepackage{calc}
\useoutertheme{miniframes}
\defbeamertemplate{mini frame}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
[action]
{
\newlength{\myminiframesize}
\setlength{\myminiframesize}{0.14cm}
\newlength{\myminiframeoffset}
\setlength{\myminiframeoffset}{0.03cm}
\setbeamersize{mini frame size=#1\myminiframesize,mini frame offset=#1\myminiframeoffset}
}
\defbeamertemplate{mini frame in current section}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current subsection}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\setbeamertemplate{mini frame}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current section}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current subsection}[scaled circle]{0.7}
\begin{document}
\section{Section 1}
\subsection{Subsection 1}
\frame{Frame 1}
\frame{Frame 2}
\frame{Frame 3}
\frame{Frame 4}
\frame{Frame 5}
\frame{Frame 6}
\frame{Frame 7}
\frame{Frame 8}
\frame{Frame 9}
\frame{Frame 10}
\subsection{Subsection 2}
\frame{Frame 1}
\frame{Frame 2}
\frame{Frame 3}
\frame{Frame 4}
\frame{Frame 5}
\frame{Frame 6}
\frame{Frame 7}
\frame{Frame 8}
\frame{Frame 9}
\frame{Frame 10}
\end{document}
Skalierungsfaktor = 0,7
Skalierungsfaktor = 1
Skalierungsfaktor = 2
BEARBEITEN – Kreise verbinden
\makeatletter
\def\slideentry#1#2#3#4#5#6{%
%section number, subsection number, slide number, first/last frame, page number, part number
\ifnum#6=\c@part\ifnum#2>0\ifnum#3>0%
\ifbeamer@compress%
\advance\beamer@xpos by1\relax%
\else%
\beamer@xpos=#3\relax%
\beamer@ypos=#2\relax%
\fi%
\hbox to 0pt{%
\beamer@tempdim=-\beamer@vboxoffset%
\advance\beamer@tempdim by-\beamer@boxsize%
\multiply\beamer@tempdim by\beamer@ypos%
\advance\beamer@tempdim by -.05cm%
\raise\beamer@tempdim\hbox{%
\beamer@tempdim=\beamer@boxsize%
\multiply\beamer@tempdim by\beamer@xpos%
\advance\beamer@tempdim by -\beamer@boxsize%
\advance\beamer@tempdim by 1pt%
\kern\beamer@tempdim
\global\beamer@section@min@dim\beamer@tempdim
\hbox{\beamer@link(#4){%
\usebeamerfont{mini frame}%
\ifnum\c@section=#1%
\ifnum\c@subsection=#2%
\usebeamercolor[fg]{mini frame}%
\ifnum\c@subsectionslide=#3%
\ifnum#3=1%
\usebeamertemplate{mini frame first}%\beamer@minislidehilight%
\else%
\usebeamertemplate{mini frame}%\beamer@minislidehilight%
\fi
\else%
\ifnum#3=1%
\usebeamertemplate{mini frame in current subsection first}%
\else%
\usebeamertemplate{mini frame in current subsection}%\beamer@minisliderowhilight%
\fi
\fi%
\else%
\usebeamercolor{mini frame}%
%\color{fg!50!bg}%
\usebeamertemplate{mini frame in other subsection}%\beamer@minislide%
\fi%
\else%
\usebeamercolor{mini frame}%
%\color{fg!50!bg}%
\usebeamertemplate{mini frame in other subsection}%\beamer@minislide%
\fi%
}}}\hskip-10cm plus 1fil%
}\fi\fi%
\else%
\fakeslideentry{#1}{#2}{#3}{#4}{#5}{#6}%
\fi\ignorespaces
}
\makeatother
\defbeamertemplate{mini frame}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathmoveto{\pgfpoint{0cm}{#1 * 0.05cm}}
\pgfpathlineto{\pgfpoint{#1 * -0.04cm}{#1 * 0.05cm}}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
[action]
{
\newlength{\myminiframesize}
\setlength{\myminiframesize}{0.14cm}
\newlength{\myminiframeoffset}
\setlength{\myminiframeoffset}{0.03cm}
\setbeamersize{mini frame size=#1\myminiframesize,mini frame offset=#1\myminiframeoffset}
}
\defbeamertemplate{mini frame first}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current section}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathmoveto{\pgfpoint{0cm}{#1 * 0.05cm}}
\pgfpathlineto{\pgfpoint{#1 * -0.04cm}{#1 * 0.05cm}}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in other section}{scaled circle}[1]
{%
\color{fg!50!bg}
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current subsection}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathmoveto{\pgfpoint{0cm}{#1 * 0.05cm}}
\pgfpathlineto{\pgfpoint{#1 * -0.04cm}{#1 * 0.05cm}}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current subsection first}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in other subsection}{scaled circle}[1]
{%
\color{fg!50!bg}
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\setbeamertemplate{mini frame}[scaled circle]{0.7}
\setbeamertemplate{mini frame first}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current section}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current subsection}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current subsection first}[scaled circle]{0.7}
\setbeamertemplate{mini frame in other section}[scaled circle]{0.7}
\setbeamertemplate{mini frame in other subsection}[scaled circle]{0.7}
Ausgabe:
EDIT 2 – Andere Unterabschnitte ausblenden
\makeatletter
\def\slideentry#1#2#3#4#5#6{%
%section number, subsection number, slide number, first/last frame, page number, part number
\ifnum#6=\c@part\ifnum#2>0\ifnum#3>0%
\ifbeamer@compress%
\ifnum\c@section=#1
\ifnum\c@subsection=#2
\advance\beamer@xpos by1\relax%
\else%
\ifnum#3=1%
\advance\beamer@xpos by1\relax%
\fi
\fi
\else%
\ifnum#3=1%
\advance\beamer@xpos by1\relax%
\fi
\fi
\else%
\beamer@xpos=#3\relax%
\beamer@ypos=#2\relax%
\fi%
\hbox to 0pt{%
\beamer@tempdim=-\beamer@vboxoffset%
\advance\beamer@tempdim by-\beamer@boxsize%
\multiply\beamer@tempdim by\beamer@ypos%
\advance\beamer@tempdim by -.05cm%
\raise\beamer@tempdim\hbox{%
\beamer@tempdim=\beamer@boxsize%
\multiply\beamer@tempdim by\beamer@xpos%
\advance\beamer@tempdim by -\beamer@boxsize%
\advance\beamer@tempdim by 1pt%
\kern\beamer@tempdim
\global\beamer@section@min@dim\beamer@tempdim
\hbox{\beamer@link(#4){%
\usebeamerfont{mini frame}%
\ifnum\c@section=#1%
\ifnum\c@subsection=#2%
\usebeamercolor[fg]{mini frame}%
\ifnum\c@subsectionslide=#3%
\ifnum#3=1%
\usebeamertemplate{mini frame first}%\beamer@minislidehilight%
\else%
\usebeamertemplate{mini frame}%\beamer@minislidehilight%
\fi
\else%
\ifnum#3=1%
\usebeamertemplate{mini frame in current subsection first}%
\else%
\usebeamertemplate{mini frame in current subsection}%\beamer@minisliderowhilight%
\fi
\fi%
\else%
\ifnum#3=1%
\usebeamercolor{mini frame}%
%\color{fg!50!bg}%
\usebeamertemplate{mini frame in other subsection}%\beamer@minislide%
\fi
\fi%
\else%
\ifnum#3=1%
\usebeamercolor{mini frame}%
%\color{fg!50!bg}%
\usebeamertemplate{mini frame in other subsection}%\beamer@minislide%
\fi
\fi%
}}}\hskip-10cm plus 1fil%
}\fi\fi%
\else%
\fakeslideentry{#1}{#2}{#3}{#4}{#5}{#6}%
\fi\ignorespaces
}
\makeatother
\defbeamertemplate{mini frame}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathmoveto{\pgfpoint{0cm}{#1 * 0.05cm}}
\pgfpathlineto{\pgfpoint{#1 * -0.04cm}{#1 * 0.05cm}}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
[action]
{
\newlength{\myminiframesize}
\setlength{\myminiframesize}{0.14cm}
\newlength{\myminiframeoffset}
\setlength{\myminiframeoffset}{0.03cm}
\setbeamersize{mini frame size=#1\myminiframesize,mini frame offset=#1\myminiframeoffset}
}
\defbeamertemplate{mini frame first}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{fill,stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current section}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathmoveto{\pgfpoint{0cm}{#1 * 0.05cm}}
\pgfpathlineto{\pgfpoint{#1 * -0.04cm}{#1 * 0.05cm}}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in other section}{scaled circle}[1]
{%
\color{fg!50!bg}
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current subsection}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathmoveto{\pgfpoint{0cm}{#1 * 0.05cm}}
\pgfpathlineto{\pgfpoint{#1 * -0.04cm}{#1 * 0.05cm}}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in current subsection first}{scaled circle}[1]
{%
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\defbeamertemplate{mini frame in other subsection}{scaled circle}[1]
{%
\color{fg!50!bg}
\begin{pgfpicture}{0pt}{0pt}{#1 * 0.1cm}{#1 * 0.1cm}
\pgfsetlinewidth{#1 * 0.4pt}
\pgfpathcircle{\pgfpoint{#1 * 0.05cm}{#1 * 0.05cm}}{#1 * 0.05cm}
\pgfusepath{stroke}
\end{pgfpicture}%
}
\setbeamertemplate{mini frame}[scaled circle]{0.7}
\setbeamertemplate{mini frame first}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current section}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current subsection}[scaled circle]{0.7}
\setbeamertemplate{mini frame in current subsection first}[scaled circle]{0.7}
\setbeamertemplate{mini frame in other section}[scaled circle]{0.7}
\setbeamertemplate{mini frame in other subsection}[scaled circle]{0.7}