保存用 \NewDocumentEnvironment 声明的环境以重新定义它

保存用 \NewDocumentEnvironment 声明的环境以重新定义它

我使用 声明了一些环境\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 方法来做到这一点。

相关内容