Взаимодействие между `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}

Однако маркировка неверна, цитаты соответственно помечены AO1, AO1снова 2и 3. В идеале я бы хотел, чтобы все цитаты в первом разделе имели уникальный счетчик, т. е. были помечены AO1, AO2и т. д., а цитаты во втором разделе начинались бы снова с 1, т. е. были помечены 1, 2и т. д. Я бы удовлетворился, если бы они начинались там, где заканчиваются первые, т. е. в 3этом примере. Но иметь две разные цитаты с одинаковой меткой просто невозможно…

Если я уберу 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вам нужно быть осторожным с тем, сколько раз вы запускаете каждый инструмент. Начните с чистого листа без каких-либо вспомогательных файлов (большинство редакторов имеют функцию «clean» для удаления всех .auxи .bcfт. д. файлов). Затем выполните latex->biber->latex->latex. Обязательно запустите latexдважды после biberиспользования defernumbers(см. документацию). Большинство IDE скажут вам сделать это, поскольку biblatexпредупредят вас, что использование defernumbersтребует этого.

введите описание изображения здесь

Техническое примечание: Все системы фильтрации библиографии, такие как typeи keywordопции для \printbibliographyплюс более продвинутая фильтрация с \defbibfilterи \defbibcheckработают после того, biberкак закончилось, и поэтому .bblсписки данных по-прежнему содержат все записи в порядке сортировки, без фильтрации. Таким образом, когда вы отфильтровываете что-то, вы по сути оставляете "дыры" в порядке/нумерации, и поэтому вам приходится использовать defernumbersдля повторной нумерации после применения фильтрации, отсюда и latexнеобходимость в дополнительном запуске.

Связанный контент