因为 \str_set:Nn 是不可展的,一般的赋值命令都是不可展的;除了 flag 相关的命令,可自行参见 interface3 用户手册;
所在在 \str_set:Nx 的 x 型展开中 \str_set:Nn 没有被展开,但是 \l_my_str 被展开了,此时这个宏还没有被赋值,所以展开为空。而在 str 相关命令的赋值中,命令的参数中的所有 token 的 catcode 均被设置为12, 包括 { 和 } 所以 {1,2} 就被展开为自身;
备注:
\cs_under_skip_prepro:n命令疑似应为\my_test:n。- 再者,不推荐使用
x型展开,推荐使用e型展开。 - 在 LaTeX 2020-02-02 及其之后的版本中均无需再手动加载
expl3宏包




















问 LaTeX3宏展开与预期不符