방금 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
에서 참조됩니다 .myarticle1
myarticle2
이를 해결하는 한 가지 방법은 제안한 것과 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
컨테이너코멘트.문서biblatex
xdata
다음과 같이 설명합니다 (§2.2.3특수분야, p. 31)
이 필드는 하나 이상의
@xdata
항목에서 데이터를 상속합니다. 개념적으로 필드 는 다음과xdata
관련됩니다 . 논리적 상위/하위 관계를 설정하고 데이터를 상속합니다. 데이터를 상속받지 않고 논리적인 부모/자식 관계를 설정합니다. 관계를 설정하지 않고 데이터를 상속합니다. 의 값은 단일 입력 키일 수도 있고 분리된 키 목록일 수도 있습니다. 자세한 내용은 §3.13.6을 참조하세요.crossref
xref
crossref
xref
xdata
xdata
그리고 그것은 아주 잘 맞는 것 같습니다. 애초에 바람직하지 않은 행동을 일으킨 부모-자식 관계가 없습니다 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}
게시된 모든 예제는
답변2
Manuel Weinkauf의 의견은 실제로 해결책이었습니다.
\usepackage[backend=biber,style=alphabetic,mincrossrefs=99]{biblatex}
질문을 닫을 수 있도록 답변으로 추가하고 있습니다.