2010-06-26 4 views
0

Как написать команду (La) TeX, которая заменяет все [с {и все] на}, считая, что каждый [имеет соответствие], и что любые фигурные скобки между [и ] сбалансированы? Он должен иметь возможность иметь дело с вложенными скобками.Замените сбалансированные кронштейны сбалансированными брекетами в LaTeX

Например, я хочу, чтобы иметь возможность написать команду \mynewcommand, так что \mynewcommand{{[[{1}{2}][{3}{4}]]}} - это то же самое, что и \mycommand{{{{{1}{2}}{{3}{4}}}}}.

+0

Вы хотите заменить скобки на фигурные скобки как * группировку * символов или символов, которые будут набираться? –

+0

Я хочу, чтобы он заменил их на фигурные скобки, которые действительны для группировки и передачи аргументов (т. Е. Недостаточно, чтобы они действовали как \ bgroup и \ egroup). –

ответ

2

Вероятно, самый простой способ заключается в использовании электронной 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}% 
} 

Это будет определять \ Temp с материалом в # 1, но с каждым «[» ... «]» пара превратилась в группу элементов TeX ("{" ... "}"). Затем вы можете использовать \ temp, чтобы делать все, что хотите. Как я уже сказал, для этого требуется e-TeX, который доступен во всех современных системах TeX.