Re: overloading

#69597
Up
0
Down
::

albertobosia” post=68707è possibile gestire l’overloading degli operatori in LaTeX?
l’ideale sarebbe poter fare qualcosa di questo tipo
`\newcommand{\insulto}[2]{#1 è #2}
\newcommand{\insulto}[3]{#1 e #2 sono #3}
\insulto{luca}{scemo} e \insulto{marco}{francesco}{cretini}`
ho provato a giocare sui newcommand ma non riesco a concludere molto…

`\documentclass[a4paper]{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\insulto}{m m}
{
\seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
\seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
\seq_map_inline:Nn \l_tmpa_seq { ##1~ }
\int_compare:nTF { \seq_length:N \l_tmpa_seq > 0 }
{ e~\l_tmpa_tl\c_space_tl sono~}
{\l_tmpa_tl\c_space_tl \`e~}
#2
}
\ExplSyntaxOff
\begin{document}
\insulto{luca}{birichino}

\insulto{marco,francesco}{zoticoni}
\end{document}`
1. Il primo argomento viene spezzato alle virgole e inserito in una sequenza
2. L’ultimo elemento della sequenza viene tolto e inserito in una variable token
3. Si producono uno alla volta gli elementi della sequenza, separati da uno spazio.
4. Se la sequenza ha lunghezza zero (cioè c’era un solo nome), si produce il nome seguito da “è”
5. Se la sequenza ha lunghezza maggiore di zero si produce “e”, l’ultimo nome e, per finire, “sono”.

Ciao
Enrico

Go to top