Re: Nuovo comando con argomenti opzionali

#91700
Up
0
Down
::


Ecco una soluzione con l3keys

`\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\keys_define:nn { marcolxxxvii/qualcosa }
{
primo .tl_set:N = \l_marcolxxxvii_primo_tl,
primo .initial:n = PRIMO,
secondo .tl_set:N = \l_marcolxxxvii_secondo_tl,
secondo .initial:n = SECONDO,
}

\NewDocumentCommand{\nuovoComando}{ O{} m }
{
\group_begin:
\marcolxxxvii_nuovocomando_keys:nn { #1 } { #2 }
\group_end:
}
\NewDocumentCommand{\nuovoComandoOpt{ O{PRIMO} O{SECONDO} m }
{
\marcolxxxvii_nuovocomando:nnn { #1 } { #2 } { #3 }
}

\cs_new_protected:Npn \marcolxxxvii_nuovocomando_keys:nn #1 #2
{
\keys_set:nn { marcolxxxvii/qualcosa } { #1 }
\marcolxxxvii_nuovocomando:VVn \l_marcolxxxvii_primo_tl \l_marcolxxxvii_secondo_tl { #2 }
}
\cs_new_protected:Npn \marcolxxxvii_nuovocomando:nnn #1 #2 #3
{% gli spazi sono ignorati, per avere uno spazio si usa ~
#1 ~ – ~ #2 ~ – ~ #3
}
\cs_generate_variant:Nn \marcolxxxvii_nuovocomando:nnn { VV }

\ExplSyntaxOff

\begin{document}
\nuovoComando{terzo}

\nuovoComando[primo=primo]{terzo}

\nuovoComando{terzo} % funziona perché primo è locale quindi la precedente definizione non viene propagata

\nuovoComando[secondo=secondo]{terzo}

\nuovoComando[primo=primo, secondo=secondo]{terzo}

\nuovoComando[secondo=secondo, primo=primo]{terzo}

\end{document}`

Ho lasciato anche la versione con gli argomenti facoltativi, per mostrare come si possono avere anche interfacce diverse dallo stesso comando interno.

Ciao
Enrico

Go to top