![Unterabschnitt in Beamer bedingt drucken](https://rvso.com/image/298822/Unterabschnitt%20in%20Beamer%20bedingt%20drucken.png)
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 headline
zu 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 \insertsubsection
leer 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, \insertsubsection
ist leer. Wenn jedoch ein \subsection*{}
ausgegeben wird, wird das Makro in erweitert \expandafter \hyperlink \subsectionlink
. Entweder ist der Unterabschnitt leer ( \insertsubsectionhead
wird erweitert zu \hyperlink {Navigation\the \c@page }{}
) oder nicht ( wird im zweiten Frame \insertsubsectionhead
erweitert 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 etoolbox
Paket 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.
\subsecname
wird standardmäßig nicht gelöscht, wenn ein neuer Abschnitt erstellt wird. Das Ersetzen durch \insertsubsectionhead
hat 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