TransWikia.com

How can I conditionally output the short author in my beamer footline?

TeX - LaTeX Asked on July 31, 2020

I have a footline where I want to output the authors name, but it is perfectly legitimate to not pass the authors name and hence the insertshortauthor macro can be empty. The problem is we use | in our template to separate the data fields, therefore I need to know if the field actually prints something.

To my understanding, the beamer@shortauthor macro is only defined, after author was called, at least I do not see it defined outside beamerbasetitle.sty, where it reads:

defauthor{@dblargbeamer@author}
longdefbeamer@author[#1]#2{%
  definsertauthor{definst{beamer@insttitle}defand{beamer@andtitle}#2}%
  defbeamer@shortauthor{#1}%
  ifbeamer@autopdfinfo%
    defbeamer@andstripped{}%
    beamer@stripands#2 andrelax
    {letinst=@gobbleletthanks=@gobbledefand{, }hypersetup{pdfauthor={beamer@andstripped}}}
  fi%
}

and hence I don’t get, why I can’t just check if beamer@shortauthor was defined yet. At least my MWE whcih reads:

documentclass{beamer}

makeatletter
setbeamertemplate{footline}{ifdefinedbeamer@shortauthorinsertshortauthor~|~else No author givenfi 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}

Doesn’t work as expected, the ifdefined does not consider beamer@shortauthor to ever be undefined. How can I check if there will be a short author or not to decide if I need to output the ~|~?

One Answer

Note that line 167 of beamerbasetitle.sty contains author{}, hence beamer@shortauthor is always defined and initially empty, and one can/should test if meaningful author{...} is used by ifxbeamer@shortauthor@empty.

The following example outputs

  • "No author given Some more information" on first frame, and
  • "Author | Some more information" on second frame.
documentclass{beamer}

makeatletter
setbeamertemplate{footline}{%
  ifxbeamer@shortauthor@empty
    No author given
  else
    leavevmodeinsertshortauthor~|~%
  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}

Correct answer by muzimuzhi Z on July 31, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP