我正在尝试使用 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
,就会得到所需的输出。