biber で crossref を使用するときに参照リストに不要な項目がある

biber で crossref を使用するときに参照リストに不要な項目がある

私は最近 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によって参照されています。myarticle1myarticle2

これを回避する方法の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 を参照してください。crossrefxrefcrossrefxrefxdataxdata

そして、それは非常によく当てはまるように思えます。そもそも、望ましくない行動を引き起こした親子関係がないのxdataです。crossref

@xdataただし、エントリは参考文献自体には表示できず、引用もできないことに注意してください。さらに、 のフィールド継承では@crossref、親エントリと子エントリのエントリ タイプを考慮し、親titleのフィールドが子に継承されるなどのルールを設定できます。 ではこれは不可能です (意味がありません) 。@collectionbooktitle@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}

掲載されているすべてのサンプルは

[3月19日] スーザン・マーティパンツ。「あれ」。Journal of Interesting Things (2019)に掲載。//[20日] ピーター・ロフェッサー。「あれ、もう一つ」。Journal of Interesting Things (2020)に掲載。

答え2

マヌエル・ヴァインカウフ氏のコメントはまさに解決策でした。

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

質問を閉じるために回答として追加します。

関連情報