Biblatex:当且仅当源条目也出现时,从参考书目中过滤掉克隆的条目

Biblatex:当且仅当源条目也出现时,从参考书目中过滤掉克隆的条目

在我的自定义 biblatex 样式中,我有一些参考书目条目使用相关字段,以便相关条目应出现在参考书目中。这是通过设置 来实现的relatedoptions = {dataonly,skipbib=false}

也可以在同一文献中直接引用相关条目。

在这种情况下,条目将出现两次在参考书目中:一次用于实际条目,一次用于字段创建的克隆条目related

我怎样才能过滤掉其中一个重复的条目没有最终用户是否需要担心他们引用的内容并进行手动调整?

在以下 MWE 中,两个部分的参考文献列表应该相同(匹配仅引用 b参考文献列表):

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{a,
  author = {Name, A. N.},
  title = {A Book}
}
@book{b,
  author = {Name, Another},
  title = {A Different Book},
  related = {a},
  relatedstring = {Related Book:},
  relatedoptions = {dataonly,skipbib=false}
}
\end{filecontents}
\usepackage[style=verbose]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{parskip}
\begin{document}
\section*{Cite a and b}
\cite{a}\par\cite{b}
\printbibliography
\vspace{1cm}
\section*{Cite b only}
\newrefsection
\cite{b}
\printbibliography
\end{document}

MWE 输出

答案1

我认为这是一个biber在 2.6 DEV 中修复的错误(目前我无法上传,但完成后会在这里更新)。我认为skipbib/skipbiblist如果相关克隆也被直接引用,则应始终强制在相关克隆上进行。

答案2

唉。我总是自己回答自己的问题。

这是一种可行的方法。我可以使用\defbibcheck来检查克隆条目与真实条目。通过重新定义 ,可以轻松默认进行此检查\printbibliography。它需要类似的东西来处理简写列表。

还有更好的建议吗?

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{a,
  author = {Name, A. N.},
  title = {A Book}
}
@book{b,
  author = {Name, Another},
  title = {A Different Book},
  related = {a},
  relatedstring = {Related Book:},
  relatedoptions = {dataonly,skipbib=false}
}
\end{filecontents}
\usepackage[style=verbose]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{parskip}
\pagestyle{empty}
\defbibcheck{uniqueclones}{%
  \iffieldundef{clonesourcekey}
    {\ifcsdef{sbl@entrykey@\therefsection\strfield{entrykey}}
       {\skipentry}
       {\savefieldcs{entrykey}{sbl@entrykey@\therefsection\strfield{entrykey}}}}
    {\ifcsdef{sbl@entrykey@\therefsection\strfield{clonesourcekey}}
       {\skipentry}
       {\savefieldcs{clonesourcekey}{sbl@entrykey@\therefsection\strfield{clonesourcekey}}}}}
\begin{document}
\section*{Cite a and b}
\cite{a}\par\cite{b}
\printbibliography[check=uniqueclones]
\vspace{1cm}
\section*{Cite b only}
\newrefsection
\cite{b}
\printbibliography[check=uniqueclones]
\end{document}

相关内容