我不喜欢大多数演示文稿中的引用。如果你想查找一个特殊的参考文献,你很可能在参考文献显示在末尾时忘记了编号。因此我创建了一个自定义引用命令\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
命令,以避免干扰垂直空间。讽刺的是,这些预防措施实际上会在这里造成不必要的垂直空间。
我能找到的唯一彻底去除不需要的空间的方法是使用一个简短的包装器,只需删除通常会发出的\leavevmode
sbiblatex
即可。虽然不太美观,但在这里很管用。
\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}