OldClaudio” post=79577Se volessi avere \vocale con argomenti, dovrei poi passagli \let@token che comunque dovrebbe essere già in memoria, ecco perché ho definito \vocale senza argomenti.
Per altro \vocale senza argomenti funzionerebbe benissimo in LaTeX2e se lo definissi con un ciclo tfor del nucleo di LaTeX2e; bisognerebbe solo espandere la macro che LaTeX usa per scandire la lista di vocali, ma basta un solo expandafter per risolvere il problemino.
È esattamente quello che fa [tt]\tl_map_inline:nn[/tt] che è proprio un analogo di [tt]\@tfor[/tt], mentre [tt]\token_if_eq_charcode:NNTF[/tt] è l’equivalente di [tt]\if[/tt].
Se lo scopo è il famoso problema di scrivere in nero le vocali in una parola, si può fare così:
`\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\segnavocali}{m}
{
\egreg_segna_vocali:n { #1 }
}
\tl_const:Nn \c_egreg_vocali_tl {AEIOUaeiou}
\cs_new_protected:Npn \egreg_segna_vocali:n #1
{
\tl_map_inline:nn { #1 }
{
\tl_if_in:NnTF \c_egreg_vocali_tl { ##1 }
{ \textbf{ ##1 } }
{ ##1 }
}
}
\ExplSyntaxOff
\begin{document}
\segnavocali{Ciao}
\end{document}`
ma questo non funzionerebbe con gli spazi. C’è un modo che evita tutti i problemi: le espressioni regolari. 🙂
`\documentclass{article}
\usepackage{xparse,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\segnavocali}{m}
{
\egreg_segna_vocali:n { #1 }
}
\tl_new:N \l_egreg_temp_tl
\cs_new_protected:Npn \egreg_segna_vocali:n #1
{
\tl_set:Nn \l_egreg_temp_tl { #1 }
\regex_replace_all:nnN { ([AEIOUaeiou]) } { \c{textbf} \cB\{ \1 \cE\} } \l_egreg_temp_tl
\tl_use:N \l_egreg_temp_tl
}
\ExplSyntaxOff
\begin{document}
\segnavocali{Ciao mondo}
\end{document}`
Ciao
Enrico