설명된 것과 유사한 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}