latex3:包含 amsmath 时出错

latex3:包含 amsmath 时出错

以下代码仍可正确呈现,但在包含 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

相关内容