编辑

编辑

我正在尝试使用 biblatex 生成两个不同的参考书目。第一个应该只包含我的论文,按在文本中出现的顺序排序,并带有一些特殊前缀。第二个参考书目应该包含一般参考资料,按某种不同的顺序排序(例如,名称-标题-年份),并且没有特殊前缀。

请注意,这两个书目不相交(即它们没有共同的条目)。

我使用这个 MTW:

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{ref.bib}
@ARTICLE{Pub1,
  author = {A. R},
  title = {My best paper},
  year = {2013},
  journal = C,
  keywords = {publication}
}

@ARTICLE{Pub2,
  author = {A. R},
  title = {My second best paper},
  year = {2013},
  journal = C,
  keywords = {publication}
}

@ARTICLE{Nopub1,
  author = {A. R},
  title = {Not my paper 1},
  year = {2012},
  journal = I,
  keywords = {general}
}

@ARTICLE{Nopub2,
  author = {A. R},
  title = {Not my paper 2},
  year = {2012},
  journal = I,
  keywords = {general}
}

\end{filecontents}

\usepackage[style=numeric, sorting=none, defernumbers=true, backend=biber]{biblatex}


\addbibresource{ref.bib}

\pagestyle{empty}

\begin{document}

This is my first publication : \cite{Pub1}

These are not my publications: \cite{Nopub1,Nopub2}

This is my second publication: \cite{Pub2}


\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]

\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, prefixnumbers=, title=Not my papers]
\end{refcontext}

\end{document}

输出(pdflatex + biber + pdflatex + pdflatex 之后):

在此处输入图片描述

两个参考书目都打印正确且顺序正确,但引用第二个参考书目的文本引用是错误的(它们都是 [0])。我尝试查看其他相关帖子,但没有人提到这个具体问题。

谢谢!

答案1

我认为目前没有好的解决方案。但我会尝试解释一些背景知识。在您的示例中,所需的输出看起来很明显,因为您的两个书目不重叠。但情况并非如此。在不同的引用上下文中,条目可以重复。所以让我们看看如果删除过滤器会发生什么:

\documentclass{article}

\usepackage[style=numeric, sorting=none,   backend=biber]{biblatex}

\addbibresource{ref.bib}

\pagestyle{empty}

\begin{document}

This is my first publication : \cite{Pub1}

These are not my publications: \cite{Nopub1,Nopub2}

This is my second publication: \cite{Pub2}

\printbibliography[title=Not my papers]

\newrefcontext[sorting=nty]
This is my first publication: \cite{Pub1}

These are not my publications: \cite{Nopub1,Nopub2}

This is my second publication: \cite{Pub2}

\printbibliography[prefixnumbers=R,title=My papers]

\end{document}

在此处输入图片描述

如您所见,每个 bibentry 都有两个标签,biblatex 必须选择使用哪一个。它明智地为第一个引用块使用来自第一个(默认)refcontext 的标签,为第二个引用块使用来自第二个块的标签。

这解释了为什么你会得到零:在第一个块中,引用没有标签,而 biblatex 没有机会猜测你想要一个来自另一个 refcontext 的标签作为后备——毕竟可能有多个合适的标签。

biblatex 将用于引用的标签取决于 的当前值\blx@refcontext@sorting。因此,您可以通过以下方式在本地强制 biblatex 使用来自另一个 refcontext 的标签:

{
 \makeatletter\def\blx@refcontext@sorting{nty}
 These are not my publications: \cite{Nopub1,Nopub2}
} 

然后你可以得到如下结果:

在此处输入图片描述

但这种解决方案不适用于混合城市,如\cite{Nopub1,pub1}。而“合乎逻辑”的解决方案

 \AtEveryCitekey{\ifkeyword{puplication}{}{\def\blx@refcontext@sorting{nty}}}

也不起作用,因为 refcontext 的代码是在 \AtEveryCitekey 启动之前执行的。所以你可能需要提出功能请求...

编辑

您可以尝试一下。但请注意:这是一种黑客行为,它很可能会混淆 biblatex。因此,请使用更多数据仔细测试和检查。

\documentclass{article}

\usepackage[style=numeric, sorting=none, defernumbers,  backend=biber]{biblatex}

\addbibresource{ref.bib}

\pagestyle{empty}

\makeatletter
\AtEveryCitekey{\ifkeyword{publication}{}{\def\blx@refcontext@sorting{nty}%
   \csname blx@data@\the \c@refsection @\blx@refcontext@sorting @\abx@field@entrykey\endcsname}}
\makeatother
\begin{document}

This is my first publication : \cite{Pub1}

These are not my publications: \cite{Nopub1,Nopub2}

This is my second publication: \cite{Pub2}


\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]

\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, prefixnumbers=, title=Not my papers]
\end{refcontext}

\end{document}

答案2

refcontexts 就是为这种事情引入的 - refcontexts 中的引用命令共享上下文,因此将“这些不是我的出版物:”引用放在同一个 refcontext 中。

\assignrefcontextentries[sorting=nty]{Nopub1,Nopub2}
\begin{document}

This is my first publication: \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}

\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]

\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, title=Not my papers]
\end{refcontext}

\end{document}

这需要 biblatex 3.3

答案3

问题出在使用不同的refcontext。如果你删除refcontext第二个 周围的环境printbibliography,就会得到所需的输出。

相关内容