複数のエントリが分離していない .bib ファイルを結合せずに使用するにはどうすればよいですか?

複数のエントリが分離していない .bib ファイルを結合せずに使用するにはどうすればよいですか?

帽子をかぶった猫に関する記事で使用したいとしますcats.bib。すでにhats.bibそれに関する既存の論文(まあ、ある意味)、両方のファイルに含まれています。

今私がやりますないこれらのファイルを結合したい(この質問そしてこれです)。 私午前私が使用するツールが、エントリ間の違いの可能性を無視して、好きな方を選択することを許可します (一貫しているわけではありません。つまり、実際には同じエントリのコピーであることを保証できます)。このような状況で、エラーなしで LaTeX ドキュメントで両方の参考文献を使用できるようにするにはどうすればよいでしょうか。

ドキュメントをコンパイルするためだけに一時的にマージすることを提案する場合は、たとえば に統合する何かを提案してください。そうすれば、latexmk手動で繰り返し行う必要がなくなり、また、これを行うツールが何であれ、参考文献名を.tex事前ではなくファイル自体から取得するようになることを期待します。

答え1

.bib必要な数のファイルを使用できます。重複したエントリがあると BibTeX エラーが発生しますが、影響はなく、最初に見つかったエントリのみが保持されます。

\begin{filecontents*}{\jobname-cats.bib}
@article{unique-cats,
  author={A. Uthor},
  title={Title},
  journal={Journal},
  year=2016,
}
@article{duplicate,
  author={W. Riter},
  title={Title},
  journal={Journal},
  year=2016,
}
\end{filecontents*}
\begin{filecontents*}{\jobname-hats.bib}
@article{unique-hats,
  author={P. Laywright},
  title={Title},
  journal={Journal},
  year=2016,
}
@article{duplicate,
  author={W. Riter},
  title={Title},
  journal={Journal},
  year=2016,
}
\end{filecontents*}

\documentclass{article}

\begin{document}

\title{Cats in hats}
\author{Einpoklum}
\maketitle

We want to cite \cite{unique-cats}, but also \cite{unique-hats}.

There is a duplicate \cite{duplicate}.

\bibliographystyle{plain}
\bibliography{\jobname-cats,\jobname-hats}

\end{document}

BibTeX による警告は次のとおりです。

This is BibTeX, Version 0.99d (TeX Live 2016)
The top-level auxiliary file: einmulti.aux
The style file: plain.bst
Database file #1: einmulti-cats.bib
Database file #2: einmulti-hats.bib
Repeated entry---line 7 of file einmulti-hats.bib
 : @article{duplicate
 :                   ,
I'm skipping whatever remains of this entry
(There was 1 error message)

ここに画像の説明を入力してください

答え2

Bib ファイルは単なるプレーンテキストであり、同等のものはないので、\end{document}それらを連結するだけです (重複エントリの責任を受け入れる必要があります)。

Linuxでは--shell-escape次のようにすることができます

\documentclass{article}
\immediate\write18 {cat nice_papers*.bib > \jobname.bib}
\addbibresource{\jobname.bib}
\begin{document}

Windows でも同様です: の代わりにcat...を使用しますcopy /y nice_papers*.bib \jobname.bib。これは biblatex を想定していますが、bibtex の場合の変更は簡単です ( \bibliography{\jobname})。

latexmk外部ツールを使用しないため、互換性があるはずです。

注意すべきことの1つは、ソースbibファイルは1つ以上の改行で終わる必要があることです。そうしないと、マージポイントでゴミ行が発生してしまいます(これは、bibfile 内のコメント

関連情報