egreg9″ post=68725
è 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
Sembra divertente lavorare con LaTeX3. Speriamo di avere il tempo per approfondire questo nuovo stiule di programmazione TeX.
A questo proposito ti chiedo Enrico, se è necessario lavorare molto per apprenderlo e se hai in mente qualche tipo di guida…
Un saluto.
R.