如何使括号像组分隔符一样工作?

如何使括号像组分隔符一样工作?

我知道下面这些不是你通常应该做的事情,但我还是要问:我对 TeX 不将括号的内容[...]视为组(如)感到{...}厌倦。这在编写包含大量嵌套 keyval 接口的数学运算时很烦人,因为像

\command[key=\othercommand[otherkey=7]]

死得很惨。换句话说,你必须用括号把密钥包起来:

\command[key={ \othercommand[otherkey=7] }]

我想知道:是这样的,还是原则上你可以让它[...]像组分隔符一样工作(比如{...}),并且仍然使可选参数像在xparse工作?我很清楚像这样的东西$[a,b)$不会起作用,必须用替换$\lbracket a,b)$,但我对此没意见。

我尝试了类似下面的操作,但显然失败了:

\documentclass{article}

\usepackage{xparse}

\let\oldopenbracket=[

\let\oldclosebracket=]

\def\MakeBracketsStrict{
    \catcode`[=13
    \catcode`]=13
    
    \def[{\oldopenbracket\noexpand\bgroup}
    
    \def]{\oldclosebracket\noexpand\egroup}
}

\def\MakeBracketsNormal{
    \catcode`[=12
    \catcode`]=12
}

\begin{document}

\DeclareDocumentCommand\test{ mo }{we test #1 and #2}

\MakeBracketsStrict

\test{foo}[bar]

\MakeBracketsNormal

\test{foo}[bar]

\end{document}

相关内容