我该如何优雅地停用一个包裹?

我该如何优雅地停用一个包裹?

我维护一个已经过时的 LaTeX 包。它的所有有用命令都由其他包提供,可能语法不同,但关键是没有人再使用我的包了。任何想要它功能的人都应该使用其他可以替代它的包。

我应该使用哪些最佳实践来“淘汰”我的包裹?换句话说,是为了阻止人们使用它而转向其他可以替代它的软件包吗?

举一个极端的例子,我可以做的一件事就是将我的包的新版本上传到 CTAN,其中所有内容都被删除并替换为

\PackageError{mypackage}{mypackage is obsolete!}{%
  See the documentation for what you should be using instead}

或者类似的东西。这或多或少力量人们停止使用我的套餐。但根据这个答案希望旧的 LaTeX 文档仍能正确编译,但这种极端的解决方案破坏了这一点。也许使用 a 进行弃用\PackageWarning会更好?或者完全是其他方法?(CTAN 是否对弃用包有任何特殊支持?)

但再次强调,这只是一个例子。我要求任何当需要将包标记为过时时,这些最佳实践被经验丰富的包作者所认可,或者在过去已经成功使用过。

答案1

我不认为存在单一的最佳实践 --- 这在一定程度上取决于您的包以何种方式变得过时。

LaTeX 的一个重要目标是继续保持向后兼容性,即,即使在很长一段时间后也能够成功地重新处理旧文档,事实上,大多数时候这都能运行得出奇的好(例如,即使是 LaTeX 2.09 文档通常也可以立即编译,尽管它们会给你一个粗体警告)。

为了实现这一点,旧的/过时的软件包需要仍然存在并以某种形式提供。

现在,它们如何可用取决于“过时”的性质:如果您的软件包增强了其他软件包的某些功能,而现在又将其合并到其他软件包中(可能界面略有不同),那么最好的方法可能是使用当前软件包模拟您的软件包。例如,在图形领域,最初存在许多软件包(epsfig、rotating 等),我认为它们都是如此,但rotating例如,如今仅保留了其界面(选项),然后在内部将所有内容传递给软件包graphics来完成工作。

但是,如果您的包(或类)跨越了许多其他包,并且到处提供功能扩展,则这种方法可能不可行,因为引入细微问题的危险可能大于其收益。在这种情况下,我的建议是仅生成(粗体)警告,解释如何替换它,然后让它自行运行。

关于是否应该用粗体警告停止处理(这样用户就需要按回车键才能继续),或者它应该只是一个闪现的屏幕警告,存在争议。就我个人而言,我认为对于真正需要清除并且最好替换的材料,停止处理比仅仅发出警告要好(因为大多数人不会看到警告,即使他们看到也不会在意它是否只是一个警告)。但正如我所说,这个问题正在引起激烈的争论。最近我想在inputenc输入严重错误的情况下引入一个错误(这可能会导致错误的输出而没有任何信息给用户),但许多人反对,因为在输入技术上错误但输出不受影响的少数情况下也会停止处理……所以总结起来,最佳实践可以看作是“确保用户对现有文档的支持不会受到你的方法的(严重)影响”。

答案2

对所有依赖您的软件包的用户来说,将其功能替换为错误消息是非常不礼貌的。我无法理解为什么有人会考虑采取这种鲁莽的做法。几年前,Linux Libertine 的维护者停止了对 pdftex 的支持,而我发现自己在工作中途,迫于最后期限,拼命地想要让备份运行起来——在浪费了宝贵的时间去调查之后,为什么我的文件突然无法编译!

您所要求的并不是“退役”您的软件包,而是您不想再维护它。

亲爱的软件包作者,非常感谢您多年来对软件包的维护。剩下要做的就是在手册中将其标记为“未维护”,并对 CTAN 进行最后一次更新。

相关内容