W T E X, jak można podzielić ciąg znaków, taki jak \mana{X1 2W/UB R /G}
na części i podać je do innego makra (w tym przypadku, aby zastąpić wywołanie makra przez coś podobnego \m{X}\m{12}\m{W/U}\m{B}\m{R/G}
), grupując według bardzo prostych reguł, a mianowicie: a) kolejne cyfry tworzą grupę, b) ukośnik tworzy grupę dwóch pobliskich znaków, c) spacje mają zostać całkowicie usunięte?TeX: parsowanie ciągów i usuwanie białych znaków
Wypróbowałem pakiet substr
, ale nie był zbyt pomocny, pozwalając tylko znaleźć pewne podciągi. pętle ręcznie napisany takie jak
\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
nie działa, gdy kończy się ciąg spacji, ani ja sukces z \futurelet
.
Ogólnie, jak podejść do zadania analizy łańcuchów w T E X? Na przykład pakiet texmate
pozwala pisać takie rzeczy, jak |1 e4 e5 Nf3 Nc6|
i automatycznie rysuje odpowiednie pozycje w szachach. Jak to robi? Co mogę przeczytać o zapętlaniu znaków w ciągu znaków i innych hackach takich jak ten?
Co nie tak z moją odpowiedź? Wygląda na mniejszy. –
Nic nie jest nie tak, ale udało mi się wymyślić to rozwiązanie, zanim zdążyłem spojrzeć na twoje. –