Unterabschnitt in Beamer bedingt drucken

Unterabschnitt in Beamer bedingt drucken

Ich habe die PowerPoint-Vorlage meiner Universität in Beamer portiert und etwas Code hinzugefügt, um Abschnitte (und Unterabschnitte, sofern vorhanden) in der Kopfzeile anzuzeigen.

Dies ist der Codeausschnitt, den ich headlinezu diesem Zweck in die Vorlage eingefügt habe:

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

Beim „Verlassen“ eines Unterabschnitts (Ausgeben \subsection*{}) wird jedoch weiterhin der Bindestrich nach dem Abschnittsnamen gedruckt.

Wie kann ich testen, ob der Unterabschnittsname ungültig ist?
Oder wie kann ich ihn alternativ \insertsubsectionleer machen?

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}

Im dritten Frame darf nur „aaa“ vorkommen und nicht „aaa -“.

AKTUALISIEREN: Wenn der Unterabschnitt noch nicht definiert ist, \insertsubsectionist leer. Wenn jedoch ein \subsection*{}ausgegeben wird, wird das Makro in erweitert \expandafter \hyperlink \subsectionlink. Entweder ist der Unterabschnitt leer ( \insertsubsectionheadwird erweitert zu \hyperlink {Navigation\the \c@page }{}) oder nicht ( wird im zweiten Frame \insertsubsectionheaderweitert zu ).\hyperlink {Navigation\the \c@page }{bbb}

Antwort1

Ich habe den Codeausschnitt ersetzt durch

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

und ES FUNKTIONIERT!!!
Leider muss das etoolboxPaket geladen werden...

BEARBEITEN:

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

funktioniert auch und erfordert nicht etoolbox.
Ich weiß nicht, ob das die „sauberere“ Lösung ist.

Antwort2

Ich kann dazu nichts sagen, aber ich hatte Probleme mit der zweiten Lösung von @Astrinus und wollte sie trotzdem mitteilen.

\subsecnamewird standardmäßig nicht gelöscht, wenn ein neuer Abschnitt erstellt wird. Das Ersetzen durch \insertsubsectionheadhat bei mir das Problem gelöst.

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

Antwort3

Ich hatte Probleme mit der Erkennung des Unterabschnittsendes anhand von:

\ifx\insertsubsection\empty

Durch die Begrenzung des Unterabschnitts in Klammern funktionierte es:

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

Die Bedingung unterschied sich korrekt zwischen Frames innerhalb und außerhalb dieses Unterabschnitts

verwandte Informationen