使用相同参考书目的多个 LaTeX 文件

使用相同参考书目的多个 LaTeX 文件

我有多个不同的 LaTeX 文件,每个文件都从同一个文件中提取参考书目.bib。当它们编译时,我希望它们共享一个参考书目文件,即一个单独的 PDF 文件。例如,假设我有

one.tex
two.tex
three.tex
bibliography.bib

我想创造

one.pdf
two.pdf
three.pdf
bibliography.pdf

其中one.pdftwo.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.auxLaTeX 将读取的正确文件(通过激流排版时请重新输入 包one.textwo.tex然后three.tex再输入一次。

答案2

我们假设以下情况:

  • one.textwo.texthree.tex具有以下结构:

    \documentclass{article}
    % preamble content
    \begin{document}
    % document content
    \bibliography{bibliography}% expects file "bibliography.bib"
    \end{document}
    
  • 您正在使用bibtex

以下是获得所需输出所需执行的步骤

  1. pdflatex one
  2. bibtex one
  3. pdflatex one
  4. pdflatex one
  5. 注释掉以下行\bibligoraphy{bibliography}
  6. pdflatex one
  7. two.tex重复步骤 1-6three.tex
  8. 构造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}
    
  9. 重复步骤 1-3bibliography.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文件是否引用完全相同的\cites?(这个问题中这一点并不明确。)

如果他们这样做,那么其他答案就应该有效。

如果没有的话,我能想到的唯一获得共同参考书目的方法是,在每个.tex文件中,包含\nocite{<key>}每个应该包含的条目,或者,如果.bib文件包含仅有的所需的物品,然后\nocite{*}就可以代替使用。

更进一步,您可以创建一个仅.tex包含\nocite说明的文件,并将\input其添加到其他三个.tex文件中。

这不会给您单独的 pdf 文件,但它会为您提供所有三个 tex 作业的相同书目内容。

相关内容