我正在制作beamer
并设置一个自定义footnote
模板。在这个模板中,我调用了一个包含脚注的宏。
问题是,每次使用宏时都会beamer
打印 -template 的内容。因此,如果未使用,则不会打印模板。footnote
\footnote
\footnote
如何才能打印一次模板(并且仅一次)结尾(所以在任何之后\AddToFoot
)每一帧?利用两次运行的解决方案footline
不是一个选择(从技术上讲它是一个选择,但是那有什么乐趣呢)。
如果有一个选项不移动幻灯片的任何内容,那就太好了(与我的不同\invisfootnote
)。
在每个帧的末尾进行评估/使用的另一个模板也可以,所以它不必如此footnote
。
梅威瑟:
\documentclass[]{beamer}
\setbeamertemplate{footnote}{%
\hfill\smash{\llap{\parbox[b]{5cm}{\footnotesize\myfootnotes}}}%
}
\newcommand*{\myfootnotes}{}
\newcommand*{\AddToFoot}[1]{\edef\myfootnotes{\myfootnotes#1\\}}
\newcommand*{\invisfootnote}{\smash{\llap{\phantom{\footnote{foo}}}}}% still takes up space
\let\footnoterule\relax
\makeatletter
%\def\@end@frame@hook{\invisfootnote}% doesn't work
%\edef\endframe{\noexpand\invisfootnote\unexpanded\expandafter{\endframe}}% doesn't work
\makeatother
\begin{document}
\begin{frame}
\frametitle{with \texttt{\string\footnote}}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\AddToFoot{foo}
\AddToFoot{bar}
\invisfootnote
\end{frame}
\begin{frame}
\frametitle{without \texttt{\string\footnote}}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\AddToFoot{foo}
\AddToFoot{bar}
\end{frame}
\end{document}
编辑:定义一个调用环境的新环境,frame
类似的东西\invisfootnote
会起作用,但绝对不是理想的解决方案。
编辑2:我实际上想要实现的是重建以下模板(该图像是使用我已有的代码以及脚注问题的两遍解决方案创建的):
答案1
根据对问题的澄清https://chat.stackexchange.com/transcript/message/39697331#39697331
脚注机制运行良好,所以我建议不要动它。相反,将脚注的内容放在具有适当对齐方式的迷你页面中,脚注将以恒定高度顶部对齐。
(有了一些xpatch
foo,代码可能会简化很多……)
\documentclass{beamer}
\makeatletter
\def\beamer@autobreakframebox{%
\global\setbox\beamer@splitbox=\box\voidb@x%
\ifbeamer@autobreak%
% Ok, frame was overful -> split it!
\setbox\@tempboxa=\vsplit\beamer@framebox to\beamer@autobreakfactor\textheight%
\global\setbox\beamer@splitbox=\box\beamer@framebox%
\@tempdima=\ht\beamer@splitbox%
\ifdim\@tempdima<\beamer@autobreaklastheight%
\global\beamer@autobreaklastheight=\@tempdima\relax%
\else%
\setbox\@tempboxa=\vbox{\unvbox\@tempboxa\unvbox\beamer@splitbox}%
\global\setbox\beamer@splitbox=\box\voidb@x%
\fi%
\setbox\beamer@framebox=\vbox to\textheight{\unvbox\@tempboxa%
\vskip\beamer@framebottomskipautobreak%
\ifvoid\beamer@splitbox%
\ifvoid\beamer@footins%
\else%
\begingroup
\rule{\textwidth}{1pt}
\begin{minipage}[b][0.5cm][t]{.45\textwidth}%
\usebeamerfont{title in head/foot}
\insertshortauthor
\insertshorttitle\newline
\insertshortinstitute
\end{minipage}% <----------------------
\begin{minipage}[b][0.5cm][t]{.45\textwidth}% <----------------------
\usebeamercolor*[fg]{footnote}%
% \footnoterule%
\usebeamerfont{footnote}
\unvbox \beamer@footins%
\global\setbox\beamer@footins=\box\voidb@x%
\end{minipage}% <----------------------
\begin{minipage}[c]{\textwidth}%
\centering \insertframenumber
\end{minipage}
\endgroup
\fi%
\fi%
\beamer@exitcode%
}%
\else%
\setbox\beamer@framebox=\vbox to\textheight{\unvbox\beamer@framebox%
\vskip\beamer@framebottomskip%
\ifvoid\beamer@footins%
\else%
\begingroup
\rule{\textwidth}{1pt}
\begin{minipage}[b][0.5cm][t]{.45\textwidth}%
\usebeamerfont{title in head/foot}
\insertshortauthor
\insertshorttitle\newline
\insertshortinstitute
\end{minipage}% <----------------------
\begin{minipage}[b][0.5cm][t]{.45\textwidth}% <----------------------
\usebeamercolor*[fg]{footnote}%
% \footnoterule%
\usebeamerfont{footnote}
\unvbox \beamer@footins%
\global\setbox\beamer@footins=\box\voidb@x%
\end{minipage}% <----------------------
\begin{minipage}[c]{\textwidth}%
\centering \insertframenumber
\end{minipage}
\endgroup
\fi%
\beamer@exitcode}%
\global\setbox\beamer@footins=\box\voidb@x%
\fi%
}
\makeatother
\setbeamerfont{footnote}{size=\tiny}
\setbeamerfont{title in head/foot}{size=\tiny}
\title{title}
\author{author}
\institute{ins}
\begin{document}
\begin{frame}
\footnote{Must not complain about beamer customisation}
\footnote{Must not complain about too many duck images}
\end{frame}
\begin{frame}
\footnote{Must try the new \texttt{tikzducks} package}
\end{frame}
\end{document}