我可以配置 \defbibentryset 以对不存在的键具有鲁棒性吗?

我可以配置 \defbibentryset 以对不存在的键具有鲁棒性吗?

我有两个参考书目列表。我refsection使用

\begin{refsection}
              \defbibentryset{test}{not-exist-key}
              \printbibliography[heading=none,....]
\end{refsection}

printbibliography而另一个则是正常的

\printbibliography

一切按预期运行,直到我只有一个不存在的键\defbibentryset。可以忽略 biber 警告生成 pdf 文件,但文档中没有其他参考书目列表,并且引用样式也是错误的。

以下是 MWE:

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}

\begin{document}
\begin{refsection}
  \defbibentryset{test}{sugfrudssun}
  \printbibliography[heading=none]
\end{refsection}
\textcite{sigfridsson}
\end{document}

答案1

事实证明,如果你足够固执,你就能做到这一点……

首先,我dummy用 创建一个参考书目条目options={dataonly}。然后我重新定义\defbibentryset为始终包含此条目。如果由于选项的原因,集合中仅包含不存在的条目,它将不会出现在参考书目中。skipbib,skiplab然后我稍微调整一下,如果当前是\blx@entryset@i,则不执行任何操作。entrykeydummy

如果您引用条目集,它仍将显示为 []。

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{dummy,
  options = {dataonly}
}
\end{filecontents}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\let\origdefbibentryset\defbibentryset
\renewcommand{\defbibentryset}[2]{%
  \origdefbibentryset{#1}{#2,dummy}}
\makeatletter
\def\blx@entryset@i#1{%
  \blx@ifdata{#1}
    {\begingroup
     \blx@resetdata
     \blx@getdata{#1}%
     \iffieldequalstr{entrykey}{dummy}
       {}
       {\blx@entrysetcount
        \blx@setoptions@type\abx@field@entrytype
        \blx@setoptions@entry
        \addtocounter{instcount}\@ne
        \blx@execute
        \blx@beglangbib
        \blx@begunit
        \blx@anchor
        \blx@entryset@precode
        \blx@driver{\blx@imc@thefield{entrytype}}%
        \blx@entryset@postcode
        \blx@endunit
        \blx@endlangbib}%
     \endgroup}
    {\blx@nounit}}
\makeatother
\begin{document}
\begin{refsection}
  \defbibentryset{test}{sugfrudssun}
  \printbibliography[heading=none]
\end{refsection}
\textcite{sigfridsson}
\end{document}

在此处输入图片描述

相关内容