有没有办法从宏的参数中删除特定字符?

有没有办法从宏的参数中删除特定字符?

假设我们有一句宏语句,

\NewDocumentCommand\foo{m}{#1}

当它吃掉一个参数时,我希望它打印出参数中的所有内容没有特定字符。

  1. 例如,我想删除参数中的所有反斜杠。所以
\foo{\mathbb{A}}

应该给我mathbb{A}而不是黑板上的粗体$\mathbb{A}$。

  1. 另一种情况:我想删除参数中的所有括号。所以
\foo{(maybe) correct}

应该给我简单的maybe correct而不是(maybe) correct

有什么想法可以实现它吗?

更新:以下至少对 2 有效。

\NewDocumentCommand{\foo}{m}{%
    \str_set:Nn \l_tmpa_str {#1}%
    \str_remove_all:Nn \l_tmpa_str {(}%
    \str_remove_all:Nn \l_tmpa_str {)}%
    \str_use:N \l_tmpa_str%
}

附言我的意思是,上面的方法适用于情况 2 中的示例。但是,正如评论指出的那样,它不适用于宏。我期望有一个完整的解决方案来处理这两种情况:即:

  1. 它可以识别宏并删除它的反斜杠或保留它(应该有一个选项)
  2. 它从参数中删除某些字符,例如括号。

示例 3:

$\foo[no macro,no parenthese]{(\mathbb{A})-correct}$

给出 $mathbb{A}-correct$

示例 4:

$\foo[no parenthese]{(\mathbb{A})-correct}$

给出 $\mathbb{A}-correct$

具体用法:Phelype Oleinik 询问具体用法,这里是其中一种:我想自动生成索引条目,因此说,

\myindex{(commutative) $\mathbb{R}$-ring}

应该扩展为(使用宏)

(commutative) $\mathbb{R}$-ring\index{commutative $\mathbb{R}$-ring}

或(不使用宏)

(commutative) $\mathbb{R}$-ring\index{commutative mathbb{R}-ring}

在这个阶段,我意识到另一个输出也是有意义的:

(commutative) $\mathbb{R}$-ring\index{commutative R-ring}

因此,请留下您的想法。

另一个更新:我认为这个问题的棘手部分是如何处理反斜杠和括号等特殊标记。另一个类似 \c_backslash_str 的东西,但它们不在正确的 catcode 中,而且扩展的顺序很复杂。

相关内容