Re: Definizione di un comando per le derivate

#40176
Up
0
Down
::

Suppongo che tu non abbia davvero provato, perché \der[2]{f}{x} e \der{f}{x} danno esattamente lo stesso risultato.

Ammetto le mie colpe 🙁 Domani ho la consegna della tesi di dottorato e non sono molto lucido…

Scusa validissima! In bocca al lupo!

Il condizionale \if è una brutta bestia.

Ho notato! Avevo preferito quello perché mi sono detto “È un comando basilare di TeX, funzionerà in maniera velocissima. Oltretutto devo solo verificare che un parametro è vuoto!”
Solo che poi ho pasticciato prendendo un pezzo di qua e un pezzo di là.
E infatti quella costruzione non è da nessuna parte 🙁

È infatti un comando molto utile, purché si sappia come funziona; e il funzionamento è poco intuitivo, ma così si possono ottenere effetti molto vari.

`\if?#1?\else^{#1}\fi`

Era così semplice!
Era scritto chiaramente nell’Introduzione, così come l’altro
esempio per i comandi espandibili. Scusa la distrazione 🙁
Vabbè almeno ora ho capito (almeno credo) quella sezione.

Be’, semplice forse no. 🙂 Quello che va tenuto presente è che i condizionali \if, \ifcat e \ifx confrontano due token (in modo diverso) e che #1 in una definizione può rappresentare una lista di numerosi token. Quindi anche \ifx#1\@empty non è sufficiente.

Esiste anche un altro metodo, trovato dal solito Heiko Oberdiek:
`\expandafter\ifx\expandafter\relax\detokenize{#1}\relax
<#1 è vuoto>%
\else
<#1 non è vuoto>%
\fi`
L’espansione del comando \detokenize (che è una delle estensioni e-TeX) è la lista di token data come argomento al comando, ma come caratteri di categoria 12 (è una generalizzazione di \string); se #1 non è vuoto, \ifx confronta \relax con il primo carattere prodotto da \detokenize che ovviamente non può essere \relax. Succede allora come con \if!#1!, tutto ciò che segue fino a \else è ignorato. Se invece #1 è vuoto, \ifx confronta \relax con \relax e il test è vero!

Per esempio, l’espansione di \detokenize{\abc\def} è la successione di caratteri di categoria 12 \abc\def; lo stesso effetto si potrebbe ottenere con una macro ricorsiva che mette sempre dopo di sé \string fino a quando incontra una “sentinella”, ma certo una primitiva è più efficiente.

Devo ricordarmi di aggiungerlo all’Introduzione.

Ciao
Enrico

Go to top