Re: funzioni con un numero variabile di parametri [Risolto]

#26566
Up
0
Down
::

hai ragione scusate
il \for non sono riuscito a usarlo … ma potrebbe essere perchè non ho mai usato i comandi tex 😆 in particolare,facendo come scrivi sopra io riesco a usare solo un argomento per volta, e non due, quindi non riesco a disegnare linee (o fare qls altra cosa che richieda 2 argomenti)

con il latex invece ce l’ho fatta ma in maniera un po’ contorta:

`
\usepackage{ifthen}

\newcounter{multicounter}

\newcommand{\multilinea}[3] {
\setcounter{multicounter}{#1}
\multilineainnerproc{#2}{#3}
}

\newcommand{\multilineainnerproc}[2] {
LINEA (#1,#2)\\
\addtocounter{multicounter}{-1}
\ifthenelse{\value{multicounter}>1}
{\multilineainnerproc{#2}} %notare: richiamo con 1 argomento solo…
{}
}
`

da richiamare con: \multilinea{num-punti}{p1}…{pn} (e ci devono essere almeno 2 punti…)
Sarebbe bello generare un warning se num-punti è < 2, ma non sono capace. Magari apro un'altro topic sull'argomento. P.S. forse segreto militare no.. ma cmq mi sento molto orgoglioso di questo pezzetto di codice ;)

Con la sintassi che vuoi è impossibile, LaTeX non saprebbe identificare l’ultimo argomento. Con quella che ti ho proposto sì:
`\makeatletter
\def\multilinea#1{%
\let\ml@end\@empty
\@for\next:=#1\do
{\ifx\ml@end\@empty
\edef\ml@end{\next}%
\else
\edef\ml@start{\ml@end}%
\edef\ml@end{\next}%
\message{\ml@start–\ml@end}%
\fi}}
\makeatother`
La riga con \message è quella che dovrai modificare per i tuoi scopi: il punto iniziale è disponibile con \ml@start, quello finale con \ml@end. Ho messo questa per mostrarti che il comando identifica correttamente i parametri: \multilinea{a,b,c,d} produce i messaggi “a–b”, “b–c” e “c–d”.

Si può anche studiare di inserire il messaggio di errore, ma meglio prima lavorare sui casi interessanti e lasciare alla fine di dettagli.

Ciao
Enrico

Go to top