Biber와 상호 참조를 사용할 때 참조 목록에 원하지 않는 항목이 있습니다.

Biber와 상호 참조를 사용할 때 참조 목록에 원하지 않는 항목이 있습니다.

방금 biber/biblatex를 사용하기 시작했는데 일부 동작을 이해하는 데 어려움을 겪고 있습니다. 제가 이 문제를 처음 접했다고는 상상할 수 없지만 중복된 질문을 찾을 수 없었습니다.

같은 저널에 게재된 여러 기사를 인용하고 있습니다. 인용 전체에서 저널 정보의 일관성을 유지하기 위해 저널 정보만 포함하는 별도의 턱받이 항목을 만들었습니다. 그런 다음 기사 항목에서 해당 항목을 상호 참조합니다. 예시 references.bib파일:

@article{myjournal,
    journaltitle={Journal of Interesting Things},
    publisher={Someone}
}

@article{myarticle1,
    crossref={myjournal},
    title={That thing},
    author={Martypants, Susan},
    year={2019},
}

@article{myarticle2,
    crossref={myjournal},
    title={That other thing},
    author={Rofessor, Peter},
    year={2020}
}

myarticle1이제 내 문서에서 와 를 모두 인용하면 참고 myarticle2문헌 목록에 이름 없이 저널 정보만 추가된 줄이 포함됩니다.

원하지 않는 항목이 포함된 출력

이 출력을 생성하는 최소 작업 예는 다음과 같습니다.

\documentclass{article}

\usepackage[backend=biber,style=alphabetic]{biblatex}
\addbibresource{references.bib}

\begin{document}
    
\cite{myarticle1,myarticle2}
    
\printbibliography{}
    
\end{document}

흥미롭게도 두 기사 중 하나만 인용하면 "빈" 저널 항목이 표시되지 않습니다. (즉, 3개 항목 대신 1개 항목의 참조 목록이 결과 \cite{myarticle1,myarticle2}로 대체됩니다.)\cite{myarticle1}

해결 방법:저널 정보를 모든 논문에 복사하여 붙여넣고 상호 참조를 제거할 수 있습니다. 그러나 나중에 저널에 대한 일부 정보를 변경하려면(예: 출판사 주소 추가) 모든 항목을 검토해야 합니다. 또는 파일에서 항목을 수동으로 제거하여 .bbl원하는 결과를 얻을 수도 있습니다. 이 솔루션 중 어느 것도 나에게 만족스럽지 않습니다.

질문:.bib(a) 중복된 저널 정보를 입력하고 유지할 필요가 없고 (b) 명시적으로 인용되지 않는 한 저널 항목이 참고 문헌 목록에 별도의 항목으로 표시되지 않도록 구성하는 데 선호되는 방법은 무엇입니까 ?

도와주셔서 감사합니다!

답변1

crossref필드는 단순한 데이터 상속 이상의 의미를 갖습니다. 또한 항목 간의 특정 부모-자식 관계를 설정하는 것입니다( xref데이터 상속 없이 이 부모-자식 관계만 모델링하는 필드 참조).

이 상위-하위 관계의 한 가지 특징은 특정 수의 하위가 참조하는 경우(명시적으로 인용되지 않은 경우에도) 상위 항목이 참고문헌에 자동으로 추가된다는 것입니다. 옵션 을 통해 하위 참조의 정확한 수를 제어할 수 있습니다 mincrossrefs. 기본값은 입니다 2. 이는 상위 항목이 최소 두 개의(다른) 하위 항목에서 참조되는 경우 참고문헌에 추가됨을 의미합니다. 귀하의 예에서는 가 및 myjournal에서 참조됩니다 .myarticle1myarticle2

이를 해결하는 한 가지 방법은 제안한 것과 mincrossrefs같이 더 높은(아마도 불합리하게 높은) 값으로 설정하는 것입니다.999마누엘 바인카우프에서코멘트.

\documentclass{article}

\usepackage[backend=biber, style=alphabetic, mincrossrefs=999]{biblatex}

