Imprimir subsección condicionalmente en Beamer

Imprimir subsección condicionalmente en Beamer

He transferido desde PowerPoint la plantilla de mi universidad a Beamer y agregué algo de código para mostrar secciones (y subsecciones cuando existen) en el encabezado.

Este es el fragmento de código que puse en la headlineplantilla para este propósito:

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

Sin embargo, al "salir" de la subsección (emitir \subsection*{}), el guión después del nombre de la sección todavía se imprime.

¿Cómo puedo comprobar si el nombre de la subsección es nulo?
Como alternativa, ¿cómo puedo dejarlo \insertsubsectionvacío?

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}

En el tercer cuadro, sólo debe aparecer "aaa" y no "aaa -".

ACTUALIZAR: Si la subsección aún no está definida, \insertsubsectionestá vacía, mientras que si \subsection*{}se emite a, la macro se expande en \expandafter \hyperlink \subsectionlink, o la subsección está vacía ( \insertsubsectionheadse expande a \hyperlink {Navigation\the \c@page }{}) o no ( \insertsubsectionheadse expande a \hyperlink {Navigation\the \c@page }{bbb}en el segundo cuadro).

Respuesta1

He reemplazado el fragmento de código con

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

¡¡¡y funciona!!!
Lamentablemente es necesario etoolboxcargar el paquete...

EDITAR:

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

También funciona y no requiere etoolbox.
No sé si esta es la solución "más limpia".

Respuesta2

No puedo comentar, pero tuve problemas con la segunda solución de @Astrinus y quería compartirla de todos modos.

\subsecnameno se elimina de forma predeterminada cuando se crea una nueva sección. Reemplazarlo \insertsubsectionheadfuncionó para resolverlo por mí.

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

Respuesta3

Tuve problemas para reconocer el final de la subsección al:

\ifx\insertsubsection\empty

Limitar la SubSección entre llaves hizo que funcionara:

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

La condición difería correctamente entre los marcos dentro y fuera de esa SubSección

información relacionada