В T E X, как можно разбить строку, такую как \mana{X1 2W/UB R /G}
, на части и передать их другому макросу (в этом случае заменить вызов макроса чем-то вроде \m{X}\m{12}\m{W/U}\m{B}\m{R/G}
), группировка по очень простым правилам, а именно: а) последовательные цифры образуют группу, б) косая черта создает группу из двух соседних символов, в) пробелы должны быть полностью удалены?
Я попробовал пакет substr
, но он был не слишком полезен, он позволял только находить определенные подстроки. Рукописные петли, такие как
\def\lcpass#1.{}
\def\lcloop#1#2.{%
\ifempty{#2}%
#1%
\let\continue=\lcpass%
\else%
\let\continue=\lcloop%
\fi%
\continue#2.}
\def\lastchar#1{\lcloop#1.} % returns the last character of a string
не работает, когда строка заканчивается пробелом, и я не был успешным с \futurelet
.
В целом, как можно подойти к задаче разбора строк в T E X? Например, пакет texmate
позволяет писать такие вещи, как |1 e4 e5 Nf3 Nc6|
, и автоматически рисует соответствующие шахматные позиции. Как это сделать? Что я могу прочитать о зацикливании символов в строке и других хахах T E X, подобных этому?