是否有一种标准方法来管理 LaTeX 文档使用的软件包(.sty 等)版本?我的公司对可重复性很感兴趣 - 比如说 10 年后他们希望能够从今天获取 .tex 文件,并将其编译为与今天完全相同的 PDF。
我看到过这样一个回答:需要某个软件包的某个版本(或更高版本)吗?,但这只是部分原因。理想情况下,应该有类似 Python 的 PIP 的东西,其中包含一个 requirements.txt,指定所有包的可接受版本。如果版本不存在,包管理器要么尝试纠正这种情况,要么构建过程会终止并显示相应的警告。
目前,计划使用 TeXLive 作为标准发行版,因此随之附带的任何工具也可以 - 不幸的是,我更熟悉 MiKTeX,因此如果已经有内置功能,请原谅。
答案1
这是我的做法:如果您认真对待此事,那么每次最终编译时都可以保存整个 LaTex 发行版(包括二进制文件)以及您自己的代码。事实上,我就是这么做的,而且问题并不像您想象的那么严重。
您可以使用版本控制系统,但我使用 7zip,它允许对所有修改过(甚至删除)的文件进行差异备份。您可以为任何最终编译恢复文件的确切状态(如果您愿意,包括 Tex 二进制文件的确切状态)。
您将需要 7Zip 的命令行版本。我使用的是 Windows,所以我的命令行反映了这一点。首先,您必须创建一个主备份:
"C:\Pathto7Zip\App\7-Zip\7z.exe" a "X:\mybasefile.7z" "X:\Pathofstufftosave"
我分别针对我的 TexLive 发行版和我自己的代码维护区域执行此操作
然后在每次最终编译时,运行编译的批处理文件也会运行差异备份:
"C:\Pathto7Zip\App\7-Zip\7z.exe" u X:\mybasefile.7z "X:\Pathofstufftosave" -ms=off -mx=9 -t7z -u- -up0q3r2x2y2z0w2!%difffile%
其中 %difffile% 表示如何命名差异备份。
碰巧我用日期和确切时间来命名它——在批处理文件中很容易生成它。
可以从基本文件和(非常小的)差异备份中创建整个设置在任何时间点的准确状态。每六个月左右(通常与新的 TexLive 发行版一致)我会存档基本文件和所有差异文件,然后重新开始使用新的基本文件。
很高兴能帮助任何想要设置这种方案的人(在 Windows 中)