Warum wird Beamers \insertauthor als nicht leer gemeldet?

Warum wird Beamers \insertauthor als nicht leer gemeldet?

Ich arbeite an einem Beamer-Design, bei dem jedes der Titelseitenelemente optional ist. Ich möchte beispielsweise nicht, dass die Definition eines leeren Datums einen großen leeren Platz auf der Titelfolie erzeugt. Ich dachte, ich könnte dies tun, indem ich das Layout für jedes Element in eine Bedingung wie folgt einschließe:

\ifx\insertdate\empty%
\else
   ...
   \insertdate
   \vskip{1em}
   ...
\fi

Und dieses Muster funktioniert wie erwartet ... mit Ausnahme des Autors. Aus irgendeinem Grund scheint es im Gegensatz zu den anderen Titelseitenelementen \ifx\insertauthor\emptynie als ausgewertet zu werden :true

\documentclass{beamer}
\author{}
\date{}
\begin{document}
  \ifx\insertauthor\empty
    empty
  \else
    nonempty
  \fi
  % outputs "nonempty"

  \ifx\insertdate\empty
    empty
  \else
    nonempty
  \fi
  % outputs "empty"
\end{document}

Warum ist das so? Gibt es eine Problemumgehung, mit der ich einen leeren Autor testen kann?

Antwort1

Der Definitionstext \insertauthorist nicht leer, was ziemlich offensichtlich ist, da das Makro etwas mit Daten machen soll, die bereits angegeben sein sollten.

beamerbasetitle.styAb Zeile 149 ff .:

% The \author command
%
%
\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%
}

Wenn Sie also angeben \author(mit oder ohne optionales Argument), \insertauthorist definiert (und nicht leer). Da wir in Zeile 173 finden

\author{}

Wir schließen daraus, dass es \insertauthorzu Beginn eines beamerJobs initialisiert ist und nie leer ist.

Wahrscheinlich sind Sie mit testing besser bedient \beamer@shortauthor, da dieses zu Beginn eines Jobs tatsächlich leer ist, bis ein anderer \authorBefehl erscheint.

\documentclass{beamer}
\author{}
\date{}
\begin{document}

\makeatletter
\ifx\beamer@shortauthor\empty
  empty
\else
  nonempty
\fi
\makeatother

\end{document}

Antwort2

Sie können sich von Beamer inspirieren lassen, z. B. vonhttps://github.com/josephwright/beamer/blob/1b04c51a596a51530adeff278ca2c43aa963c9b1/base/themes/inner/beamerinnerthemeinmargin.sty#L68-L74und wiederholen Sie diesen Test. Dies hat den Vorteil, dass die Autorennamen auf der Titelseite gedruckt werden, auch wenn Ihre Benutzer einen leeren Kurzautor auswählen:

\documentclass{beamer}
\author[]{test}
\date{}
\begin{document}

\makeatletter
\expandafter\ifblank\expandafter{\beamer@andstripped}{
  empty
}{%
  nonempty
}
\makeatother

  \ifx\insertdate\empty
    empty
  \else
    nonempty
  \fi
  % outputs "empty"
\end{document}

(Es gab ein Problem für Benutzer der usepdftitle=falseKlassenoption, dies ist bereits in der Beamer-Entwicklerversion behoben und sollte in Beamer v3.72 oder neuer enthalten sein)

verwandte Informationen