비머 헤드라인의 맞춤 탐색 점

비머 헤드라인의 맞춤 탐색 점

슬라이드 작업 중인데 beamer헤더에 현재 섹션(왼쪽)과 하위 섹션(오른쪽)을 나타내는 점 몇 개를 포함하고 싶습니다. 섹션/하위 섹션의 이름은 포함되어서는 안 됩니다.

MWE는 다음과 같습니다.

\documentclass{beamer}

\makeatletter
\setbeamertemplate{headline}
{%
    \leavevmode%
    \hbox{%
        \begin{beamercolorbox}[wd=0.5\paperwidth,ht=2.25ex,dp=1ex,left]{section in head/foot}
            section dots
        \end{beamercolorbox}%
        \begin{beamercolorbox}[wd=0.5\paperwidth,ht=2.25ex,dp=1ex,right]{section in head/foot}
            subsection dots (of current section)
        \end{beamercolorbox}}%
}
\makeatother

\begin{document}    
    \section{Section1}
    \begin{frame}
        \frametitle{Frame11}
    \end{frame}

    \subsection{Subsection1}
    \begin{frame}
        \frametitle{Frame12}
    \end{frame}

    \subsection{Subsection2}
    \begin{frame}
        \frametitle{Frame13}
    \end{frame}


    \section{Section2}
    \begin{frame}
        \frametitle{Frame21}
    \end{frame}

    \subsection{Subsection1}
    \begin{frame}
        \frametitle{Frame22}
    \end{frame}

    \subsection{Subsection2}
    \begin{frame}
        \frametitle{Motivation}
    \end{frame}

    \subsection{Subsection3}
    \begin{frame}
        \frametitle{Frame23}
    \end{frame}
\end{document}

이 특정 수의 프레임에 대해 섹션을 나타내는 왼쪽 상단 모서리에 두 개의 점을 표시하고 섹션 1과 섹션 2의 하위 섹션을 각각 나타내는 오른쪽 상단 모서리에 두 개 또는 세 개의 점을 표시합니다. 분명히 나는 ​​이 예에 국한되지 않는 일반적인 솔루션을 원합니다.

현재 설정에서 이 작업을 쉽게 수행할 수 있습니까? 아니면 완전히 다른 작업이 필요합니까?

답변1

이를 수행하는 훨씬 더 좋은 방법이 있을 수 있지만 비머 탐색을 방해하는 대신 새로운 것을 시도하고 패키지를 가지고 놀고 싶었습니다 xcntperchap.

\documentclass{beamer}
\usepackage{tikz}

\usepackage{totcount}
\regtotcounter{section}

\usepackage{xcntperchap}
\RegisterCounters{section}{subsection}

\newcounter{totalsubsection}
\setcounter{totalsubsection}{0}
\usepackage{etoolbox}

\preto\frame{\ifnum\thesection>0\setcounter{totalsubsection}{\ObtainTrackedValueExp[\thesection]{section}{subsection}}\fi}

\setbeamertemplate{headline}{%
\hbox{%
\begin{beamercolorbox}[wd=.48\paperwidth,ht=2.25ex,dp=1ex]{section in head/foot}%
\hfill%
\ifnum\totvalue{section}>0%
\ifnum\thesection>0%
\foreach\x in {1,...,\totvalue{section}}{%
\ifnum\x=\thesection%
\usebeamertemplate{mini frame}~%
\else%
\usebeamertemplate{mini frame in other section}~%
\fi%
}%
\fi%
\fi%
\end{beamercolorbox}%
\qquad%
\begin{beamercolorbox}[wd=.48\paperwidth,ht=2.25ex,dp=1ex]{subsection in head/foot}%
\ifnum\thetotalsubsection>0%
\foreach\x in {1,...,\thetotalsubsection}{%
\ifnum\x=\thesubsection%
\usebeamertemplate{mini frame}~%
\else%
\usebeamertemplate{mini frame in other subsection}~%
\fi%
}%
\fi%
\end{beamercolorbox}%
}}

\title{title}
\author{author}

\begin{document}

    \begin{frame}
        \titlepage
    \end{frame}


\section{Section1}

\frame{}

\subsection{Subsection1}
\begin{frame}
\frametitle{Frame11}
\end{frame}

