Biblatex : 스타일과 분류가 다른 두 개의 참고 문헌

내가 발생한 문제에 대한 MWE :

\documentclass{article} \usepackage{filecontents} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003 } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002 } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = www.test1.com/bild.jpg, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = www.test2.com/bild.jpg } \end{filecontents} \usepackage[backend = biber, defernumbers = true, style = alphabetic]{biblatex} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} %Append keywords to identify different bibliography entries. \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } %Declare new sorting scheme for refernence bibliography. \DeclareSortingScheme{appearance}{ \sort{\citeorder} } %Copied from numeric.cbx to imitate numerical citations. \providebool{bbx:subentry} \newbibmacro*{citenum}{%Note: the original macro was called "cite". I did not redefine "cite", but instead defined a new macro "citenum", because the author-year citations use the "cite" macro too. "\renewbibmacro*{cite}" would have caused all the author-year citations to become numeric too. \printtext[bibhyperref]{%If you ever want to use hyperref \printfield{prefixnumber}% \printfield{labelnumber}% \ifbool{bbx:subentry} {\printfield{entrysetcount}} {}}} %Copied from numeric.cbx to define a new numeric citation command for @online entries. \DeclareCiteCommand{\cnume}[\mkbibbrackets] {\usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{citenum}}%Note: this was originally "cite" but I changed it to "citenum" to avoid clashes with the author-year style. {\multicitedelim} {\usebibmacro{postnote}} \begin{document} The first two citations \cnume{LinkD01} and \cite{BookB02}. The others are \cnume{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] %Redefine the bibliography environment to imitate the numeric citation style \defbibenvironment{bibliographyNUM} {\list {\printfield[labelnumberwidth]{labelnumber}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\labelsep}{1em} \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hspace{-1.1em}} \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM,title=References, keyword=secondary, resetnumbers] \end{document} 

문제 : 두 개의 참고 문헌이 필요합니다. 첫 번째는 알파벳 스타일이고 저자 이름별로 정렬되어 있습니다. 두 번째는 인용 순서로 정렬 된 숫자 스타일입니다. 둘 다 공통 참조가 없습니다. 어떻게 든 biblatex에서 다음과 같은 것을 검색하고 있습니다.

\bibliographystyle{style = alphabetic} \printbibliography{books.bib} \bibliographystyle{style = numerical, sorting = none} \printbibliography{links.bib} 

나는 biblatex가 특히 여러 참고 문헌과 함께 작동하도록 작성되었다고 생각했지만 아무것도 찾지 못했습니다. MWE에 표시된 것과는 다른 방법입니다 (분명히 해킹 임). 실제로 다른 정렬을 원할 때까지 꽤 잘 작동합니다. 사용할 때

\newrefcontext[sorting=none] 

인용 번호가 0이됩니다.

댓글

  • biblatex는 분할 / 다중 참고 문헌 (다른 많은 기능 중에서)을 지원하도록 작성되었지만 ‘ 다른 참고 문헌 혼합을 공식적으로 지원하지는 않습니다. 하나의 문서에 스타일.

답변

labelnumber에서 biblatex까지 style=alphabetic로도 숫자 인용을 사용할 수 있습니다.

cite 명령은 키워드이므로 keyword에 관계없이 모든 항목에 \cite를 사용할 수 있습니다.

숫자 참고 문헌의 경우 숫자 인용을 인쇄하는 새로운 참고 문헌 환경을 정의합니다. bibliographyNUMnumeric.bbx에서 직접 복사됩니다. 참고 문헌 정렬을 설정하려면 숫자 참고 문헌 앞에

\newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] 

라고 말하면됩니다. 이전 참고 문헌은 알파 스타일 참고 문헌에 적합한 글로벌 정렬 체계 anyt를 사용합니다. 정렬 체계 할당을 로컬로 유지해야하는 경우 (숫자 참고 문헌이 알파 참고 문헌 앞에 오므로)

