\fullcite 只引用集合中的一个成员会导致引用整个集合

\fullcite 只引用集合中的一个成员会导致引用整个集合

考虑以下 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}

您将获得以下内容: MWE 的输出

当引用集合中的一个成员时,整个集合都会被引用。据我所知,参考书目驱动程序用于设置\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}

相关内容