Beamer 框架标题分隔符

Beamer 框架标题分隔符

我想知道为什么在没有 framesubtitle 内容的情况下,这个最小的例子表现不佳……

\documentclass[t]{beamer}

\setbeamertemplate{frametitle}{% 
     \nointerlineskip%

\begin{beamercolorbox}[wd=\paperwidth,ht=3.75ex,left]{frametitle}% 
         \hspace*{2ex}\strut{\insertframetitle}\strut
      \ifx\insertframesubtitle\@empty%
      \else
      {%\usebeamerfont{framesubtitle}%
       \usebeamercolor[fg]{framesubtitle}%
      \strut{ - \insertframesubtitle}\strut\par}%
      \fi
  \vskip-1ex
\end{beamercolorbox}}

\begin{document}
\begin{frame}{Frame title}{frame subtitle}

\end{frame}

\begin{frame}{Frame Title}

\end{frame}

\end{document}

答案1

相反,在条件中\@empty使用:\empty\ifx

\documentclass[t]{beamer}

\setbeamertemplate{frametitle}{% 
     \nointerlineskip%

\begin{beamercolorbox}[wd=\paperwidth,ht=3.75ex,left]{frametitle}% 
         \hspace*{2ex}\strut{\insertframetitle}\strut
      \ifx\insertframesubtitle\empty%
      \else
      {%\usebeamerfont{framesubtitle}%
       \usebeamercolor[fg]{framesubtitle}%
      \strut{ - \insertframesubtitle}\strut\par}%
      \fi
  \vskip-1ex
\end{beamercolorbox}}

\begin{document}
\begin{frame}{Frame title}{frame subtitle}

\end{frame}

\begin{frame}{Frame Title}

\end{frame}

\end{document}

顺便说一句,当@在文件中使用包含字符的命令时.tex,您应该使用\makeatletter, \makeatother(但在这种情况下,没有必要,因为您的定义不会包含这个字符);此外,使用\@empty和添加\makeatletter,\makeatother也不会产生预期的结果;我只是想提一下,@在控制序列名称中使用需要注意\makeatleter, \makeatother

相关内容