私は、説明されているような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}