![Imprimir subseção condicionalmente no Beamer](https://rvso.com/image/298822/Imprimir%20subse%C3%A7%C3%A3o%20condicionalmente%20no%20Beamer.png)
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 headline
modelo 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, \insertsubsection
estará vazia, enquanto se a \subsection*{}
for emitido, a macro será expandida em \expandafter \hyperlink \subsectionlink
, a subseção estará vazia ( \insertsubsectionhead
expande para \hyperlink {Navigation\the \c@page }{}
) ou não ( \insertsubsectionhead
expandirá 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 etoolbox
pacote 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.
\subsecname
não é excluído por padrão quando uma nova seção é criada. Substituí-lo por \insertsubsectionhead
funcionou 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