Замените сбалансированные скобки на сбалансированные скобки в LaTeX

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

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


person Jason Gross    schedule 26.06.2010    source источник
comment
Вы хотите, чтобы квадратные скобки были заменены на фигурные как группирующие символы или как символы, которые будут набраны?   -  person Antal Spector-Zabusky    schedule 27.06.2010
comment
Я хочу, чтобы они заменили их фигурными скобками, которые допустимы для группировки и передачи аргументов (т. Е. Недостаточно, чтобы они действовали как \bgroup и \egroup).   -  person Jason Gross    schedule 28.06.2010


Ответы (1)


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

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

person Joseph Wright    schedule 27.06.2010