Beamer のナビゲーション箇条書きからいくつかのページを削除するにはどうすればよいですか?

Beamer のナビゲーション箇条書きからいくつかのページを削除するにはどうすればよいですか?

私は、ナビゲーション箇条書きと、箇条書きがすべて 1 行に表示されるオプションを備えた外部テーマbeamerを使用してプレゼンテーションを作成しています。問題は、1 つのセクションにページが多すぎると、箇条書きが次のセクションにオーバーフローしてしまうことです。miniframessubsection=false

Section 1 Section 2
oooooooooooooooooooo

フレームをたくさん持つ傾向があり、その中には単に質問をして、次の詳細なフレームに導くものもあります。これらのフレームをナビゲーションの箇条書きで表す必要はまったくないので、削除すれば問題は解決します。その方法をご存知ですか?

オーバーレイを使用して質問と回答を同じフレームに表示することでごまかすこともできますが、それでは混乱を招きます...

percusse の質問に答えるコード例: これにより、サブセクションごとに 1 つの円ではなく、フレームごとに 1 つの円が表示されます。1 つのサブセクションに多数のフレームを追加すると、円が次のセクションにオーバーフローします。

\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}

答え1

ミニフレームは、\beamer@framepages補助.navファイルのエントリを使用して生成されます。特定のフレームに対してこれらを削除すると、ナビゲーション1\beamer@writeslidentryに表示されなくなります。これを行うには、ファイルにコマンドを書き込むマクロにパッチを適用する必要があります.nav

\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

このコードをドキュメントに含めると、 と を使用して、元の実装とミニフレームを生成しない変更された実装を切り替えることができ\miniframesonます\miniframesoff

1ただし、これは私が知らない望ましくない結果をもたらす可能性があります。

完全なサンプルコード:

\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}

結果の見出し (6 つのミニ フレームのうち 4 つだけが表示されます):

サンプルコードによって生成された見出し。4 つのミニフレーム(本来は 6 つ)のみが表示されます。

関連情報