\subsection{Subsection2}
\begin{frame}
\frametitle{Frame12}
\end{frame}

\section{Section2}
\begin{frame}
\frametitle{Frame2}
\end{frame}

\subsection{Subsection1}
\begin{frame}
\frametitle{Frame21}
\end{frame}

\subsection{Subsection2}
\begin{frame}
\frametitle{Frame22}
\end{frame}

\subsection{Subsection3}
\begin{frame}
\frametitle{Frame23}
\end{frame}

\section{Section3}
\begin{frame}
\frametitle{Frame3}
\end{frame}

\end{document}

여기에 이미지 설명을 입력하세요

답변2

나는 단지 수용된 솔루션의 유연성을 보여주기 위해 대답하는 것뿐입니다. 모든 크레딧은 samcarter에게 전달됩니다. if/else의 사소한 내용을 변경하고 내용을 머리글에서 바닥글로 이동하여 다음과 같은 nMWE 결과를 얻었습니다.

처음 4개의 슬라이드

슬라이드 5-8

nMWE:

\documentclass{beamer}

\beamertemplatenavigationsymbolsempty
\usetheme{rochester}
\usecolortheme{beaver}

\usepackage{tikz}

\usepackage{totcount}
\regtotcounter{section}

\usepackage{xcntperchap}
\RegisterCounters{section}{subsection}

\newcounter{totalsubsection}
\setcounter{totalsubsection}{0}
\usepackage{etoolbox}

\preto\frame{\ifnum\thesection>0\setcounter{totalsubsection}{\ObtainTrackedValueExp[\thesection]{section}{subsection}}\fi}

\setbeamertemplate{footline}{%
    \hbox{%
        \begin{beamercolorbox}[wd=0.2\paperwidth,ht=2.25ex,dp=1ex,left,leftskip=1ex]{subsection in head/foot}%
            \ifnum\totvalue{section}>0%
            \foreach\x in {1,...,\totvalue{section}}{%
                \ifnum\numexpr\x-1<\thesection%
                \usebeamertemplate{mini frame}~%
                \else%
                \usebeamertemplate{mini frame in other section}~%
                \fi%
            }%
            \fi%
        \end{beamercolorbox}%
        \begin{beamercolorbox}[wd=0.6\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}
            \usebeamerfont{title in head/foot} \inserttitle
        \end{beamercolorbox}%
        \begin{beamercolorbox}[wd=0.2\paperwidth,ht=2.25ex,dp=1ex,right,rightskip=1ex]{subsection in head/foot}%
            \ifnum\thetotalsubsection>0%
            \foreach\x in {1,...,\thetotalsubsection}{%
                \ifnum\x>\numexpr\thetotalsubsection-\thesubsection%
                \usebeamertemplate{mini frame}~%
                \else%
                \usebeamertemplate{mini frame in other subsection}~%
                \fi%
            }%
            \fi%
        \end{beamercolorbox}%
    }}


\title{Super fancy long title which will fit in the footer}
\author{The Champion}
\date{\today}


\begin{document}

    \begin{frame}
        \thispagestyle{empty}
        \maketitle
    \end{frame}


    \begin{frame}
        \thispagestyle{empty}
        \frametitle{Outline}
        \tableofcontents
    \end{frame}


    \section{The first section}
    \subsection{The first subsection}
    \begin{frame}
        \frametitle{The first section}
        \framesubtitle{The first subsection}
    \end{frame}

    \subsection{The second subsection}
    \begin{frame}
        \frametitle{The first section}
        \framesubtitle{The second subsection}
    \end{frame}

    \subsection{The third subsection}
    \begin{frame}
        \frametitle{The first section}
        \framesubtitle{The third subsection}
    \end{frame}


    \section{The second section}
    \subsection{The first subsection}
    \begin{frame}
        \frametitle{The second section}
        \framesubtitle{The first subsection}
    \end{frame}

    \subsection{The second subsection}
    \begin{frame}
        \frametitle{The second section}
        \framesubtitle{The second subsection}
    \end{frame}


    \section{The third section}
    \subsection{The first subsection}
    \begin{frame}
        \frametitle{The third section}
        \framesubtitle{The first subsection}
    \end{frame}

\end{document}

관련 정보