我如何编写一个(La)TeX命令来替换所有[with {和all] with},假设每个[都有匹配],并且[和]之间的任何括号都是平衡的?它需要能够处理嵌套括号。
例如,我希望能够编写命令\mynewcommand
,以便\mynewcommand{{[[{1}{2}][{3}{4}]]}}
与\mycommand{{{{{1}{2}}{{3}{4}}}}}
相同。
答案 0 :(得分:2)
可能最简单的方法是使用e-TeX和\ scantokens
\newcommand*\mycommand[1]{%
\begingroup
\everyeof{\noexpand}%
\endlinechar=-1\relax
\catcode`\[=1\relax
\catcode`\]=2\relax
\edef\temp{\scantokens{#1}}%
\expandafter\endgroup
\expandafter\def\expandafter\temp\expandafter{\temp}%
}
这将使用#1中的材料定义\ temp,但每个“[”...“]”对变成TeX大括号组(“{”...“}”)。然后,您可以使用\ temp来执行任何操作。正如我所说,这需要e-TeX,它可以在所有现代TeX系统中使用。