我同时处理多个 LaTeX 项目,每个项目都存储在单独的 git 存储库中。我还积累了一套我熟悉的命令和环境,它们可以帮助我在编写 LaTeX 代码时节省时间。我的问题是如何将每个 git 存储库中包含的样式文件合并为一个可以在 git 存储库之间共享的样式文件。
目前,在每个 git 存储库中,我都有一个样式文件,我将该文件放在 git 存储库内的 localtexmf 树中。文件树层次结构可能如下所示:
project-a/doc1/main.tex
project-a/doc2/main.tex
project-a/localtexmf/tex/latex/mymacros/mymacros.sty
这种方法有以下优点:
- git仓库中的所有文档可以共享同一个样式文件。
- 样式文件也处于版本控制之下。
这种方法的缺点是,我有多个样式文件共享许多相似的代码,例如
project-a/localtexmf/tex/latex/mymacros/mymacros.sty
project-b/localtexmf/tex/latex/mymacros/mymacros.sty
project-c/localtexmf/tex/latex/mymacros/mymacros.sty
这会导致不必要的代码重复。通常,当我修复错误或更改命令定义时,我希望更改发生在所有文件中mymacros.sty
。
我想要做的是以某种方式拥有一个受版本控制但由多个 git 存储库共享的单一样式文件。我该怎么做?
我选择的操作系统是 Ubuntu Linux 或 OS X。
基于如何对多个项目中使用的 TeX 相关文件进行版本控制?,我猜想这git submodule
就是答案的一部分。
答案1
我有一个目录~/TeX
,我将在许多地方使用的任何个人样式文件都放在其中。此目录位于其自己的 git 存储库中,并且我已将环境变量TEXINPUTS
设置为.:~/TeX//:
,以便 latex 和朋友自动搜索它。
正如 OP 在评论中所说,存在一个问题,即 tex 文件和样式的存储库并不总是同步的,这意味着旧的提交可能无法编译,因为它需要的样式文件版本与当前版本中出现的版本不同。通常我发现这不是问题,因为我对这些文件的大多数更改都是向后兼容的“改进”。无论如何,如果旧的提交无法编译,那么您可以将存储库回退到~/TeX
源文件提交版本的日期,然后进行编译 - 在 git 日志中找到日期很容易。如果我需要经常这样做,那么我会编写一个钩子/脚本来同时回退两个存储库。因为这对我来说很少是个问题,所以我并不担心这样做。