\begin{filecontents}{\jobname.bib}
@article{myjournal,
  journaltitle = {Journal of Interesting Things},
  publisher    = {Someone},
}
@article{myarticle1,
  crossref = {myjournal},
  title    = {That thing},
  author   = {Martypants, Susan},
  year     = {2019},
}
@article{myarticle2,
  crossref = {myjournal},
  title    = {That other thing},
  author   = {Rofessor, Peter},
  year     = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\autocite{myarticle1,myarticle2}

\printbibliography
\end{document}

biblatex대안은 그것이 myjournal단지 데이터 컨테이너일 뿐이고 그 자체로 참고문헌에 나타날 수 있는 항목이 아니라고 말하는 것입니다 . 이는 options = {dataonly},항목을 추가하여 수행됩니다 . 이는 다르지 않다매미'에스~의 제안options={skipbib=true},, 그러나 약간 더 엄격합니다(공평하게 말하면 여기서는 실패하는 라벨 생성도 방지하기 때문입니다). 하지만 이 솔루션을 사용하면 myjournal명시적으로 인용해도 참고문헌에 표시되지 않습니다.

\documentclass{article}

\usepackage[backend=biber, style=alphabetic]{biblatex}

\begin{filecontents}{\jobname.bib}
@article{myjournal,
  journaltitle = {Journal of Interesting Things},
  publisher    = {Someone},
  options      = {dataonly},
}
@article{myarticle1,
  crossref = {myjournal},
  title    = {That thing},
  author   = {Martypants, Susan},
  year     = {2019},
}
@article{myarticle2,
  crossref = {myjournal},
  title    = {That other thing},
  author   = {Rofessor, Peter},
  year     = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\autocite{myarticle1,myarticle2}

\printbibliography
\end{document}

이러한 추가 부모-자식 관계를 설정하지 않으려면 해당 작업에 대해 다른 도구를 선택하는 것이 더 나을 수 있습니다.매미추천 @xdata컨테이너코멘트.문서biblatexxdata다음과 같이 설명합니다 (§2.2.3특수분야, p. 31)

이 필드는 하나 이상의 @xdata항목에서 데이터를 상속합니다. 개념적으로 필드 는 다음과 xdata 관련됩니다 . 논리적 상위/하위 관계를 설정하고 데이터를 상속합니다. 데이터를 상속받지 않고 논리적인 부모/자식 관계를 설정합니다. 관계를 설정하지 않고 데이터를 상속합니다. 의 값은 단일 입력 키일 수도 있고 분리된 키 목록일 수도 있습니다. 자세한 내용은 §3.13.6을 참조하세요.crossrefxrefcrossrefxrefxdataxdata

그리고 그것은 아주 잘 맞는 것 같습니다. 애초에 바람직하지 않은 행동을 일으킨 부모-자식 관계가 없습니다 xdata.crossref

@xdata그러나 항목은 참고문헌 자체에 나타날 수 없으며 유용하게 인용될 수 없다는 점에 유의해야 합니다 . 또한 필드 상속은 @crossref상위 및 하위 항목의 항목 유형을 고려할 수 있으며 title상위 필드가 하위 항목 으로 @collection상속되는 것과 같은 규칙을 설정할 수 있습니다 . 에서는 이것이 불가능합니다(그리고 말이 안 됩니다) .booktitle@incollection@xdata

\documentclass{article}

\usepackage[backend=biber, style=alphabetic]{biblatex}

\begin{filecontents}{\jobname.bib}
@xdata{myjournal,
  journaltitle = {Journal of Interesting Things},
  publisher    = {Someone},
}
@article{myarticle1,
  xdata    = {myjournal},
  title    = {That thing},
  author   = {Martypants, Susan},
  year     = {2019},
}
@article{myarticle2,
  xdata    = {myjournal},
  title    = {That other thing},
  author   = {Rofessor, Peter},
  year     = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\autocite{myarticle1,myarticle2}

\printbibliography
\end{document}

이 특별한 경우 모든 표준 스타일은 s publisher에 대한 필드를 무시하므로 @article하나의 필드, 즉 journal(title). 단일 필드 상속은 항목을 사용하여 모델링할 수도 있습니다 @string. (물론 여러 필드를 동시에 상속하려는 경우에는 이는 옵션이 아닙니다.)

\documentclass{article}

\usepackage[backend=biber, style=alphabetic]{biblatex}

\begin{filecontents}{\jobname.bib}
@string{myjournal = {Journal of Interesting Things}}
@article{myarticle1,
  journal  = myjournal,
  title    = {That thing},
  author   = {Martypants, Susan},
  year     = {2019},
}
@article{myarticle2,
  journal  = myjournal,
  title    = {That other thing},
  author   = {Rofessor, Peter},
  year     = {2020},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\autocite{myarticle1,myarticle2}

\printbibliography
\end{document}

게시된 모든 예제는

[3월 19일] 수잔 마티팬츠. "그 일". In: Journal of Interesting Things(2019).//[Rof20] Peter Rofessor. “다른 것”. In: 흥미로운 것들의 저널(2020).

답변2

Manuel Weinkauf의 의견은 실제로 해결책이었습니다.

\usepackage[backend=biber,style=alphabetic,mincrossrefs=99]{biblatex}

질문을 닫을 수 있도록 답변으로 추가하고 있습니다.

관련 정보