Re: expl3 e i caratteri impliciti

#80370
Up
0
Down
::

OldClaudio” post=79568Sto cercando di fare i miei primi esercizi con expl3; ovviamente sono in difficoltà sia cercando di capire il linguaggio esoterico contenuto in interface3.pdf, sia leggendo l’interessante articolo di Enrico su ArsTeXnica, sia anche leggendo la documentazione di xparse.

Sembrerebbe che io sia riuscito a capire xparse, tanto che sono riuscito a definire una funzione senza argomenti con \NewDocumentCoomand. Fin qui va bene. poi ho cercato di trovare l’istanza di un elemento in una clist usando \clist_if_in:nnTF. Tutto semnra funzionare se l’elemento da cercare, indicato nel secondo argomento della funzione, è un carattere esplicito. La funzione dà semrpe il risultato falso se il secondo argomento è rappresentato da un carattere implicito. Faccio un esempio:
`\ExplSyntaxOn

\NewDocumentCommand{\vocale} { }
{ \clist_if_in:nnTF { a,e,i,o,u,A,E,I,O,U } { \let@token } { vero } { falso } }

\ExplSyntaxOff`
Il [tt]\let@token[/tt] viene creato con una macro vecchio stile chiamata in precedenza attraverso l’uso di un \futurelet.

Siccome questa macro mi rende sempre il valore “falso” qualunque sia il \let@token (vocale, consonante, numero, segno di iterpunzione, spazio, eccetera, è evidente che commento un errore, ma non saprei dire se sia colpa del carattere implicito se non valga la lena di espandere il carattere impliti in una macro, nel senso che \clist potrebbe occuparsi della macro, se \token_to_meaning:N possa essere d’aiuto, se l’output di questa finzione bebba venire sottoposto a un po’ di maquillage prima di poterlo usare, se sono completamente fuori strada.

L’importante è che io risca a trovare in una lista con elementi separati da virgole, ma anche eventualmente in una token list l’essitenza di qualcosa che io coosco solamante come token implicito.

Mischiare il vecchio stile con il nuovo è sconsigliabile. Ma, evidentemente, [tt]\let@token[/tt] non compare nella lista: il paragone è fatto con liste di token “esplicite”. Potresti voler vedere se “pippo” compare in una clist, per esempio.

Non userei, in ogni caso una clist per quel tipo di lavoro: una token list è certamente meglio. Ma se vuoi confrontare caratteri impliciti, devi farlo con [tt]\token_if_eq_charcode:NNTF[/tt]
`RequirePackage{expl3}
\makeatletter
\let\let@token=a
\ExplSyntaxOn
\tl_map_inline:nn {aeiouAEIOU}
{
\token_if_eq_charcode:NNT #1 \let@token { \tl_map_break:n { \msg_term:n {Vero} } }
\msg_term:n { Falso }
}
\ExplSyntaxOff`
Questo risponderà [tt]Vero[/tt].

Qual è lo scopo finale? Non vedo come [tt]\vocale[/tt] senza argomenti ti possa aiutare.

Ciao
Enrico

Go to top