![有什么推荐的方法可以保护 TeX Live 文件免受无变化更新的影响,或者在更新时自动修补它?](https://linux22.com/image/361033/%E6%9C%89%E4%BB%80%E4%B9%88%E6%8E%A8%E8%8D%90%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E4%BF%9D%E6%8A%A4%20TeX%20Live%20%E6%96%87%E4%BB%B6%E5%85%8D%E5%8F%97%E6%97%A0%E5%8F%98%E5%8C%96%E6%9B%B4%E6%96%B0%E7%9A%84%E5%BD%B1%E5%93%8D%EF%BC%8C%E6%88%96%E8%80%85%E5%9C%A8%E6%9B%B4%E6%96%B0%E6%97%B6%E8%87%AA%E5%8A%A8%E4%BF%AE%E8%A1%A5%E5%AE%83%EF%BC%9F.png)
许多软件包管理器允许用户阻止某些软件包被更新。这通常称为“固定”。固定的软件包受到保护,不会自动更新。例如,如果软件包中的错误在特定系统上存在问题,并且在本地进行修改或降级直到上游修复,这很有用。由于软件包可能在修复之前获得其他更新,因此阻止更新可以保护固定的版本,直到有包含相关修复的较新版本可用。
tlmgr
支持“固定”功能,但它将包固定到存储库,而不是保护其免受更新本身。
就目前情况而言,texdef.pl
需要修补才能与当前的 perl 配合使用。没有任何证据表明这个问题可能在可预见的未来得到修复。因此,我无限期地需要一个修补版本。
[详细信息和补丁:尝试使用 texdef 时,如何避免此正则表达式错误?]
但是,每次我更新 TeX Live 时,我的修补版本都会被原始版本覆盖,即使原始版本没有任何变化。也就是说,并不是分发的版本已更新,而是遗憾的是没有包含我需要的修复。它根本没有改变。但tlmgr
坚持用 TeX Live 的损坏版本替换我的工作版本,即使该版本有错误且较旧。
对此我可以做很多事情。例如,我可以更改权限,使其需要 root 权限才能覆盖修补后的版本。这可以工作,但我怀疑它会导致tlmgr
退出并对其世界状态发出四个字母的抱怨。
如果文件是.sty
或类似文件,我可以在 TEXMFLOCAL 或 TEXMFHOME 中安装修补版本。不幸的是,它是一个脚本,符号链接自二进制目录,因此kpsewhich
无法用于访问它,我无法通过这种方式解决它。
我可以使用各种其他技巧,包括 shell 别名等,但这相当复杂且相对脆弱。此外,随着更多用户获得当前版本的 perl,遇到此问题的用户数量将会增加。因此,如果有更“官方”和更强大的解决方案就好了。
是否可以使用“固定”包或文件,tlmgr
以便在更新时不会被覆盖?理想情况下,它会在控制台上打印一条提醒,提醒它已被跳过,但这只是锦上添花,我在这里最关心的是蛋糕。
如果不是,最好的解决方法是什么?当这个该死的文件与我上次更新时修复的错误版本完全相同时,不得不不断修补这个该死的文件真是令人恼火……还有上次……还有上次……
我想我可以为它创建一个本地的单包存储库。但是,这似乎是一种非常尴尬的方式来实现一个肯定非常简单的目标。
答案1
正如所提到的nobert 的评论,现在可以通过将包添加到逗号分隔的列表中来“固定”包
update-exclude = \
<package1-name>,\
<package2-name>,\
... etc.
到texmf.cnf
。