以下代码仍可正确呈现,但在包含 amsmath 时会引发错误(“Missing } inserting”):
\cs_new:Npn \putInEnvironment:nnn #1 #2 #3
{
\if_bool:N #2
\tl_put_left:Nn #1 {#3\c_group_begin_token}
\tl_put_right:Nn #1 {\c_group_end_token}
\fi:
}
例如用于
\putInEnvironment:nnn {\l_my_symbol_tl}{\l_my_corrected_bool}{\hat}
\putInEnvironment:nnn {\l_my_symbol_tl}{\l_my_dot_bool}{\dot}
作为更大宏的一部分。其他环境(例如 \underline)仍然有效。有人能向我解释如何修复这个问题吗?谢谢!
编辑:感谢您的快速回复,澄清一下:
- 目的是使用大量可能的修改(通过键值)来构建一个符号,这会导致相当多的 \cmd{< symbol >} 嵌套
- 我的误解是,我认为 \cmd{< symbol >} == \cmd\group_begin< symbol >\group_end,这就是函数所做的,嵌套,我错误地称之为环境
- 有趣的是,即使没有包括 amsmath,我的函数也能达到我的预期
答案1
\cs_new_protected:Npn \behe_putInEnvironment:NNN #1 #2 #3
{
\bool_if:NT #2
{
\tl_set:Nx #1 { \exp_not:N #3 { \exp_not:V #1 } }
}
}
\behe_putInEnvironment:NNN \l_my_symbol_tl \l_my_corrected_bool \hat
\behe_putInEnvironment:NNN \l_my_symbol_tl \l_my_dot_bool \dot
尽管如 david 和 egreg 所说,您的意图尚不清楚。其他事项:
\putInEnvironment:nnn
很奇怪,周围都是\behe_put_in_environment:
;加上\hat
并且\underline
不是“环境”;另外:nnn
应该是:NNN
,因为三个参数都是单个标记;加上- 我使用
_protected
,因为该命令不可扩展;加上 - 我用了
\bool_if:NT
而不是更简单\if_bool:N
。