Beamer で条件付きでサブセクションを印刷する

Beamer で条件付きでサブセクションを印刷する

私は大学のテンプレートを PowerPoint から Beamer に移植し、ヘッダーにセクション (および存在する場合はサブセクション) を表示するためのコードを追加しました。

headlineこれは、この目的のためにテンプレートに挿入したコード スニペットです。

\begin{beamercolorbox}[wd=0.6\paperwidth,ht=0.1\beamer@PoliMI@headheight]{section in head/foot}%
    \usebeamerfont{section in head/foot}\par%
    \vfill\strut\insertsectionhead%
    \ifx\insertsubsection\empty\else%
    ~--~\insertsubsectionhead%
    \fi%
    \strut\par%
\end{beamercolorbox}\\%

ただし、サブセクションから「終了」する場合 ( を発行する場合\subsection*{})、セクション名の後のダッシュは引き続き印刷されます。

サブセクション名が void かどうかをテストするにはどうすればよいでしょうか?
代わりに、\insertsubsection空にするにはどうすればよいでしょうか?

MWE:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}\normalfont
\usepackage[T1]{fontenc}

\setbeamertemplate{navigation symbols}{}

\setbeamertemplate{headline}{%
  \begin{beamercolorbox}[wd=0.6\paperwidth,ht=0.016\paperwidth]{section in head/foot}%
    \usebeamerfont{section in head/foot}%
    \par\vfill\strut\insertsectionhead%
    \ifx\insertsubsection\empty\else~--~\insertsubsectionhead%
    \fi\strut\par%
  \end{beamercolorbox}%
}

\begin{document}
 \section{aaa}
  \begin{frame}~\end{frame}
  \subsection{bbb}
   \begin{frame}~\end{frame}
  \subsection*{}
   \begin{frame}~\end{frame}
\end{document}

3 番目のフレームには、「aaa」のみが表示され、「aaa -」は表示されません。

アップデート: サブセクションがまだ定義されていない場合は\insertsubsectionは空ですが、 が\subsection*{}発行された場合は マクロが に展開され\expandafter \hyperlink \subsectionlink、サブセクションが空(\insertsubsectionheadに展開される\hyperlink {Navigation\the \c@page }{})か、そうでないか(2 番目のフレームで に\insertsubsectionhead展開される)のいずれかになります。\hyperlink {Navigation\the \c@page }{bbb}

答え1

コードスニペットを次のように置き換えました

\ifx\insertsubsection\empty\else%
 \ifdefempty{\subsecname}{\relax}{%
  ~--~\insertsubsectionhead%
 }%
\fi

そして動作します!!!
残念ながら、etoolboxパッケージをロードする必要があります...

編集:

\setbox0=\hbox{\subsecname\unskip}\ifdim\wd0=0pt\else%
 ~--~\insertsubsectionhead%
\fi%

も動作し、 は必要ありませんetoolbox
これが「よりクリーンな」ソリューションであるかどうかはわかりません。

答え2

コメントすることはできませんが、@Astrinus の 2 番目の解決策に問題があったため、共有したいと思いました。

\subsecname新しいセクションが作成されても、デフォルトでは削除されません。これを に置き換えると\insertsubsectionhead、問題は解決しました。

\setbox0=\hbox{\insertsubsectionhead\unskip}\ifdim\wd0=0pt\else%
        - \insertsubsectionhead%
        \fi%

答え3

次の方法でサブセクションの終了を認識できないという問題がありました:

\ifx\insertsubsection\empty

SubSection を中括弧で制限すると動作するようになりました。

{
\subsection{SubSection Title}
<subsection frames>
}
<other frames>

条件は、そのサブセクションの内側と外側のフレーム間で正しく異なっていました

関連情報