最新のエントリと最大の参照番号を先頭にして、Biblatex の書誌を分離します。

最新のエントリと最大の参照番号を先頭にして、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

この回答はオードリーの回答マルチ書誌逆ラベルまたは並べ替え順序

時間の経過とともに内部の一部が変更されたため、いくつかの調整が必要です。最近のバージョンでは、特定のエントリが複数回処理される可能性があるため、各エントリが 1 回だけ処理されるようにする必要があります。

このソリューションには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(キーワード: ポスター、プレゼンテーション、マップ、コード) があります。この場合、「エントリ タイプ」によるソートは機能しません。しかし、あなたのコードで「エントリ タイプ」を「キーワード」に変更すると機能します。

\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}

関連情報