LaTeX + Git:参考书目

LaTeX + Git:参考书目

假设我的电脑上只有一个书目文件,我将阅读的每一篇文献都写在里面,并将其导入到我写的每一篇论文中,或者导入到我的博士论文中。\nocite{*}这样我就不用将未引用的文献放入文档中。我还使用 Git 对我的 LaTeX 文档进行版本控制。

我想要做的是为我的参考书目文件建立一个新的 Git 存储库,并且只为该文件建立一个新的 Git 存储库,理想情况下,我可以在每次需要它时拉取它,更新它,使用它,然后将它作为更新版本推回存储库。

我的问题是:

  1. 这是一个好主意吗?
  2. 一旦我为我的参考书目设置了存储库,我该如何提取我论文存储库中的文件,而不必同时在同一个文件夹中有两个存储库?我不想引用任何绝对路径,因为这会使我的文档无法移植

书目文档应该在纸质仓库中更新,然后推送到纸质仓库和书目仓库

答案1

我使用的方法详述于http://andrius.velykis.lt/2012/06/master-bibtex-file-git-submodules/为了我自己的工作。

因此,我有一个包含我的 BibTeX 文件的存储库“bib”。对于此存储库,为了方便和可移植性,我在 BitBucket 上还有一个私有远程存储库。

在我的每篇论文和毕业论文中,我都会用git submodule add <bitbucket-URL> biblio我的文档创建一个子模块目录。然后,您可以在文档中指定使用该目录中的 BIB 文件。

通常,我尝试只编辑我的主要 BIB 存储库(对我来说,这是 JabRef 中唯一加载的存储库),将这些更改推送到 bitbucket,然后从每个文档存储库中提取更改。但是,在某些情况下,我只想更改作者的格式,不要在论文的参考书目中显示 URL,... 正确的方法是修改 BST 文件等,但在关键时刻,只需调整论文的“参考书目”模块通常要快得多。

我认为这种通用方法有几个优点:

  • 你的参考书目是有版本的,因此你可以轻松跟踪你使用的 BIB 文件的确切版本,
  • 您可以将更改从主“bib”存储库转移到每个文档,反之亦然,
  • 你可以调整特定于某个文档的参考书目,而不必将它们推送回主存储库,
  • 一切都可以使用相对路径完成,因此,它可以在计算机、用户、操作系统之间移植……

但也有一些缺点:

  • 当您添加许多参考文献时,您最终会经常进行推送和拉取:从主要参考文献推送,在文档中拉取。
  • Git 子模块使你的文档存储库及其使用方式变得更加复杂。因此,git在使用此工作流程之前,你应该已经熟悉了。

关于网络访问的备注 虽然我的方法通常依赖于 bitbucket,但我也喜欢在子模块中添加另一个远程。该额外的远程指向我的主要参考书目存储库的位置。这允许我在没有网络访问权限时推送/拉取到主存储库。该额外的远程可能无法在计算机之间很好地迁移(由于文件路径不同),但由于它只是“在没有网络的情况下”存在,所以我不太介意。

备注submodule 在 git 世界中,有一个子模块是否是好东西的长期讨论。另一种方法是使用git subtree,我不使用它,但我想这个工作流程的概念可以适应使用subtree而不是submodule

答案2

当然。这几乎就是我所做的。

回答子问题 1:这是一个好主意(尽管我自己这么说)

回答问题2:......

将 .bib 放入本地 texmftree

你想要的是本地 texmf 树,位于一个 git repo 中。本地 texmf 树用于放置各种类似于包的工件,这些工件不是通过包管理器管理的正确包(例如 Windows 中的 Miktex)。

本地 texmf 树意味着您永远不必使用绝对路径,甚至相对路径来存放参考书目。它也非常有用,因为许多会议和期刊不通过 CTAN 分发自己的模板和样式,而是以.sty文件形式分发.bst

如何设置本地文本树超出了本答案的范围,但并不难。请参阅以下问题:

创建完该树后,将其添加到 git。将文件master.bib放入localtexmf\bibtex\bib\master_bibliography\master.bib。(我在这个目录中还有我的 JabRef XML 设置,以及一个.tex用于制作带注释的参考书目的文件)

然后当你开始处理一个项目时,你只需添加它\bibliography{master},它就会找到它。比绝对或者相对路径。

然后,当您在新计算机上工作时,请从 git 检查 repo,并让您的 tex 发行版了解本地 texmf 树。


将本地 texmf 树放入 Git

现在把它放哪儿呢?

所有工作都集中在一个仓库中,包括 texmftree

我的所有博士工作只有一个 git rep,里面有一堆文件夹。这不是一个很棒的系统,但它很简单。所以我的 texmf 树在 中phd\Resources\tools\localtexmf\。而我的论文在 中phd\documents_prepared\Journal Papers\PaperName。我的实验原型在 中\phd\prototypes\ProjectName。通常我会让原型将其数据转储到 CSV 中,然后转储到 Paper 文件夹中的数据文件夹中,然后我就可以使用 PGFPlots 生成图表。(我的 tex foo 花了一段时间才达到那个水平,但现在它已经达到了,它很好)

这很容易和简单。并且由于它全部在 repo 中,因此您无需担心多次提交。

为你当前的工作保留一个 git repo,并为 texmf 树保留一个单独的

这并不太复杂。无需将一个嵌套在另一个中,因为您没有使用相对路径或任何东西(也没有必要;请参阅下一节)。所以这很好。您只需要记住提交和提取两者。您可以编写脚本。

使用 Git 子模块进行嵌套

您可以在 git repos 中拥有 git repos。这是一个子模块 (文档)。我并没有特别看到它的优点,只是它确实意味着有人可以检出你的 paper repo,并让它将 texmf 树 git repo 作为子模块拉出来。

缺点是现在每个 paper repo 在本地有 1 个 texmf 树。但在 git 中仍然只有一个。但是当你在处理多个项目时让它们保持同步似乎并不好玩。

git 子模块的工作方式可能和你想象的不一样;因此我不喜欢它们。它们可能不是 git 中最不直观的东西,但这是一个竞争非常激烈的领域 (:-P)。这篇文章详细介绍了一些内容。我建议在做这件事之前先做一些研究。


PS 您可以使用 BibtexAnnote字段来存储注释。如果您正在使用 Jabref 之类的工具,该工具有助于搜索和索引您的 .bib 文件,并且通常为您的 .bib 文件提供 GUI,则可能需要Annote在所有 Bibentry 类型上启用它。

相关内容