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