问题
我知道类似的问题以前已经被问过很多次了,但是我认为这个案例是独一无二的(很高兴被证明是错误的)。
我想简单地\cite{name}
在我的 Beamer 演示文稿中写下,无论我是否在minipage
,并在参考文献中出现一些关于参考文献的简短信息框架脚注,并在演示文稿末尾通过 提供完整引文\printbibliography
。我不想修改具体案例的\footnotemark
/footnotetext
等。我还想打印脚注参考信息排队喜欢para
来自的选项footmisc
(以使用更少的空间)。最后,常规脚注不应受到影响。
问题
经过大量努力,我找到了一个可行的解决方案(如下),但我的问题是:如何改进我的解决方案?例如:
- 我做过什么“坏事”吗?
- 其他用例中是否存在任何问题?
- 我们可以让它与 hyperref 一起工作吗?
- 我们能否恰当地使用citecolor?
- 我们是否在意所有的引用都放在最后?(我更喜欢这样)
谢谢
工作解决方案
\documentclass[20pt,aspectratio=169]{beamer}
\usepackage[backend=bibtex,style=authoryear]{biblatex}
\addbibresource{mwe}
% SOLUTION
\makeatletter
\def\empty{} % dummy
\newcounter{cite}% count citations per frame
% prepend reset stuff to begin frame
\let\xbeamer@frameslide\beamer@frameslide
\def \beamer@frameslide{%
\let\ffn\empty\setcounter{cite}{0}%
\xbeamer@frameslide}
% prepend footnote stuff to end frame
\let\xendbeamer@frameslide\endbeamer@frameslide
\def \endbeamer@frameslide{%
% add a footnote (no number) if \ffn is not empty
\ifx\ffn\empty\else{\def\thefootnote{}\footnotetext{\ffn}}\fi%
\xendbeamer@frameslide}
% redefine \cite
\renewcommand{\cite}[1]{%
% step & print the counter
\stepcounter{cite}\textsuperscript{\alph{cite}}
% add to \ffn: the cite counter (not footnote) and \textcite (black magic)
\edef\fntext{\noexpand\g@addto@macro\noexpand\ffn{%
\noexpand\textsuperscript{\alph{cite}}\textcite{#1}\enspace}}\fntext}
\makeatother
% EXAMPLE
\begin{document}
\begin{frame}{Hello World}
before minipage\footnote{First footnote}
\begin{minipage}{\textwidth}\color{red}
inside minipage: pen\cite{Hello} apple\cite{World}
\end{minipage}
after minipage\footnote{Second footnote}
pineapple\cite{World}
\end{frame}
\begin{frame}{References}\printbibliography\end{frame}
\end{document}
mwe.bib 是:
@article{Hello,author={Hello},title={Hello},journal={Hello},year={1999}}
@article{World,author={World},title={World},journal={World},year={2020}}