这个问题实际上应该问实现特定于版本的软件包依赖关系的最佳方法是什么。但是,如果我尝试问这个问题,系统会威胁关闭我的问题。
在这个答案中,Martin Scharrer 通过重新定义 解释了如何根据其版本加载包\ProvidesPackage
。但是,这个问题已经很老了,所以,由于解决方案并不完全理想,我希望值得一问,目前是否还有更好的选择。
我理想情况下希望我的包能够做到这一点:
- 测试是否
otherpackage
早于版本X。 - 如果
otherpackage
早于版本 X,则发出错误而不是继续。 - 如果
otherpackage
比版本 X 更新,则发出警告并继续。 - 如果
otherpackage
是版本 X,则继续。
显然,发出错误和警告以及停止等操作都没有问题。问题在于根据 的版本有条件地执行这些操作otherpackage
。
一个最小工作非示例是
\ProvidesPackage{mypackage}[v0.1]
\RequirePackage{otherpackage}[2015/11/01]
\endinput
otherpackage
显然,它根本没有进行任何测试,只是如果的版本早于 ,它会发出警告2015/11/01
。也就是说,在这种情况下它仍会继续,如果 的otherpackage
版本晚于 ,它什么也不会说2015/11/01
。
答案1
\RequirePackage{longtable}
\makeatletter
\@ifpackagelater{longtable}{2013/10/28}
{\PackageWarning{mypkg}{Longtable newer or = to 2013/10/28}}
{\PackageWarning{mypkg}{Longtable is older than 2013/10/28}}
\@ifpackagelater{longtable}{2014/10/28}
{\PackageWarning{mypkg}{Longtable newer or = to 2014/10/28}}
{\PackageWarning{mypkg}{Longtable is older than 2014/10/28}}
\@ifpackagelater{longtable}{2015/10/28}
{\PackageWarning{mypkg}{Longtable newer or = to 2015/10/28}}
{\PackageWarning{mypkg}{Longtable is older than 2015/10/28}}
\stop
生产
Package mypkg Warning: Longtable newer or = to 2013/10/28 on input line 6.
Package mypkg Warning: Longtable newer or = to 2014/10/28 on input line 10.
Package mypkg Warning: Longtable is older than 2015/10/28 on input line 15.