![如何强制 biblatex autocite 不在脚注中重复条目?](https://linux22.com/image/428195/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%20biblatex%20autocite%20%E4%B8%8D%E5%9C%A8%E8%84%9A%E6%B3%A8%E4%B8%AD%E9%87%8D%E5%A4%8D%E6%9D%A1%E7%9B%AE%EF%BC%9F.png)
下面的代码
\documentclass{article}
\usepackage{lipsum}
\usepackage[backend=biber,
bibencoding=utf8,
citestyle=verbose,
bibstyle=verbose,
url=true,
autocite=footnote,
sorting=nyt,
defernumbers=true,
maxbibnames=99
]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\lipsum[4]
\autocite{sigfridsson,wiki:rtl}
\lipsum[4]
\autocite{sigfridsson,wiki:rtl}
\lipsum[4]
\autocite{sigfridsson,wiki:rtl}
\end{document}
产量
我该如何删除重复的条目?请注意,脚注中的引用源自宏调用,因此我无法简单地手动删除每页的重复条目。
答案1
以下是基于脚注中多次引用的参考文献和一些scrextend
用于脚注链接
\documentclass{article}
\usepackage[style=verbose,pagetracker]{biblatex}
\usepackage{scrextend}
\usepackage{hyperref}
\makeatletter
\DeclareCiteCommand{\footcite}[\mkbibfootnote]
{\label{blx:inst:\the\value{instcount}}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{\multicitedelim}
{\usebibmacro{cite:postnote}}
\DeclareCiteCommand{\superfootcite}[\cbx@wrap]
{\gdef\cbx@keys{}}
{\xappto\cbx@keys{\thefield{entrykey},}}
{}
{\ifcsundef{cbx@lastin@\cbx@keys @\strfield{postnote}}
{\csnumgdef{cbx@lastin@\cbx@keys @\strfield{postnote}}{-1}}{}%
\ifsamepage{\value{instcount}}{\csuse{cbx@lastin@\cbx@keys @\strfield{postnote}}}
{\footref{blx:inst:\csuse{cbx@lastin@\cbx@keys @\strfield{postnote}}}}
{\xappto\cbx@cite{%
\noexpand\footcite%
[\thefield{prenote}][\thefield{postnote}]{\cbx@keys}%
\csnumgdef{cbx@lastfn@\cbx@keys @\strfield{postnote}}{\value{\@mpfn}}%
\csnumgdef{cbx@lastin@\cbx@keys @\strfield{postnote}}{\value{instcount}}}}}
\newrobustcmd{\cbx@wrap}[1]{#1\cbx@cite\gdef\cbx@cite{}}
\def\cbx@cite{}
\DeclareMultiCiteCommand{\superfootcites}[\cbx@wrap]{\superfootcite}{}
\makeatother
\DeclareAutoCiteCommand{superfootnote}[f]{\superfootcite}{\superfootcites}
\ExecuteBibliographyOptions{autocite=superfootnote}
\addbibresource{biblatex-examples.bib}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\autocite{sigfridsson}
\lipsum[2]
\autocite{sigfridsson}
\lipsum[3]
\autocite{sigfridsson}
\lipsum[4-7]
\autocite{sigfridsson}
\lipsum[8]
\autocites{sigfridsson}{worman}
\end{document}
答案2
这是一条长评论,而不是答案:请注意,除了“wiki:rtl”是错误的关键字之外,您示例中的第二个和第三个脚注不是完整参考文献,而只是作者和标题。这些简短的参考文献可以被视为不必要的重复,但想想那些不连续或在不同页面的引用:如果您在第 85 页,那么必须转到第 12 页才能知道您引用的是哪篇论文,这很麻烦。
无论如何,对于连续重复引用,你总是可以使用手动解决方案 \footnotemark[\value{footnote}]
,但是,... 难道不是最好只重写文本以仅引用一次吗?此外,如果在参考文献之间有包含另一个不相关的脚注的风险,则会产生错误的结果。对于非连续引用,这种风险更大,即使结果是正确的,也不得不经常检查其他页面的脚注,这很烦人
一个折中解决方案是,verbose-trad1
当引用没有歧义时(即,当同一作者没有多部作品时),使用 样式将引用缩短为“Author, op. cit.” 。此样式不会像 那样引用第一个引用verbose-inotes
,但无需创建新样式,就可以轻松手动进行交叉引用。示例:
\documentclass{article}
\usepackage[paperheight=12cm,paperwidth=12cm]{geometry}
\usepackage{lipsum}
\usepackage[style=verbose-trad1]{biblatex}
%\usepackage[style=verbose-inote]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\lipsum[1][1]\autocite[\protect\label{x1}]{sigfridsson,shore}
\lipsum[2][1]\footnotemark[\value{footnote}]
\lipsum[3][1]\footnotemark[\value{footnote}]
\lipsum[4][1]\footnotemark[\value{footnote}]
\lipsum[5][1]\footnotemark[\value{footnote}]
\vfill\dotfill\par
(Affer dozen of pages and another cites ...)
{\renewcommand\thefootnote{}\footnote{\ldots \ldots \ldots }}
\setcounter{footnote}{58}
\par\dotfill\vfill
\lipsum[6][1]\autocite[][ see footnote \ref{x1}]{sigfridsson,shore}
%\lipsum[6][1]\autocite]{sigfridsson,shore} % for verbose-inote style
\newpage
\end{document}