考虑以下 MWE:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[german=quotes
]{csquotes}
\usepackage[backend=biber,style=chem-angew,subentry=true,
citetracker=true,maxcitenames=5,mincitenames=4,
backref=true,backrefsetstyle=setonly,
]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{tab1,
author = {the Tab1},
title = {Buz},
journal = {J. of Buz},
year = {3001},
volume = {1},
pages = {22}}
@ARTICLE{tab2,
author = {the Tab2},
title = {Buz},
journal = {J. of Buz},
year = {3001},
volume = {1},
pages = {22}}
@SET{tabs,
entryset = {tab1,tab2}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Cite the whole set.\autocite{tabs}
Cite a setmember.\autocite{tab1}
A footnotereference to a set-member cites the whole set.\footfullcite{tab1}
\end{document}
您将获得以下内容:
当引用集合中的一个成员时,整个集合都会被引用。据我所知,参考书目驱动程序用于设置\fullcite
。我不明白的是如何抑制这种行为并仅引用给定的集合成员。如果这不可能,至少要抑制不必要的反向引用。有什么建议吗?
答案1
即使您直接引用子条目,数据也始终通过集合访问;没有子条目是独立的。可以重新定义完整引用命令以限制到childentrykey
字段标识的子条目。
如果您想要将集合labelnumber
和子条目标签合并entrysetcount
到完整引文中,则必须在通过以下方式访问子条目数据之前访问它们\entrydata
(如以下代码所示)。或者,您可以调用\entryset*
;然后可以使用名称前缀访问集合的数据saved
。
\DeclareCiteCommand{\fullcite}
{\usebibmacro{prenote}}
{\usebibmacro{cite:full}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\footfullcite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\usebibmacro{cite:full}}
{\multicitedelim}
{\usebibmacro{postnote}}
\newbibmacro{cite:full}{%
\ifbool{bbx:subentry}
{\printtext[labelnumberwidth]{%
\printfield{prefixnumber}%
\printfield{labelnumber}%
\ifbool{bbx:subentry}
{\printfield{entrysetcount}}
{}}%
\printunit*{\addnbspace}%
\iffieldundef{childentrykey}
{\usebibmacro{cite:driver}}
{\entrydata
{\thefield{childentrykey}}
{\usebibmacro{cite:driver}}}}
{\usebibmacro{cite:driver}}}
\newbibmacro{cite:driver}{%
\usedriver
{\DeclareNameAlias{sortname}{default}}
{\thefield{entrytype}}}
对于反向引用,您应考虑使用backrefsetstyle=setormem
。集合反向引用将仅指向整个集合的引用。每个子条目也有自己的反向引用列表,但可以在 的第一个参数中抑制这些列表\entryset
:
\DeclareBibliographyDriver{set}{%
\entryset
{\ifbool{bbx:subentry}
{\printfield[bibentrysetcount]{entrysetcount}%
\printunit*{\addnbspace}%
\clearlist{pageref}}
{}}
{}%
\newunit\newblock
\usebibmacro{setpageref}%
\finentry}