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 headline
plantilla 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 \insertsubsection
vací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, \insertsubsection
está vacía, mientras que si \subsection*{}
se emite a, la macro se expande en \expandafter \hyperlink \subsectionlink
, o la subsección está vacía ( \insertsubsectionhead
se expande a \hyperlink {Navigation\the \c@page }{}
) o no ( \insertsubsectionhead
se 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 etoolbox
cargar 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.
\subsecname
no se elimina de forma predeterminada cuando se crea una nueva sección. Reemplazarlo \insertsubsectionhead
funcionó 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