私は最近 biber / biblatex を使い始めたのですが、その動作の一部を理解するのに苦労しています。この問題に遭遇したのは私が初めてだとは思えませんが、重複した質問を見つけることができませんでした。
同じジャーナルに掲載されている複数の記事を引用しています。引用全体でジャーナル情報の一貫性を保つために、ジャーナル情報のみを含む別の bib エントリを作成しました。次に、そのエントリを記事エントリから相互参照します。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}
興味深いことに、2 つの論文のうち 1 つだけを引用すると、「空の」ジャーナル項目は表示されません。(つまり、 を\cite{myarticle1,myarticle2}
に置き換えると、\cite{myarticle1}
参考文献リストには 3 つの項目ではなく 1 つの項目が表示されます。)
回避策:ジャーナル情報を各論文にコピー&ペーストし、相互参照を削除することができます。ただし、後でジャーナルに関する情報を変更したい場合 (たとえば、出版社の住所を追加する場合)、すべてのエントリを確認する必要があります。または、ファイルからエントリを手動で削除することもできます。.bbl
この場合も、目的の出力が得られます。どちらの解決策も、私にとっては満足できるものではありません。
質問:(a) 重複するジャーナル情報を入力して維持する必要がない、(b) 明示的に引用しない限り、ジャーナルエントリが参考文献リストに別の項目として表示されないような構造にする.bib
には、どのような方法が望ましいでしょうか?
助けてくれてありがとう!
答え1
このcrossref
フィールドは、単なるデータ継承以上のものです。エントリ間の特定の親子関係を確立することも目的としています (xref
データ継承なしでこの親子関係のみをモデル化するフィールドを参照)。
この親子関係の特徴の 1 つは、親エントリが特定の数の子エントリによって参照されている場合 (明示的に引用されていない場合でも)、親エントリが参考文献に自動的に追加されることです。子エントリの参照の正確な数は、 オプションで制御できますmincrossrefs
。デフォルト値は で2
、これは、親エントリが少なくとも 2 つの (異なる) 子エントリによって参照されている場合に、親エントリが参考文献に追加されることを意味します。これは、例の場合です:は、およびmyjournal
によって参照されています。myarticle1
myarticle2
これを回避する方法の1つは、次のように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特殊分野、31ページ)
このフィールドは、1 つ以上の
@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}
publisher
この特定のケースでは、すべての標準スタイルが のフィールドを無視する@article
ため、継承されるのは 1 つのフィールド、つまり のみです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
マヌエル・ヴァインカウフ氏のコメントはまさに解決策でした。
\usepackage[backend=biber,style=alphabetic,mincrossrefs=99]{biblatex}
質問を閉じるために回答として追加します。