提供软件包作为版本控制存储库的策略

提供软件包作为版本控制存储库的策略

我正在开发实验性软件包(例如my-package-1my-package-2)。它们的更改通过版本控制系统进行跟踪(git事实上),相应的存储库如下:

./
├── doc
│   └── latex
│       └── my-package-⟨n⟩
│           ├── README
│           ├── README.md
│           └── my-package-⟨n⟩.pdf
├── source
│   └── latex
│       └── my-package-⟨n⟩
│           ├── my-package-⟨n⟩.dtx
│           └── my-package-⟨n⟩.ins
└── tex
    └── latex
        └── my-package
            └── my-package-⟨n⟩.sty

有些人应该测试这些软件包,为了方便起见,我想避免编译和.insdtx文件:他们应该能够通过在其TEXMFHOME¹相应的git存储库中克隆来使用这些软件包:

git clone ssh://path/to/my-package-⟨n⟩.git

克隆存储库$TEXMFHOME/my-package-⟨n⟩/:不是解决方案

从目录运行这些命令$TEXMFHOME/克隆存储库,不是进入TEXMFHOME的根部,进入$TEXMFHOME/my-package-⟨n⟩/。问题是,而文件:

$TEXMFHOME/tex/latex/my-package-⟨n⟩.sty

TeX 会找到以下文件:

$TEXMFHOME/my-package-⟨n⟩/tex/latex/my-package-⟨n⟩.sty

不是由 TeX 发现。

克隆存储库$TEXMFHOME/:不是解决方案

可以通过从目录运行将这些存储库直接克隆到TEXMFHOME根目录中$TEXMFHOME/,例如:

git clone ssh://path/to/my-package-1.git .

现在的问题是,无法对其他存储库执行相同的操作:

git clone ssh://path/to/my-package-2.git .

失败:

fatal: destination path '.' already exists and is not an empty directory.

克隆存储库$TEXMFHOME/tex/latex/my-package-⟨n⟩/:一个解决方案,但可能不是最好的解决方案

解决方法是运行以下命令:

git clone ssh://path/to/my-package-⟨n⟩.git

来自临时目录,例如

$TEXMFHOME/tex/latex/my-package-⟨n⟩/

这将产生以下结构:

$TEXMFHOME
└── tex
    └── latex
        └── my-package-⟨n⟩
            ├── doc
            │   └── latex
            │       └── my-package-⟨n⟩
            │           ├── README
            │           ├── README.md
            │           └── my-package-⟨n⟩.pdf
            ├── source
            │   └── latex
            │       └── my-package-⟨n⟩
            │           ├── my-package-⟨n⟩.dtx
            │           └── my-package-⟨n⟩.ins
            └── tex
                └── latex
                    └── my-package
                        └── my-package-⟨n⟩.sty

事实上,文件如下:

$TEXMFHOME/tex/latex/my-package-⟨n⟩/tex/latex/my-package-⟨n⟩.sty

由 TeX 发现。

但我想还有更好的策略。因此我的问题是:提供软件包作为版本控制存储库的策略是什么?


¹ 这些问题是针对 TeX Live 发行版提出的,但可以适用于 MiKTeX。

答案1

我建议不要尝试将主存储库放入本地 TeX 树中,而是使用适当的符号链接(在 Windows 上至少可以使用管理员权限)。为了进行测试,树中唯一需要对 TeX 可见的部分是tex,而不是sourcedoc(尽管可以添加它们)。因此,我将在[HOME]/my-package/tex/latex/my-package和之间建立符号链接$TEXMFHOME/tex/latex/mypackage。事实上,我可能会将您的结构简化为[HOME]/my-package/latex/my-packageETC。这将允许您在代码的“实时”版本上进行测试,同时使您的存储库在结构上保持灵活性并将其放置在比内部更“自然”的工作位置TEXMFHOME(例如,在主文档目录中的某个开发目录内)。

答案2

我提供了这个未安装的类使用lettre(见信件项目)。

您可以在任何合适的目录中获取项目的版本控制 (git) 工作区,然后将其添加到 TEXMF 根目录中。请参阅lettre手册 §« 1.2 从源安装 »,对于枚举列表的第 3 项,选择第二个项目。

拥有“未安装”包/类的代价是,当工作区已添加到 TEXMF 根列表时,您无法轻松地重新编译手册,因为 latex 无法在当前目录中找到源文件。在这种情况下,我lettre通过 makefile 检测这种情况并在编译手册之前将所有源重新定位到临时目录中来解决这个问题。

相关内容