¿Por qué el informe \insertauthor de Beamer no está vacío?

¿Por qué el informe \insertauthor de Beamer no está vacío?

Estoy trabajando en un tema de proyector en el que cada uno de los elementos de la página de título es opcional; por ejemplo, no quiero definir una fecha vacía para producir un gran espacio vacío en la diapositiva del título. Pensé que podría hacer esto ajustando el diseño de cada elemento en un condicional como este:

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

Y este patrón funciona como se esperaba... excepto para el autor. Por alguna razón, \ifx\insertauthor\emptynunca parece evaluarse como true, a diferencia de los otros elementos de la página de título:

\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}

¿Por qué es esto? ¿Existe alguna solución que me permita probar si hay un autor vacío?

Respuesta1

El texto de definición de \insertauthorno está vacío, lo cual es bastante obvio, porque la macro está destinada a hacer algo con datos que ya deberían haberse proporcionado.

De beamerbasetitle.sty, línea 149 y siguientes:

% 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%
}

Entonces, cuando lo especifica \author(con o sin el argumento opcional), \insertauthorqueda definido (y no vacío). Ya que en la línea 173 encontramos

\author{}

deducimos que \insertauthorse inicializa y nunca está vacío al inicio de un beamertrabajo.

Probablemente le convenga más testing \beamer@shortauthor, que de hecho estará vacío al comienzo de un trabajo, hasta que \authoraparezca otro comando.

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

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

\end{document}

Respuesta2

Podrías inspirarte un poco en Beamer, por ejemplo, enhttps://github.com/josephwright/beamer/blob/1b04c51a596a51530adeff278ca2c43aa963c9b1/base/themes/inner/beamerinnerthemeinmargin.sty#L68-L74y replicar esta prueba. Esto tiene la ventaja de que los nombres de los autores se imprimirán en la página de título incluso si sus usuarios eligen un autor corto vacío:

\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}

(Hubo un problema para los usuarios de la usepdftitle=falseopción de clase, esto ya está solucionado en la versión de desarrollo de Beamer y debe incluirse en Beamer v3.72 o posterior)

información relacionada