
Предположим, у меня есть 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
поскольку не использует внешние инструменты.
Следует обратить внимание на то, что исходные файлы bib должны заканчиваться одним или несколькими символами новой строки, чтобы в точке слияния не образовалась пустая строка (это особенно актуально, если у вас естькомментарии в вашем бибфайле)