我如何有条件地输出投影仪脚注中的简短作者?

我如何有条件地输出投影仪脚注中的简短作者?

我有一个要输出作者姓名的脚注,但不传递作者姓名是完全合法的,因此宏\insertshortauthor可以为空。问题是我们|在模板中使用它来分隔数据字段,因此我需要知道该字段是否实际打印了某些内容。

据我了解,该\beamer@shortauthor宏仅在被调用之后才定义\author,至少我没有看到它在外面定义beamerbasetitle.sty,它的内容为:

\def\author{\@dblarg\beamer@author}
\long\def\beamer@author[#1]#2{%
  \def\insertauthor{\def\inst{\beamer@insttitle}\def\and{\beamer@andtitle}#2}%
  \def\beamer@shortauthor{#1}%
  \ifbeamer@autopdfinfo%
    \def\beamer@andstripped{}%
    \beamer@stripands#2 \and\relax
    {\let\inst=\@gobble\let\thanks=\@gobble\def\and{, }\hypersetup{pdfauthor={\beamer@andstripped}}}
  \fi%
}

因此我不明白为什么我不能直接检查是否\beamer@shortauthor已定义。至少我的 MWE 是这样的:

\documentclass{beamer}

\makeatletter
\setbeamertemplate{footline}{\ifdefined\beamer@shortauthor\insertshortauthor~|~\else No author given\fi Some more information}
\makeatother

\begin{document}
    \frame{No author given yet, footline should say so but does not}
    \author{Author}
    \frame{Author given now, footline is good}
\end{document}

无法按预期工作,\ifdefined不认为\beamer@shortauthor是未定义的。如何检查是否有简短的作者,以决定是否需要输出~|~

答案1

请注意,第 167 行beamerbasetitle.sty包含\author{},因此\beamer@shortauthor始终有定义并且最初为空,并且可以/应该测试是否\author{...}使用了有意义的\ifx\beamer@shortauthor\@empty

以下示例输出

  • 第一帧显示“没有作者提供更多信息”,并且
  • 第二帧上显示“作者 | 更多信息”。
\documentclass{beamer}

\makeatletter
\setbeamertemplate{footline}{%
  \ifx\beamer@shortauthor\@empty
    No author given
  \else
    \leavevmode\insertshortauthor~|~%
  \fi
  Some more information%
}
\makeatother

\begin{document}
    \frame{No author given yet, footline should say so but does not}
    \author{Author}
    \frame{Author given now, footline is good}
\end{document}

相关内容