`refcontext` 和 `subbibliography` 之间的交互

`refcontext` 和 `subbibliography` 之间的交互

我正在尝试调整解决方案这里这里。我的目标是:我希望将参考书目分为两部分。第一部分本身应该按引用类型分为多个小节,并且第一部分中的引用应该有一个额外的前缀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}

但是,标签是错误的,引用分别标记为AO1AO1再次23。理想情况下,我希望第一部分中的所有引用共享一个唯一的计数器,即标记为AO1AO2等,而第二部分中的引用从 1 开始,即标记为12等。我会满足于它们从第一个结束的地方开始,即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会警告您使用需要这样做。.bcflatex->biber->latex->latexlatexbiberdefernumbersbiblatexdefernumbers

在此处输入图片描述

技术说明:所有书目过滤系统(如typekeyword选项)以及\printbibliography更高级的过滤功能都在完成后运行\defbibfilter,因此数据列表仍按排序顺序包含所有条目,而无需进行过滤。因此,当您过滤掉某些内容时,您基本上会在排序/编号中留下“漏洞”,因此您必须在应用过滤后使用重新编号,因此需要额外运行。\defbibcheckbiber.bbldefernumberslatex

相关内容