Biblatex 自定义引用命令仅在脚注中

Biblatex 自定义引用命令仅在脚注中

我不喜欢大多数演示文稿中的引用。如果你想查找一个特殊的参考文献,你很可能在参考文献显示在末尾时忘记了编号。因此我创建了一个自定义引用命令\mycite,作用类似于引用,但在脚注中添加了一些简要信息(没有脚注索引)。有时我只想添加对整个框架的引用,而文本中没有任何明确的引用,因此我创建了第二个命令\myframecite。但在后一个命令上我遇到了一些困难,因为它会在文本中添加一些空白,而它应该只对脚注进行操作。

\documentclass{beamer}
\usetheme{Boadilla}

\usepackage{filecontents}
\begin{filecontents}{jobname.bib}
    @article{Doe2013,
        title   = {Lorem Ipsum},
        volume  = {1},
        journal = {J. Foo},
        author  = {J. Doe},
        year    = {2013},
        pages   = {1--10},
    }
    @article{Public2013,
        title   = {Dolor Sit Amet},
        volume  = {1},
        journal = {J. Foo},
        author  = {J. Q. Public},
        year    = {2013},
        pages   = {11--20},
    }
\end{filecontents}

\usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{jobname.bib}

\makeatletter
\newbibmacro*{myframecite}{%
  \renewcommand{\@makefntext}[1]{\noindent\scriptsize##1}%
  \footnotetext{%
    \blxmkbibnote{foot}{%
      \printtext[labelnumberwidth]{%
        \printfield{prefixnumber}%
        \printfield{labelnumber}}%
      \addspace%
      \printnames{author}%
      \setunit{\addcomma\addspace}%
      \printfield{title}%
      \setunit{\addcomma\addspace}%
      \printfield{year}%
}}}
\DeclareCiteCommand{\myframecite}%
  {}
  {\usebibmacro{myframecite}}
  {}
  {}
\makeatother

\newcommand{\mycite}[1]{\cite{#1} \myframecite{#1}}

\begin{document}
\begin{frame}
\begin{definition}test\end{definition}
\begin{definition}test\end{definition}
\mycite{Doe2013}
\begin{definition}test\end{definition}
\myframecite{Public2013}
\begin{definition}test\end{definition}
\end{frame}
\end{document}

这个小例子产生了以下框架: 输出

我不想要第三和第四个定义之间的空行,但我不知道如何摆脱它。当然,我可以将\myframecite命令放在框架的末尾,这样空行就不会那么令人困扰了。不过,额外的空行会导致奇怪的(不对称)间距,我想避免这种情况。

答案1

基本上,所有\cite用 定义的命令都\DeclareCiteCommand假设它们会在使用它们的地方打印一些内容。因此,它们会发出很多\leavevmode命令,以避免干扰垂直空间。讽刺的是,这些预防措施实际上会在这里造成不必要的垂直空间。

我能找到的唯一彻底去除不需要的空间的方法是使用一个简短的包装器,只需删除通常会发出的\leavevmodesbiblatex即可。虽然不太美观,但在这里很管用。

\documentclass{beamer}
\usetheme{Boadilla}

\usepackage[backend=biber, style=numeric]{biblatex}

\makeatletter
\newbibmacro*{myframecite}{%
  \renewcommand{\@makefntext}[1]{\noindent\scriptsize##1}%
  \mkbibfootnotetext{%
    \printtext[labelnumberwidth]{%
      \printfield{prefixnumber}%
      \printfield{labelnumber}}%
    \setunit{\addspace}%
    \printnames{author}%
    \setunit{\addcomma\addspace}%
    \printfield{title}%
    \setunit{\addcomma\addspace}%
    \printfield{year}}}

\DeclareCiteCommand{\myframecite@i}%
  {}
  {\usebibmacro{myframecite}}
  {}
  {}

\newcommand*{\myframecite}[1]{%
  \@bsphack
  \def\blx@leavevmode@cite{}%
  \def\blx@leavevmode{}%
  \myframecite@i{#1}%
  \@esphack}
\makeatother

\newcommand{\mycite}[1]{\cite{#1}\myframecite{#1}}


\addbibresource{biblatex-examples.bib}

\begin{document}
\begin{frame}
\begin{definition}test\end{definition}
\begin{definition}test\end{definition}
\mycite{sigfridsson}
\begin{definition}test\end{definition}
\myframecite{worman}
\begin{definition}test\end{definition}
\end{frame}
\end{document}

滑动时不要留有过多的垂直空间。

相关内容