
Я пытаюсь адаптировать решенияздесьиздесь. Моя цель такова: я хочу, чтобы библиография была разделена на два раздела. Первый раздел должен быть сам по себе разделен на несколько подразделов по типу цитирования, а цитаты в этом первом разделе должны иметь дополнительный префикс 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
необходимость в дополнительном запуске.