5

Consider the following 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}

This is what you'll get: output of MWE

When citing one member of the set, the whole set gets cited. As I understand it the bibliography driver is used to set the \fullcite. What I do not understand is how to suppress this behaviour and cite only the given set member. And if this is not possible, at least suppress the unnecessary backreference. Any suggestions?

2

Even though you cite subentries directly, data are always accessed via the set; no subentry is intended to stand alone. It is possible to redefine the full citation commands to limit to the subentry, as identified by the childentrykey field.

If you want to incorporate the set labelnumber and the subentry label entrysetcount into full citations, these will have to be accessed before you access the subentry's data via \entrydata (as in the code below). Alternatively you can invoke \entryset*; the set's data are then accessible with the name prefix 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}}}

For backreferences you should consider using backrefsetstyle=setormem instead. Set backreferences will point to citations only to the whole set. Each subentry also gets its own list of backreferences, but these can be suppressed in the first argument to \entryset:

\DeclareBibliographyDriver{set}{%
  \entryset
    {\ifbool{bbx:subentry}
       {\printfield[bibentrysetcount]{entrysetcount}%
        \printunit*{\addnbspace}%
        \clearlist{pageref}}
       {}}
    {}%
  \newunit\newblock
  \usebibmacro{setpageref}%
  \finentry}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.