Re: LaTeX3 determinazione primo token (che è espandibile)

#74559
Up
0
Down
::

franen” post=73685Ciao. Io vorrei trovare un modo per determinare se una token list comincia con un determinato token, che malaugaratamente è espandibile (e si espande in modi diversi in funzione di altre opzioni). Riporto un esempio minimo compilabile ma scorretto.

`% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\ExplSyntaxOn
\newcommand{\first}{definizione-di-first}
\tl_new:N \prova_tl
\tl_set:Nn \prova_tl {\first Ciao a tutti}
\NewDocumentCommand{\prova}{}{\tl_head:N \prova_tl}
\ExplSyntaxOff
\begin{document}
Primo token della token list:
\prova
\end{document}`
Io vorrei che il comando \prova mi dicesse che il primo token della tl è “\first” e non la sua espansione. Ho provato un sacco di modi (con \exp_not:n, tl_to_str, str_head:n, tl_item:nn, if_meaning), ma nulla che funzionasse. Mi basterebbe anche che restituisse solo “\”, anche se preferirei l’intero token o una condizione VERO-FALSO.
Consigli?

Francesco

Be’, è ovvio: quando scrivi [tt]\prova[/tt] TeX fa diligentemente tutte le sue espansioni, compresa quella di [tt]\first[/tt].
`\usepackage{xparse}
\newcommand{\first}{definizione di first}
\ExplSyntaxOn
\tl_set:Nn \l_prova_tl {\first Ciao a tutti}
\NewDocumentCommand{\prova}{}
{
\tl_to_str:x { \tl_head:N \l_prova_tl }
}
\cs_generate_variant:Nn \tl_to_str:n {x}
\ExplSyntaxOff`
Hai bisogno di espandere completamente [tt]\tl_head:N \l_prova_tl[/tt] (ma l’espansione si ferma a [tt]\first[/tt], come spiegato nella documentazione) e trasformare il risultato in una stringa. Basta generare la variante di [tt]\tl_to_str:n[/tt]

I nomi delle variabili devono cominciare con il prefisso [tt]l_[/tt] o [tt]g_[/tt] per indicare se i valori vanno assegnati localmente o globalmente.

Ciao
Enrico

Go to top