Условно печатать подраздел в 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*{}) тире после названия раздела все равно печатается.

Как проверить, является ли имя подраздела недействительным?
Как альтернатива, как сделать его \insertsubsectionпустым?

МВЭ:

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

В третьем кадре должно быть только «aaa», а не «aaa -».

ОБНОВЛЯТЬ: Если подраздел еще не определен, \insertsubsectionто он пуст, тогда как если \subsection*{}выдается , макрос расширяется в \expandafter \hyperlink \subsectionlink, либо подраздел пуст ( \insertsubsectionheadрасширяется до \hyperlink {Navigation\the \c@page }{}), либо нет ( \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, и я все равно хотел бы поделиться ими.

\subsecnameне удаляется по умолчанию при создании нового раздела. Замена его на \insertsubsectionheadсработала, чтобы решить эту проблему для меня.

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

решение3

У меня возникли проблемы с распознаванием конца подраздела:

\ifx\insertsubsection\empty

Заключив Подраздел в фигурные скобки, мы сделали это работоспособным:

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

Условие правильно различалось между кадрами внутри и снаружи этого Подраздела

Связанный контент