我使用 声明了一些环境\NewDocumentEnvironment
,让我们称之为oldenv
我想在另一个包中重新定义它,以便对其进行一些调整。但是,在重新定义中,我想利用环境的旧定义。使用通常的策略,你会说类似
\cs_new_eq:NN \oldenv \__package_save_oldenv:w
\cs_new_eq:NN \endoldenv \__package_save_endoldenv:w
...
\RenewDocumentEnvironment { oldenv } { ... }
{
% Use \__package_save_oldenv:w here to refer to the old definiton
}
{
...
}
运行正常。但是,oldenv
环境已用 声明\NewDocumentEnvironment
,因此\oldenv
扩展为
\oldenv=\protected
macro:->\__xparse_start_env:nnnnn { o }{oldenv}{\__xparse_grab_D:w []}{}{}.
因此,仅仅进行简单的复制是不够的,因为环境的实际含义似乎存储在xparse
包内部的某个地方。
我也考虑过使用钩子管理系统在的开始或结束时做一些事情oldenv
,但是因为我也想改变的签名oldenv
,所以这也不是一个选择。
是否有某种预期的方法可以对这样的环境进行“深度”复制,随后重新定义它,同时安全地访问环境的旧变体?
如果答案是简单的“否”,我也可以接受,因为这需要侵入 的内部xparse
,而我在本例中不想这样做。例如,在本例中,简单地复制旧定义对我来说就足够了,但这当然不是解决此类问题的通用且优雅的解决方案。
此外,我很乐意使用 LaTeX3 方法来做到这一点。