Como remover algumas páginas dos marcadores de navegação no Beamer?

Como remover algumas páginas dos marcadores de navegação no Beamer?

Estou fazendo uma beamerapresentação usando o miniframestema externo, com marcadores de navegação, e a subsection=falseopção, ou seja, os marcadores estão todos em uma única linha. O problema que tenho é que, se uma seção tiver muitas páginas, os marcadores transbordam para a próxima seção:

Section 1 Section 2
oooooooooooooooooooo

Costumo ter muitos frames, alguns deles apenas fazendo uma pergunta, levando ao próximo frame detalhado. Eu realmente não preciso que esses quadros sejam representados por marcadores de navegação, e removê-los resolveria o problema. Alguma ideia de como fazer isso?

Eu poderia trapacear usando sobreposições para colocar a pergunta e a resposta no mesmo quadro, mas isso seria uma bagunça...

Exemplo de código para responder à pergunta de percusse: isso deve fornecer um círculo por quadro, não um por subseção. Se você adicionar muitos quadros em uma subseção, os círculos irão transbordar na próxima seção.

\documentclass[compress]{beamer}
\useoutertheme[subsection=false]{miniframes}
\begin{document}
\section{S1}
\subsection{SS1}
\frame{1}
\frame{2}
\frame{3}
\subsection{SS2}
\frame{1}
\frame{2}
\frame{3}
...
\end{document}

Responder1

Os miniquadros são gerados utilizando as \beamer@framepagesentradas do .navarquivo auxiliar. Se você removê-los de determinados quadros, eles não aparecerão na navegação 1 . Para fazer isso, você deve corrigir a \beamer@writeslidentrymacro responsável por escrever os comandos no .navarquivo:

\makeatletter
\let\beamer@writeslidentry@miniframeson=\beamer@writeslidentry
\def\beamer@writeslidentry@miniframesoff{%
  \expandafter\beamer@ifempty\expandafter{\beamer@framestartpage}{}% does not happen normally
  {%else
    % removed \addtocontents commands
    \clearpage\beamer@notesactions%
  }
}
\newcommand*{\miniframeson}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframeson}
\newcommand*{\miniframesoff}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframesoff}
\makeatother

Inclua este código em seu documento, então você poderá alternar entre a implementação original e a modificada sem gerar miniquadros usando \miniframesone \miniframesoff.

1 Isto pode, no entanto, ter algumas consequências indesejadas das quais não estou ciente!

Código de exemplo completo:

\documentclass[compress]{beamer}
\useoutertheme[subsection=false]{miniframes}
\makeatletter
\let\beamer@writeslidentry@miniframeson=\beamer@writeslidentry
\def\beamer@writeslidentry@miniframesoff{%
  \expandafter\beamer@ifempty\expandafter{\beamer@framestartpage}{}% does not happen normally
  {%else
    % removed \addtocontents commands
    \clearpage\beamer@notesactions%
  }
}
\newcommand*{\miniframeson}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframeson}
\newcommand*{\miniframesoff}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframesoff}
\makeatother
\begin{document}
\section{S1}
\subsection{SS1}
\frame{1}
\miniframesoff
\frame{2}
\miniframeson
\frame{3}
\subsection{SS2}
\miniframesoff
\frame{1}
\miniframeson
\frame{2}
\frame{3}
\end{document}

Título resultante (apenas quatro dos seis miniquadros são exibidos):

título produzido pelo código de exemplo, mostrando apenas quatro (dos seis originalmente) miniquadros

informação relacionada