在 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{SubSection Title}
<subsection frames>
}
<other frames>

该 SubSection 内部和外部的框架之间的条件正确不同

相关内容