\begin{refcontext}[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{refcontext} 

MWE p를 사용합니다. >

\documentclass{article} \usepackage[style=alphabetic, labelnumber, defernumbers=true, backend=biber]{biblatex} \usepackage{hyperref} % Append keywords to identify different bibliography entries. % appendstrict only appends if the field is nonempty, % we use that to add a comma to avoid mushing together two keywords \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifkeyword{secondary} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \defbibenvironment{bibliographyNUM} {\list {\printtext[labelnumberwidth]{% \printfield{labelprefix}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003, keywords = {hello}, } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002, } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = {www.test1.com/bild.jpg}, keywords = {bye}, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = {www.test2.com/bild.jpg}, } \end{filecontents} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} \begin{document} The first two citations \cite{LinkD01} and \cite{BookB02}. The others are \cite{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{document} 

예시 출력

댓글

  • biblatex + biber 패키지 (MikTex 사용자)를 다시 설치하면 완벽하게 잘 작동하고 우아하게 보입니다. 누군가 ” 초기화되지 않은 값 ” 오류에 대해 궁금해하는 경우이 상태를 그대로두고 싶었습니다. 또한 .tex를 제외한 모든 파일은 프로 플렘을 일으킬 수 있으므로 삭제해야합니다. 감사합니다.
  • @Jannik biblatex 및 BIber의 최신 버전에는 ” 초기화되지 않은 값 “이 날아 다닙니다. 그러나 버전이 이전 버전이거나 ‘ 일치하지 않는 경우 위의 방법은 작동하지 않습니다. 업데이트 후 오래된 파일이 고착되어 문제를 일으키지 않도록 임시 파일을 삭제하는 것이 거의 문제가되지 않습니다.
  • \newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite}를 추가하면

    \cite 정의 안에로드시 선택한 스타일 (예 : authoryear, …)을 삽입합니다 (\printfield{labelalpha}\printfield{extraalpha}).

  • @opatut 좋은 생각입니다. 일부 상황에서는 코드 배치가 중요합니다. 또한 단순히 표준 매크로를 전혀 호출하지 않는 것이 항상 좋은 생각은 아닐 수도 있습니다 (특히 더 복잡해지고 정리 작업을 수행하는 경우 ‘ -icomp 스타일). 여기서는 문제가 없을 것입니다. \if...를 움직여 줄만 저장할 수 있지만 다시 분리 할 수 있습니다.
  • @GandalfLechner 원하는 경우 원래 키워드를 유지하려면 약간 더 잘할 수 있습니다. 수정 된 답변을 참조하십시오.

답변

감사합니다. 나는 문제의 적응 버전을 공유하고 싶었다. 다른 인용 단어를 정의하여 Bib을 카테고리로 나눴습니다. 특히 biblatex : 서로 다른 .bib 파일로 분류 된 여러 참고 문헌 에 대한 확실한 driftnet 소스를 복사 했으므로 모범 사례는 아니지만 작동합니다. 바라건대 biblatex는 향후 혼합 된 서지 스타일을 기본적으로 지원할 것입니다.

\documentclass[fontsize=11pt,a4paper,bibliography=totoc]{scrbook} \usepackage[style=alphabetic,backend=biber,defernumbers = true]{biblatex} \addbibresource{bib/references.bib} \DeclareBibliographyCategory{pubA} \DeclareBibliographyCategory{contA} \DeclareBibliographyCategory{refs} \DeclareBibliographyCategory{relT} \defbibheading{pubA}{\section*{Publications of the Author}} \defbibheading{contA}{\section*{Contributions of the Author}} \defbibheading{refs}{\section*{References}} \defbibheading{relT}{\section*{Related Theses}} \newcommand*{\citeA}[2][]{\addtocategory{pubA}{#2}\cite[#1]{#2}} \newcommand*{\citeC}[2][]{\addtocategory{contA}{#2}\cite[#1]{#2}} \newcommand*{\citeR}[2][]{\addtocategory{refs}{#2}\cite[#1]{#2}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifcategory{refs} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \newcommand*{\citeT}[2][]{\addtocategory{relT}{#2}\cite[#1]{#2}} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} % important to get [] in bib \defbibenvironment{refsEnv} {\list {\printtext[labelnumberwidth]{% \printfield{prefixnumber}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{document} some text \citeR{<citekey>} \citeT{<citekey>}... \printbibheading[heading=bibintoc] \printbibliography[heading=subbibliography,title={Publications of the Author},category=pubA] \printbibliography[heading=subbibliography,title={Contributions of the Author},category=contA] \newrefcontext[sorting=none] \printbibliography[heading=subbibliography,title={References},category=refs,env=refsEnv,resetnumbers] \printbibliography[heading=subbibliography,title={Related Theses},category=relT] \end{document} 

답변

@moewe가 말한대로 숫자 인용을 style=alphabetic.

다양한 정렬 순서의 경우 훨씬 더 쉬운 방법이 있습니다. refcontext 환경은 정렬 옵션입니다. 먼저 Biblatex를 사용하여 기본 참고 문헌을 생성합니다.

\printbibliography[title=Bibliography, keyword=primary] 

그런 다음 다른 정렬, 필터 및 스타일을 포함하여 두 번째 목록을 만듭니다. refcontext를 매개 변수로 사용합니다.

\begin{refcontext}[sorting=ydnt]{} % sort chronologically \printbibliography[title=References, keyword=secondary, resetnumbers] \end{refcontext} 

refcontext의 마지막 매개 변수 인 빈 {} 다른 곳에 선언하지 않고 임시 환경을 만들 수 있습니다.

학교에서 논문 끝에 이력서를 포함하도록 요구할 때 이것을 사용했기 때문에 내 작품의 참고 문헌을 역순으로 생성해야했습니다. 논문에 대한 일반적인 AZ 참고 문헌 외에 연대순. 내가 가진 것보다 훨씬 깨끗했습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다