我正在尝试调整解决方案这里和这里。我的目标是:我希望将参考书目分为两部分。第一部分本身应该按引用类型分为多个小节,并且第一部分中的引用应该有一个额外的前缀AO
并带有颜色。第二部分中的引用没有前缀,没有特定的拆分,也没有颜色。
使用以下代码,我几乎可以达到令人满意的效果:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{file1.bib}
@article{article1,
author = {Onymous, Anne},
title = {First Bibliography: An Journal Article},
date = {2000},
}
@inproceedings{inproc1,
author = {Onymous, Anne},
title = {First Bibliography: A Conference Article},
date = {1899},
}
\end{filecontents}
\begin{filecontents}{file2.bib}
@article{article2,
author = {Writer, William},
title = {Second Bibliography: A First Reference},
date = {2010},
}
@article{article2bis,
author = {Poetaster, Paula},
title = {Second Bibliography: A Second Reference},
date = {1767},
}
\end{filecontents}
\usepackage[
backend=biber,
hyperref=true,
backref=true,
giveninits=true,
citestyle=numeric-comp,
bibstyle=numeric,
sortcites=false,
maxbibnames=99,
maxcitenames=2,
sorting=none,
defernumbers=true,
]{biblatex}
\addbibresource{file1.bib}
\addbibresource{file2.bib}
\usepackage[dvipsnames]{xcolor}
% https://tex.stackexchange.com/questions/470852/different-colors-for-each-bib-file-and-custom-prefix
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite]{
\map{
\perdatasource{file1.bib}
\step[fieldset=keywords, fieldvalue={,mypapers}, append]
}
}
\maps[datatype=bibtex,overwrite]{
\map{
\perdatasource{file2.bib}
\step[fieldset=keywords, fieldvalue={,otherpapers}, append]
}
}
}
% https://tex.stackexchange.com/questions/368247/how-to-colorise-specific-entries-in-the-bibliography-and-corresponding-reference
\renewbibmacro{in:}{}
\DeclareFieldFormat{labelprefix}{%
\ifkeyword{mypapers}
{\textcolor{red}{#1}}
{#1}}
\DeclareFieldFormat{labelnumber}{%
\ifkeyword{mypapers}
{\textcolor{red}{#1}}
{#1}}
\begin{document}
\title{Citation Test}
\author{Ann Onymous}
\maketitle
\cite{inproc1} \cite{article1} \cite{article2} \cite{article2bis}
\section*{Publications}
\newrefcontext[labelprefix=AO]
\printbibliography[type=inproceedings,keyword=mypapers,heading=subbibliography,title={Publications in Conference Post-Proceedings}]
\printbibliography[type=article,keyword=mypapers,heading=subbibliography,title={Journal Articles}]
\newrefcontext
\printbibliography[keyword=otherpapers]
\end{document}
但是,标签是错误的,引用分别标记为AO1
、AO1
再次2
和3
。理想情况下,我希望第一部分中的所有引用共享一个唯一的计数器,即标记为AO1
、AO2
等,而第二部分中的引用从 1 开始,即标记为1
、2
等。我会满足于它们从第一个结束的地方开始,即3
本例中的 at。但有两个具有相同标签的不同引用是不可能的……
如果我删除newrefcontext
,我会得到预期的色彩和唯一的编号,但我会丢失前缀,这很不幸。
我找到了resetnumbers
的关键\printbibliography
,但还没有找到如何正确使用它。
答案1
您几乎已经完成了,您只需要resetnumbers
在\printbiliography
命令中添加一些内容:
\newrefcontext[labelprefix=AO]
\printbibliography[type=inproceedings,keyword=mypapers,heading=subbibliography,title={Publications in Conference Post-Proceedings}]
\printbibliography[resetnumbers=false,type=article,keyword=mypapers,heading=subbibliography,title={Journal Articles}]
\newrefcontext
\printbibliography[resetnumbers=true,keyword=otherpapers]
请注意,使用 时defernumbers
,您必须小心每个工具的运行次数。从没有任何辅助文件的干净状态开始(大多数编辑器都有“清理”功能来删除所有等文件)。然后执行。使用后必须运行两次(请参阅文档)。大多数 IDE 会告诉您这样做,并.aux
会警告您使用需要这样做。.bcf
latex->biber->latex->latex
latex
biber
defernumbers
biblatex
defernumbers
技术说明:所有书目过滤系统(如type
和keyword
选项)以及\printbibliography
更高级的过滤功能都在完成后运行\defbibfilter
,因此数据列表仍按排序顺序包含所有条目,而无需进行过滤。因此,当您过滤掉某些内容时,您基本上会在排序/编号中留下“漏洞”,因此您必须在应用过滤后使用重新编号,因此需要额外运行。\defbibcheck
biber
.bbl
defernumbers
latex