我有一个关于 Biblatex 和 Biber 后端的问题。我想有一个拆分书目:一个用于印刷媒体,一个用于在线资源。我想要一种相当特殊的排序方式:
- 通过使用关键词来分割书目。
- 数字样式用于引用和参考书目。
- 印刷媒体和在线媒体的书目都必须按字母顺序排列(例如作者姓名、年份和标题)。
- 两个参考书目中引用标签所使用的编号应属于单独且独立的编号范围。
- 引用编号应按照在文中出现的顺序分配。
我有一个最低限度的工作示例:
\documentclass[12pt,oneside]{IEEEtran}
\usepackage[utf8]{inputenc}
\usepackage[%
backend=biber,
defernumbers=true,
style=numeric,
sortcites=true,
sorting=none
]{biblatex}
\begin{filecontents}{testlit.bib}
@BOOK{al2013,
author = {Alice},
title = {Book of Alice},
date = {2013}
}
@BOOK{bo2014,
author = {Bob},
title = {Book of Bob},
date = {2014}
}
@ONLINE{to2012,
keywords = {secondary},
author = {Tom},
title = {Website of Tom},
year = {2012}
}
@ONLINE{ja2014,
keywords = {secondary},
author = {James},
title = {Website of James},
year = {2014}
}
\end{filecontents}
\addbibresource{testlit.bib}
\begin{document}
This is the first book I reference \cite{bo2014}. I can also reference
a first online resource \cite{to2012}. At the end of this sentence, I
reference the second book \cite{al2013} and the second online resource
\cite{ja2014}.
\printbibliography[%
notkeyword=secondary,
heading=subbibliography,
title={Print Media},
sorting=nty,
prefixnumbers={A-}
]
\printbibliography[%
keyword=secondary,
heading=subbibliography,
title={Online Media},
sorting=nty,
prefixnumbers={B-}
]
\end{document}
我得到的结果看起来符合预期但并不理想:
问题在于,对两个参考书目中的条目进行排序会导致文本中的引用编号无序。
如果我设置延迟号码为 false,我得到以下结果:
这与我想要的结果非常接近。但现在两个参考书目共享相同的数字范围:例如,没有标签为 A-2 的引文,也没有标签为 B-1 的引文。
所以我的问题是:是否有任何方法可以调整 Biblatex 和/或 Biber 来产生类似这样的效果:
当然,如果有后缀而不是前缀数字,但我可以忍受(我有一个 hack,可以为这两个书目生成后缀,但它也需要延迟号码才能正常运行)。
提前非常感谢您!
谨致问候,
斯特芬
答案1
可以sorting=none
在加载时删除选项biblatex
,并在序言中添加以下几行(请参阅https://tex.stackexchange.com/a/37850/27635以供参考):
\AtDataInput{%
\csnumgdef{entrycount:\strfield{prefixnumber}}{%
\csuse{entrycount:\strfield{prefixnumber}}+1}}
\DeclareFieldFormat{labelnumber}{\mkbibdesc{#1}}
\newrobustcmd*{\mkbibdesc}[1]{%
\number\numexpr\csuse{entrycount:\strfield{prefixnumber}}+1-#1\relax}
平均能量损失
\documentclass[12pt,oneside]{IEEEtran}
\usepackage[utf8]{inputenc}
\usepackage[%
backend=biber,
defernumbers=true,
style=numeric,
sortcites=true,
]{biblatex}
\AtDataInput{%
\csnumgdef{entrycount:\strfield{prefixnumber}}{%
\csuse{entrycount:\strfield{prefixnumber}}+1}}
\DeclareFieldFormat{labelnumber}{\mkbibdesc{#1}}
\newrobustcmd*{\mkbibdesc}[1]{%
\number\numexpr\csuse{entrycount:\strfield{prefixnumber}}+1-#1\relax}
\begin{filecontents}{testlit.bib}
@BOOK{al2013,
author = {Alice},
title = {Book of Alice},
date = {2013}
}
@BOOK{bo2014,
author = {Bob},
title = {Book of Bob},
date = {2014}
}
@ONLINE{to2012,
keywords = {secondary},
author = {Tom},
title = {Website of Tom},
year = {2012}
}
@ONLINE{ja2014,
keywords = {secondary},
author = {James},
title = {Website of James},
year = {2014}
}
\end{filecontents}
\addbibresource{testlit.bib}
\begin{document}
This is the first book I reference \cite{bo2014}. I can also reference
a first online resource \cite{to2012}. At the end of this sentence, I
reference the second book \cite{al2013} and the second online resource
\cite{ja2014}.
\printbibliography[%
notkeyword=secondary,
heading=subbibliography,
title={Print Media},
sorting=nty,
prefixnumbers={A-}
]
\printbibliography[%
keyword=secondary,
heading=subbibliography,
title={Online Media},
sorting=nty,
prefixnumbers={B-}
]
\end{document}
输出