Imprimir subseção condicionalmente no Beamer

Imprimir subseção condicionalmente no Beamer

Transferi do PowerPoint o modelo da minha universidade para o Beamer e adicionei algum código para exibir seções (e subseções, quando existirem) no cabeçalho.

Este é o trecho de código que coloquei no headlinemodelo para essa finalidade:

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

Porém, ao "sair" da subseção (emitir \subsection*{}), o travessão após o nome da seção ainda é impresso.

Como posso testar se o nome da subseção é nulo?
Como alternativa, como posso esvaziar \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}

No terceiro quadro, apenas “aaa” deve aparecer, e não “aaa -”.

ATUALIZAR: se a subseção ainda não estiver definida, \insertsubsectionestará vazia, enquanto se a \subsection*{}for emitido, a macro será expandida em \expandafter \hyperlink \subsectionlink, a subseção estará vazia ( \insertsubsectionheadexpande para \hyperlink {Navigation\the \c@page }{}) ou não ( \insertsubsectionheadexpandirá para \hyperlink {Navigation\the \c@page }{bbb}no segundo quadro).

Responder1

Substituí o trecho de código por

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

e FUNCIONA!!!
Infelizmente precisa que o etoolboxpacote seja carregado ...

EDITAR:

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

também funciona e não requer etoolbox.
Não sei se esta é a solução "mais limpa".

Responder2

Não posso comentar, mas tive problemas com a segunda solução do @Astrinus e queria compartilhá-la mesmo assim.

\subsecnamenão é excluído por padrão quando uma nova seção é criada. Substituí-lo por \insertsubsectionheadfuncionou para resolver isso para mim.

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

Responder3

Tive problemas ao reconhecer o final da subseção por:

\ifx\insertsubsection\empty

Limitar a SubSeção entre colchetes fez com que funcionasse:

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

A condição diferiu corretamente entre os quadros dentro e fora daquela Subseção

informação relacionada