是否有 (在 LaTeX 3 中) 的版本\DeclareDocumentCommand
执行效果类似\edef
?即在定义时而不是调用宏时对参数进行求值?
例如
\ExplSyntaxOn
\fp_zero_new:N {\fpX}
\fp_set:Nn {\fpX} {6}
\DeclareDocumentCommand { \dX } {} {\fp_to_decimal:N{\fpX}}
\fp_set:Nn{\fpX} {12}
\dX
\ExplSyntaxOff
印刷品 12
\ExplSyntaxOn
\fp_zero_new:N {\fpX}
\fp_set:Nn {\fpX} {6}
\edef\dX{\fp_to_decimal:N{\fpX}}
\fp_set:Nn{\fpX} {12}
\dX
\ExplSyntaxOff
印刷品 6
我想将 \dX 扩展为 6
答案1
用于创建新文档的命令系列xparse
实际上并非用于此类用途。这可以从您的示例中看出,其中\DeclareDocumentCommand
混杂了expl3
代码。
简短的回答是,expl3
的版本\edef
是\cs_set:Npx
或\tl_set:Nx
取决于您是否创建带参数的宏或仅仅是一个标记列表。
在您的示例中,不要写
\edef\dX{\fp_to_decimal:N{\fpX}}
你应该使用
\tl_set:Nx \dX { \fp_to_decimal:N { \fpX } }