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\empty
nunca 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 \insertauthor
no 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), \insertauthor
queda definido (y no vacío). Ya que en la línea 173 encontramos
\author{}
deducimos que \insertauthor
se inicializa y nunca está vacío al inicio de un beamer
trabajo.
Probablemente le convenga más testing \beamer@shortauthor
, que de hecho estará vacío al comienzo de un trabajo, hasta que \author
aparezca 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=false
opción de clase, esto ya está solucionado en la versión de desarrollo de Beamer y debe incluirse en Beamer v3.72 o posterior)