::
Ciao Enrico,
grazie davvero! Ho provato il codice che mi hai fornito e, anche se sicuramente si può migliorare come dici tu, direi che fà già molto 😀 …
Ti permetto di usare il codice seguente solo se prometti di non scrivere più “fa” con l’accento. 🙂
`\documentclass[a4paper]{article}
\makeatletter
\newcommand{\der}[2]{\begingroup
\@tempswafalse\toks@={}\count@=\z@
\@for\next:=#2\do
{\expandafter\check@var\next
\advance\count@\der@exp
\if@tempswa
\toks@=\expandafter{\the\toks@\,}%
\else
\@tempswatrue
\fi
\toks@=\expandafter{\the\expandafter\toks@\expandafter\partial\der@var}}%
\frac{\partial\ifnum\count@=\@ne\else^{\number\count@}\fi#1}{\the\toks@}%
\endgroup}
\def\check@var{\@ifstar{\mult@var}{\one@var}}
\def\mult@var#1#2{\def\der@var{#2^{#1}}\def\der@exp{#1}}
\def\one@var#1{\def\der@var{#1}\chardef\der@exp\@ne}
\makeatother
\begin{document}
\[
\der{f}{x}\qquad \der{f}{*{2}{x},y}\qquad \der{f}{*{3}{x},y,*{4}{z}}
\]
\end{document}`
La derivazione consecutiva più volte rispetto a una variabile si indica con “*{numero}{variabile}”; se il numero è di una sola cifra si può anche omettere la coppia di graffe e così se la variabile ha il nome di una sola lettera; quindi “*3x” va bene quanto “*{3}{x}” ed è forse più facile da scrivere.
Spiegazione TeXnica.
(1) Apro un gruppo nel quale azzero il registro token \toks@ e il contatore \count@; inoltre pongo a falso il condizionale temporaneo.
(2) Eseguo un ciclo sulla lista data come secondo argomento. Ogni passo del ciclo consiste di vari passaggi, il primo dei quali è guardare l’elemento della lista per separarlo nelle sue componenti se è del tipo *{numero}{variabile}.
(3) Siccome l’elemento della lista che stiamo esaminando è l’espansione di \next, lo espando dandolo in pasto a \check@var; questo comando essenzialmente guarda se il token che segue è *.
(3.1) Se lo è esegue \mult@var che definisce \der@var come “variabile^{numero}” e definisce \der@exp come l’esponente voluto.
(3.2) Se il token che segue non è * siamo nel caso di “derivata semplice” e quindi definiamo \der@var come “variabile” e poniamo in \der@exp il numero 1.
(4) Il valore finale del contatore \count@ ci serve per scrivere l’esponente al numeratore, quindi lo aumentiamo del valore contenuto in \der@exp.
(5) Se il condizionale \@tempswa è falso siamo al primo elemento della lista, quindi poniamo il condizionale a vero; altrimenti aggiungiamo a \toks@ (che contiene il denominatore) uno spazio sottile.
(6) Adesso aggiungiamo al denominatore \partial”variabile^{esponente}”.
(7) Alla fine del ciclo possiamo scrivere la frazione che ha come esponente \partial^{esponente finale}”primo argomento di \der”; se \count@ è 1 c’è una sola derivata e quindi l’esponente si omette. A denominatore mettiamo il contenuto del registro \toks@.
Ciao
Enrico