在 Beamer 中使用覆盖时脚注会消失

在 Beamer 中使用覆盖时脚注会消失

我使用脚注与包结合引用beamer。我改编了以下代码:这个问题一切都运行良好 - 除了使用覆盖时。然后脚注只显示在一张幻灯片上,但之后被隐藏,如下所示。

在此处输入图片描述

所以我的问题是:如何才能使脚注与相应项目出现在同一张幻灯片上?如果不可能,脚注至少应该在下一帧出现之前可见。

这是我的 MWE:

\documentclass{beamer}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[style=numeric-comp, backend=biber, citetracker=true,sorting=none]{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\makeatletter
\newtoggle{cbx@togcite}
% Citation number in brackets
\renewcommand\@makefntext[1]{%
  \iftoggle{cbx@togcite}
    {{\normalfont[\@thefnmark]}\enspace #1}
    {{\normalfont\@thefnmark}\enspace #1}%
  \global\togglefalse{cbx@togcite}}

\DeclareCiteCommand{\sfcite}[\cbx@superscript]%
  {\usebibmacro{cite:init}%
   \let\multicitedelim=\supercitedelim
   \iffieldundef{prenote}
     {}
     {\BibliographyWarning{Ignoring prenote argument}}%
   \iffieldundef{postnote}
     {}
     {\BibliographyWarning{Ignoring postnote argument}}}
  {\usebibmacro{citeindex}%
   \usebibmacro{sfcite}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}}

\newbibmacro*{sfcite}{%
  \ifciteseen
  {}
  {\xappto\cbx@citehook{%
   \global\toggletrue{cbx@togcite}%
   \noexpand\footnotetext[\thefield{labelnumber}]{%
     \fullcite{\thefield{entrykey}}\addperiod}}}}

\newrobustcmd{\cbx@superscript}[1]{%
  \mkbibsuperscript{\mkbibbrackets{#1}}%
  \cbx@citehook%
  \global\let\cbx@citehook=\empty}

\let\cbx@citehook=\empty
\makeatother

\begin{document}
\begin{frame}
\frametitle{First Frame}
\begin{itemize}[<+->]
  \item First citation. \sfcite{reese} 
  \item Second citation.\sfcite{springer}
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{Second Frame}
Third citation.\sfcite{glashow}
\end{frame}

\end{document}

答案1

第一张幻灯片包含两个脚注,而不只是第一个。这不太理想,但在意料之中 - 使用 你会得到相同的结果\footfullcite

在第二张幻灯片上,再次发出引用命令。脚注“消失”,因为\ifciteseen返回了true。这也不是您想要的,但结果并不令人惊讶。可以修改引用命令,以便在给定条目或其最后一个脚注出现在上一个覆盖层上时为其设置脚注\ifciteseenfalse后一种情况是通过相等的帧号但不同的页面来检测的。

\documentclass{beamer}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[style=numeric-comp,citetracker=true,sorting=none,backend=biber]{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\makeatletter
\newtoggle{cbx@togcite}
% Citation number in brackets
\renewcommand\@makefntext[1]{%
  \iftoggle{cbx@togcite}
    {{\normalfont[\@thefnmark]}\enspace #1}
    {{\normalfont\@thefnmark}\enspace #1}%
  \global\togglefalse{cbx@togcite}}

\DeclareCiteCommand{\sfcite}[\cbx@superscript]%
  {\usebibmacro{cite:init}%
   \let\multicitedelim=\supercitedelim
   \iffieldundef{prenote}
     {}
     {\BibliographyWarning{Ignoring prenote argument}}%
   \iffieldundef{postnote}
     {}
     {\BibliographyWarning{Ignoring postnote argument}}}
  {\usebibmacro{citeindex}%
   \ifciteseen
     {\ifnumequal{\value{page}}{\csuse{cbx@page@\thefield{entrykey}}}
       {}
       {\ifnumequal{\value{framenumber}}{\csuse{cbx@frame@\thefield{entrykey}}}
          {\usebibmacro{sfcite}}
          {}}}
     {\usebibmacro{sfcite}}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}}

\newbibmacro*{sfcite}{%
  \csnumgdef{cbx@page@\thefield{entrykey}}{\value{page}}%
  \csnumgdef{cbx@frame@\thefield{entrykey}}{\value{framenumber}}%
  \xappto\cbx@citehook{%
    \global\toggletrue{cbx@togcite}%
    \noexpand\footnotetext[\thefield{labelnumber}]{%
      \fullcite{\thefield{entrykey}}\addperiod}}}

\newrobustcmd{\cbx@superscript}[1]{%
  \mkbibsuperscript{\mkbibbrackets{#1}}%
  \cbx@citehook%
  \global\let\cbx@citehook=\empty}

\let\cbx@citehook=\empty
\makeatother

\begin{document}
\begin{frame}[b]
\frametitle{First Frame}
\begin{itemize}[<+->]
  \item First citation.\sfcite{reese} Recurrent citation.\sfcite{reese}
  \item Second citation.\sfcite{springer}
  \item Recurrent citation.\sfcite{springer}
\end{itemize}
\end{frame}

\begin{frame}[b]
\frametitle{Second Frame}
\begin{itemize}[<+->]
  \item Third citation.\sfcite{glashow}
  \item Recurrent citation.\sfcite{reese,springer,glashow}
\end{itemize}
\end{frame}

\begin{frame}[b]
\frametitle{Third Frame}
\begin{itemize}
  \item Recurrent citation.\sfcite{glashow}
  \item Recurrent citation.\sfcite{reese,springer,glashow}
\end{itemize}
\end{frame}

\end{document}

以下是第一帧最后一张幻灯片的脚注:

在此处输入图片描述

第二帧的最后一张幻灯片:

在此处输入图片描述

答案2

我遇到了类似的问题,并通过以下方式解决。

引用消失是因为每个覆盖都是对同一引用的新引用,因此问题不在于 beamer,而在于 biblatex。您必须检查 biblatex 如何针对您的特殊样式 (numeric-comp) 写入引用引用的新条目(即 ídem、ibidem、什么都没有,只是一个数字)。我使用详细样式,因此在第一个引用中 biblatex 写入完整的引用,并在后续引用中使用简写。这就是为什么将引用更改为完整而不是使用简写可以解决我的问题的原因。最后一个问题是使用 xpatch 包解决的。

就我而言,序言如下:

\usepackage[style=verbose,autocite=footnote,notetype=footonly,babel=hyphen,backend=bibtex8]{biblatex}
\addbibresource{bibliography.bib}

\usepackage{xpatch}
\xpatchbibmacro{cite}{cite:short}{cite:full}{}{} 

\setbeamertemplate{footnote}{%
  \tiny%
  \parindent 1em\noindent%
  \raggedright
  \hbox to 1.8em{\hfil\insertfootnotemark}\insertfootnotetext\par%
}
\setlength\footnotesep{0pt}

相关内容