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\empty
nie 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 \insertauthor
ist nicht leer, was ziemlich offensichtlich ist, da das Makro etwas mit Daten machen soll, die bereits angegeben sein sollten.
beamerbasetitle.sty
Ab 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), \insertauthor
ist definiert (und nicht leer). Da wir in Zeile 173 finden
\author{}
Wir schließen daraus, dass es \insertauthor
zu Beginn eines beamer
Jobs 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 \author
Befehl 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=false
Klassenoption, dies ist bereits in der Beamer-Entwicklerversion behoben und sollte in Beamer v3.72 oder neuer enthalten sein)