최신 항목과 가장 높은 참조 번호가 맨 위에 표시되는 별도의 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

이 답변은 다음을 기반으로 합니다.오드리님의 답변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

정말 고마워요, 모에. 귀하의 코드는 훌륭합니다. '키워드별 정렬'의 경우를 위해 살짝 수정했습니다. 예를 들어, @misc(키워드: 포스터, 프리젠테이션, 지도, 코드) 에는 여러 가지 출품 유형이 있습니다 . 이 경우 '항목 유형'을 기준으로 정렬하면 작동하지 않습니다. 하지만 코드에서 '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}

관련 정보