![有没有办法从宏的参数中删除特定字符?](https://linux22.com/image/464822/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E4%BB%8E%E5%AE%8F%E7%9A%84%E5%8F%82%E6%95%B0%E4%B8%AD%E5%88%A0%E9%99%A4%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
假设我们有一句宏语句,
\NewDocumentCommand\foo{m}{#1}
当它吃掉一个参数时,我希望它打印出参数中的所有内容没有特定字符。
- 例如,我想删除参数中的所有反斜杠。所以
\foo{\mathbb{A}}
应该给我mathbb{A}
而不是黑板上的粗体$\mathbb{A}$。
- 另一种情况:我想删除参数中的所有括号。所以
\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 中的示例。但是,正如评论指出的那样,它不适用于宏。我期望有一个完整的解决方案来处理这两种情况:即:
- 它可以识别宏并删除它的反斜杠或保留它(应该有一个选项)
- 它从参数中删除某些字符,例如括号。
示例 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 中,而且扩展的顺序很复杂。