![biblatex 在脚注中重复引用,指向早期的脚注](https://linux22.com/image/297466/biblatex%20%E5%9C%A8%E8%84%9A%E6%B3%A8%E4%B8%AD%E9%87%8D%E5%A4%8D%E5%BC%95%E7%94%A8%EF%BC%8C%E6%8C%87%E5%90%91%E6%97%A9%E6%9C%9F%E7%9A%84%E8%84%9A%E6%B3%A8.png)
我使用 biblatex 如下:
\usepackage[style=verbose-note,backend=bibtex]{biblatex}
\renewcommand{\cite}{\autocite} % citations in footnotes
这有效几乎正如我所希望的那样。我仍然希望重复引用(比如我在第 1 页引用了 \cite{A},然后我在第 2 页再次引用了 \cite{A})应该指向之前的引用。因此,在这种情况下,只应生成一个脚注,并且第 1 页和第 2 页都应该有指向该脚注的链接(仅在第 1 页上)。这可能吗?
答案1
一个相当简单的版本(显然)不能处理前注或后注,它是这样的
\makeatletter
\DeclareCiteCommand{\myfootcite}
{}
{\usebibmacro{citeindex}%
\usebibmacro{myfootcite}}
{}
{}
\newbibmacro*{myfootcite}{%
\ifciteseen
{\usebibmacro{myfootcite:note}}
{\mkbibfootnote{\usebibmacro{footcite:full}%
\usebibmacro{footcite:save}}}}
\newbibmacro*{myfootcite:note}{\footref{cbx@\csuse{cbx@f@\thefield{entrykey}}}}
\makeatother
我们定义了一个\myfootcite
不打印后注或前注的新命令。它myfootcite
调用的宏只会\footref
在适当的脚注上发布(如果该作品之前已被引用并且已经有脚注)或创建新的脚注。
该命令基于中定义的宏集verbose-note
。
我们需要在实现中\footref
使用它,请参阅不同的地方引用同一个脚注在下面的 MWE 中,我使用了scrextend
即要获取的 KOMA 版本\footref
(如果您使用任何 KOMA 文档类,则无需scrextend
手动加载;memoir
班级还提供\footref
开箱即用;footmisc
也有一个实现;另请参阅文本相同的脚注)。
平均能量损失
\documentclass{article}
\usepackage{scrextend}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=verbose-note]{biblatex}
\usepackage[colorlinks=true]{hyperref}
\addbibresource{biblatex-examples.bib}
\makeatletter
\DeclareCiteCommand{\myfootcite}
{}
{\usebibmacro{citeindex}%
\usebibmacro{myfootcite}}
{}
{}
\newbibmacro*{myfootcite}{%
\ifciteseen
{\usebibmacro{myfootcite:note}}
{\mkbibfootnote{\usebibmacro{footcite:full}%
\usebibmacro{footcite:save}}}}
\newbibmacro*{myfootcite:note}{\footref{cbx@\csuse{cbx@f@\thefield{entrykey}}}}
\makeatother
\begin{document}
First citation.\myfootcite{cicero}
First citation.\myfootcite{knuth:ct:a}
Lorem\footnote{ipsum} dolor\myfootcite{wilde} sit\footnote{amet} and something\myfootcite{wilde}
Second citation.\myfootcite{cicero}
\printbibliography
\end{document}