我知道下面这些不是你通常应该做的事情,但我还是要问:我对 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}