我希望一次引用多个来源,并以不同于参考书目中的方式对文内引用进行排序。我希望我的引用按年份排序,参考书目按作者排序。我正在使用 BibLaTeX 和 Biber。我曾经这个答案使用 TeX Live 2015 实现这一点,但自从升级到 2016(以及升级我所有的软件包)后,这不起作用。
下面是一个最小的工作示例(带有第二个参考书目,用于说明目的)。我希望引用按年份升序排列(2001、2002、2003),参考书目按字母顺序排列(a、b、c)并按年份降序排列(2003、2002、2001),但下面是结果图;参考书目保持所需的排序,但文中的引用按年份降序排列。
如果我删除最后一个\newrefcontext
,则所有内容(引文和参考书目)将按字母顺序排序,如果我删除两个\newrefcontext
s,则所有内容将按年份升序排序(这是最初调用 BibLaTeX 时指定的选项)。似乎引文遵循最后引用的排序;ynt
根据 BibLaTeX 选项,当两个\newrefcontext
s 都被删除时,否则按照最后一个 中指定的任何排序\newrefcontext
。
我正在按 、 、 的顺序进行编译pdflatex
,biber
并且pdflatex
在pdflatex
MacTeX 上。
看起来这可以在 TeX Live 2015 中按预期工作,所以这是一个错误,还是发生了某些变化而需要以其他方式设置引用排序?
\documentclass{article}
\usepackage[
backend=biber,
style=authoryear,
sorting=ynt,
sortcites,
]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{lib.bib}
@article{test1,
author = {b},
title = {b},
year=2003,
}
@article{test2,
author = {c},
title = {c},
year=2001,
}
@article{test3,
author = {a},
title = {a},
year=2002,
}
\end{filecontents}
\addbibresource{lib.bib}
\begin{document}
Hello World! \parencite{test1,test2,test3}
\newrefcontext[sorting=nyt]
\printbibliography
\newrefcontext[sorting=ydnt]
\printbibliography
\end{document}
编辑
我有一个解决方法,但是极好的crap:使用 global 排版文档sorting=ynt
,将 pdf 复制到另一个文件,然后使用 global 排版文档sorting=nyt
;使用 PDF 编辑工具(Apple 的预览就足够了)从一个 PDF 中剪切包含参考书目的页面并按所需排序,然后粘贴到另一个 PDF 中。正如我所说极好的废话。我不确定我是否会这么做,因为我觉得很脏,但无论如何这都是一个解决办法。
如果不存在解决方案,或者这是一个没有补丁的错误,那么类似但更好的方法是某种包(可能不存在),它一次只更改 PDF 中的某些页面(同时仍然实际“编译”整个文档,以便完成所有引用)。它可能看起来像:
% document preamble
% ...
\usepackage{onlychange}
\onlychangerange{10,12} % Bibliography found on pages 10--12
% On next compilation will typeset all pages except 10--12
% ...
这是一个长远的想法,但也许有人知道这样的方案或者这种漫无边际的闲聊启发了一个实际的解决方案。
答案1
编辑MWE 与最新版本的biblatex
Biber配合使用
\documentclass{article}
\usepackage[
backend=biber,
style=authoryear,
sorting=ynt,
sortcites,
]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{test1,
author = {b},
title = {b},
year = 2003,
}
@article{test2,
author = {c},
title = {c},
year = 2001,
}
@article{test3,
author = {a},
title = {a},
year = 2002,
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Hello World! \parencite{test1,test2,test3}
\newrefcontext[sorting=nyt]
\printbibliography
\newrefcontext[sorting=ydnt]
\printbibliography
\end{document}