Отдельные библиографии Biblatex с новейшей записью и наивысшим номером ссылки вверху

Отдельные библиографии Biblatex с новейшей записью и наивысшим номером ссылки вверху

Я хотел бы иметь такое же поведение библатекса, как описаноздесь, т. е. отдельные библиографии для различных типов публикаций, каждая библиография должна 1) иметь префикс с соответствующим обозначением (C для публикаций конференций, J для журналов и т. д.), 2) быть отсортирована таким образом, чтобы самая новая запись находилась наверху (определяется годом публикации) и 3) с номерами ссылок, отсортированными в порядке убывания по библиографии, т. е. самая новая запись должна иметь самый высокий номер.

Journal articles
----------------
[J3]    reference from 2017
[J2]    reference from 2016
[J1]    reference from 2015

Conference publications
-----------------------
[C4]    reference from 2017
[C3]    reference from 2017
[C2]    reference from 2016
[C1]    reference from 2015

На данный момент у меня есть следующее:

\usepackage[backend=biber,
        isbn=true,
        giveninits=true,
        style=numeric,
        maxnames=99,
        sorting=ydnt,
        defernumbers=true,
        autocite=superscript]{biblatex}

\subsection*{Journal articles}
\begin{refcontext}[labelprefix=J]
\printbibliography[type=article]
\end{refcontext}

\subsection*{Conference publications}
\begin{refcontext}[labelprefix=C]
\printbibliography[type=inproceedings]

Отдельные библиографии работают отлично, labelprefix также работает как и хотелось, сортируя по году в порядке убывания. Однако, если я попробую решение, упомянутое в вопросе выше, я получу очень высокие номера ссылок (в районе 500).

Возможно ли вообще такое поведение, и если да, то какое наиболее элегантное решение с использованием текущего biblatex и т. д.?

Заранее большое спасибо!

решение1

Этот ответ основан наОдриответ наОбратная этикетка Multibib или порядок сортировки.

Поскольку некоторые внутренние компоненты со временем изменились, необходимо внести несколько изменений. В последних версиях могло случиться так, что некоторые записи будут обрабатываться несколько раз, поэтому нам нужно убедиться, что каждая запись обрабатывается только один раз.

Для этого решения нужна defernumbersопция.

\documentclass{article}
\usepackage[backend=biber,style=numeric,sorting=ydnt,defernumbers]{biblatex}

% Count total number of entries in each refsection
\AtDataInput{%
  \ifcsundef{bbx@processedentries:\therefsection}
    {\csgdef{bbx@processedentries:\therefsection}{}}
    {}%
  \xifinlistcs{\thefield{entrykey}}{bbx@processedentries:\therefsection}{}{%
    \listcsxadd{bbx@processedentries:\therefsection}{\thefield{entrykey}}%
    \csnumgdef{bbx@entrycount:\therefsection:\thefield{entrytype}}{%
      \csuse{bbx@entrycount:\therefsection:\thefield{entrytype}}+1}}}

% Print the labelnumber as the total number of entries in the
% current refsection, minus the actual labelnumber, plus one
\DeclareFieldFormat{labelnumber}{\mkbibdesc{#1}}    
\newrobustcmd*{\mkbibdesc}[1]{%
  \number\numexpr\csuse{bbx@entrycount:\therefsection:\thefield{entrytype}}+1-#1\relax}

\addbibresource{biblatex-examples.bib}

\begin{document}
\nocite{aksin,bertram,chiu,companion,padhye,angenendt,moraux,sigfridsson}

\newrefcontext[labelprefix=J]
\printbibliography[type=article]

\newrefcontext[labelprefix=C]
\printbibliography[type=inproceedings]
\end{document}

решение2

Большое спасибо, moewe. Ваш код отличный. Я немного изменил его для случая «сортировки по ключевым словам». Например, у меня есть несколько типов записей @misc(ключевые слова: постеры, презентации, карты, коды). Сортировка по «entrytypes» в этом случае не работает. Но она работает, когда я изменил «entrytype» на «keywords» в вашем коде:

\AtDataInput{%
  \ifcsundef{bbx@processedentries:\therefsection}
    {\csgdef{bbx@processedentries:\therefsection}{}}
    {}%
  \xifinlistcs{\thefield{entrykey}}{bbx@processedentries:\therefsection}{}{%
    \listcsxadd{bbx@processedentries:\therefsection}{\thefield{entrykey}}%
    \csnumgdef{bbx@entrycount:\therefsection:\thefield{keywords}}{%
      \csuse{bbx@entrycount:\therefsection:\thefield{keywords}}+1}}}

% Print the labelnumber as the total number of entries in the
% current refsection, minus the actual labelnumber, plus one
\DeclareFieldFormat{labelnumber}{\mkbibdesc{#1}}    
\newrobustcmd*{\mkbibdesc}[1]{%
  \number\numexpr\csuse{bbx@entrycount:\therefsection:\thefield{keywords}}+1-#1\relax}

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