我有多个不同的 LaTeX 文件,每个文件都从同一个文件中提取参考书目.bib
。当它们编译时,我希望它们共享一个参考书目文件,即一个单独的 PDF 文件。例如,假设我有
one.tex
two.tex
three.tex
bibliography.bib
我想创造
one.pdf
two.pdf
three.pdf
bibliography.pdf
其中one.pdf
,two.pdf
和 都three.pdf
没有自己的参考书目,而是都引用同一个bibliography.pdf
文件。这可以做到吗?如果可以,怎么做?
答案1
写入bibliography.tex
包含以下内容的文件
\documentclass{article}
\begin{document}
\nocite{*}
\bibliographystyle{plain}
\bibliography{bibliography}
\end{document}
并编译它(LaTeX、BibTeX、LaTeX、LaTeX)。然后one.tex
其他的就可以了
\documentclass{article}
\usepackage{xcite}
\externalcitedocument{bibliography}
\begin{document}
...
\end{document}
请注意激流这个包诞生于 TeX.SX 上的一个问题:使用其他文件的参考书目编号和引文
你可以通过一个简单的 shell 单行命令从你的文件中收集所请求的\nocite{*}
引用bibliography.tex
grep -h citation one.aux two.aux three.aux | sed /citation/s//nocite/ > cites.tex
并说\input{cites}
inbibliography.tex
而不是\nocite{*}
。
一点解释
当 LaTeX 找到\cite
命令时,它会将其写入文件中.aux
,以便稍后使用 BibTeX 进行处理。因此\cite{xyz}
将在文件中生成一行,.aux
格式为
\citation{xyz}
在当前情况下,您有一个大.bib
文件,并且希望只从中提取实际引用的条目。但这些条目分散在三个文件中,需要单独编译,并且可能并非每个文件都会引用所有请求的条目。
因此,策略是延迟书目排版,直到所有引文都出现在三个.aux
文件中。它们将显示典型的??在文中,但这并不重要。
该bibliography.tex
文件的格式为
\documentclass{article}
\begin{document}
\input{cites}
\bibliographystyle{plain}
\bibliography{bibliography}
\end{document}
我们将cites.tex
用必要的 BibTeX 键填充文件。一行代码
grep -h citation one.aux two.aux three.aux | sed /citation/s//nocite/ > cites.tex
将会找到\citation{...}
三个.aux
文件中的所有行;它们将会被过滤,并且sed
会变成\citation
,\nocite
输出将会被写入,cites.tex
并且会由以下形式的行组成
\nocite{abc}
\nocite{def}
...
包含所有引用的条目键。现在我们可以在 上运行 LaTeX bibliography.tex
,然后在 BibTeX 上运行,然后再在 LaTeX 上运行。这将生成bibliography.aux
LaTeX 将读取的正确文件(通过激流排版时请重新输入 包one.tex
,two.tex
然后three.tex
再输入一次。
答案2
我们假设以下情况:
one.tex
,two.tex
并three.tex
具有以下结构:\documentclass{article} % preamble content \begin{document} % document content \bibliography{bibliography}% expects file "bibliography.bib" \end{document}
您正在使用
bibtex
以下是获得所需输出所需执行的步骤
pdflatex one
bibtex one
pdflatex one
pdflatex one
- 注释掉以下行
\bibligoraphy{bibliography}
pdflatex one
two.tex
重复步骤 1-6three.tex
构造
bibliography.tex
具有\documentclass{article} % preamble content \pagestyle{empty}% If needed \begin{document} \nocite{*}% Include all references in bibliography.bib \bibliography{bibliography}% expects file "bibliography.bib" \end{document}
重复步骤 1-3
bibliography.tex
步骤 5 删除仅有的在文档中打印参考书目,同时仍保留参考文献。在此步骤中,.aux
文件将被覆盖,但其中包含的原始值仍可使用/可用。
第 8 步可能会有很大差异,具体取决于文件的排版输出bibliography.pdf
。例如,如果您想要页码或页眉/页脚。我\pagestyle{empty}
假设您不需要页眉或页脚。
答案3
如果该.bib
文件仅用于这三个.tex
文件,并且您愿意使用biblatex
,那么这似乎很容易做到。
对于这三个文件,照常从文件中.tex
引用,但不要在文件中包含命令。然后,在第四个文件中,您只需使用和命令即可打印 bibfile 中的每个条目。 bibkeys
.bib
\printbibliography
.tex
\nocite{*}
\printbibliography
因此,前三个文件的骨架将是:
\documentclass{<whatever>}
\usepackage[<options>]{biblatex}
\addbibresource{<bibfile.bib>}
\begin{document}
\cite{<key1>}% etc., etc.
\end{document}
而您的主书目文件将是:
\documentclass{<whatever>}
\usepackage[<options>]{biblatex}
\addbibresource{<bibfile.bib>}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
要点:此.bib
文件必须仅包含在其他三个文件中找到的条目.tex
!(可masterbibliography.bib
通过 等工具轻松从文件中提取bibtool
。
答案4
所有.tex
文件是否引用完全相同的\cite
s?(这个问题中这一点并不明确。)
如果他们这样做,那么其他答案就应该有效。
如果没有的话,我能想到的唯一获得共同参考书目的方法是,在每个.tex
文件中,包含\nocite{<key>}
每个应该包含的条目,或者,如果.bib
文件包含仅有的所需的物品,然后\nocite{*}
就可以代替使用。
更进一步,您可以创建一个仅.tex
包含\nocite
说明的文件,并将\input
其添加到其他三个.tex
文件中。
这不会给您单独的 pdf 文件,但它会为您提供所有三个 tex 作业的相同书目内容。