我正在開發一個投影機主題,其中每個標題頁元素都是可選的;例如,我不想定義一個空日期來在標題投影片上產生一個大的空白區域。我想我可以透過將每個元素的佈局包裝在條件中來做到這一點,如下所示:
\ifx\insertdate\empty%
\else
...
\insertdate
\vskip{1em}
...
\fi
這種模式按預期工作......除了作者之外。無論出於何種原因,與其他標題頁元素不同,\ifx\insertauthor\empty
似乎從未評估為: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}
為什麼是這樣?有什麼解決方法可以讓我測試空作者嗎?
答案1
的定義文字\insertauthor
不為空,這是非常明顯的,因為巨集旨在對應該已經給出的資料執行某些操作。
從beamerbasetitle.sty
,第 149 行及以下內容:
% 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%
}
因此,當您指定\author
(帶或不帶可選參數)時,\insertauthor
已定義(且不為空)。從第 173 行開始我們發現
\author{}
我們推斷它\insertauthor
在作業開始時已初始化並且永遠不會為空beamer
。
測驗可能會更好\beamer@shortauthor
,它在作業開始時確實是空的,直到\author
出現另一個命令。
\documentclass{beamer}
\author{}
\date{}
\begin{document}
\makeatletter
\ifx\beamer@shortauthor\empty
empty
\else
nonempty
\fi
\makeatother
\end{document}
答案2
您可以從投影機中獲得一些靈感,例如https://github.com/josephwright/beamer/blob/1b04c51a596a51530adeff278ca2c43aa963c9b1/base/themes/inner/beamerinnerthemeinmargin.sty#L68-L74並重複此測試。這樣做的優點是,即使您的用戶選擇空的短作者,作者姓名也會印在標題頁上:
\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}
(class 選項的使用者有一個問題usepdftitle=false
,該問題已在 Beamer 開發版本中修復,應包含在 Beamer v3.72 或更高版本中)