投影机中的脚注规则过早显示并带有覆盖层

投影机中的脚注规则过早显示并带有覆盖层

考虑以下 MWE:

\documentclass{beamer}

\begin{document}

\begin{frame}

\begin{itemize}[<+->]
\item item
\item item\footnote<.->{footnote}
\item item
\end{itemize}

\end{frame}

\end{document}

主文本和脚注之间的水平线显示在第一个幻灯片上,尽管脚注本身仅在第二个幻灯片上显示。

有没有办法让这条规则只与脚注一起打印而不是之前打印?

答案1

此规则不是\footnote命令的一部分,而是带脚注的框架。它是使用文件\footnoterule中的命令绘制的。当 beamer 计算框架尺寸时,它会考虑框架是否有脚注,并在这种情况下绘制规则。\beamer@autobreakframeboxbeamerbaseframesize.sty

我能提供的最佳解决方案是根本不绘制规则。下一个代码 \beamer@autobreakframebox在您的文件中包含一个带有注释\footnoterule命令的副本。我不知道这个解决方案是否适用于其他主题(我希望如此)。

\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
            \usebeamercolor*[fg]{footnote}%
%            \footnoterule%
            \unvbox \beamer@footins%
            \global\setbox\beamer@footins=\box\voidb@x%
          \endgroup  
        \fi%
      \fi%
      \beamer@exitcode%
    }%
  \else%
    \setbox\beamer@framebox=\vbox to\textheight{\unvbox\beamer@framebox%
      \vskip\beamer@framebottomskip%
      \ifvoid\beamer@footins%
      \else%
        \begingroup
          \usebeamercolor*[fg]{footnote}%
%         \footnoterule%
          \unvbox \beamer@footins%
          \global\setbox\beamer@footins=\box\voidb@x%
        \endgroup 
      \fi%
      \beamer@exitcode}%
    \global\setbox\beamer@footins=\box\voidb@x%
  \fi%
  }
\makeatother
\begin{document}

\begin{frame}

\begin{itemize}[]
\item<1-> item
\item<2-> {item\footnote<2->{footnote}}
\item<3-> item
\end{itemize}

\end{frame}

\end{document}

在此处输入图片描述

答案2

我知道这个问题大约是一年前出现的,但我现在遇到了同样的问题。禁用该命令的最简单方法footnoterule是重新定义该\footnoterule命令。

\renewcommand{\footnoterule}{}

但是,如果你设法禁用\footnoteruleIgnasi 的答案,你可以使用

此方法只会添加\footnoterule到您的文本中,而不会添加到您的脚注中。以下段落中添加了一个更好的解决方法

\begin{frame}{frametitle}
My text\footnotemark[1]
...

\uncover<2>{\footnoterule}
\footnotetext[1]<2>{This is my footnote}
\end{frame}

它允许您在覆盖层中显示\footnoterule脚注。

此方法只会添加\footnoterule到您的文本中,而不会添加到您的脚注中。以下段落中添加了一个更好的解决方法

解决方法是删除\footnoteruleIgnasi 答案中的 as,并添加\footnoteruleindefbeamertemplate*{footnote}beamerinnertheme<themename>.sty

% Footnotes

\defbeamertemplate*{footnote}{default}
{
\footnoterule\parindent 1em\noindent%
\raggedright
\hbox to 1.8em{\hfil\insertfootnotemark}\insertfootnotetext\par%
}

并非beamerinnertheme.sty所有主题都适用此定义,但您可以随时复制此定义beamerinnerthemedefault.sty并进行修改。

相关内容