單獨的 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

這個答案是基於奧黛麗的回答多圍兜反向標籤或排序順序

由於一些內部結構隨著時間的推移而發生了變化,因此需要進行一些調整。在最近的版本中,某些條目可能會被處理多次,因此我們需要確保每個條目僅處理一次。

該解決方案需要該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

非常感謝,莫威。你的程式碼非常好。我針對“按關鍵字排序”的情況稍微修改了它。例如,我有多種條目類型@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}

相關內容