Re: Classe o pacchetto: definire comandi facilmente ridefinibili

#39515
Up
0
Down
::

Scusate se riapro la questione, ma ho due piccole domande:

Volendo emulare meglio siunitx, ti propongo
`\providerobustcmd{\celsius}{%
\ensuremath{{}^{\circ}\kern-\scriptspace\mathrm{C}}}`

1. Ora che ho tolto gli if dai semplici comandi che stavo definendo, è ancora veramente necessario usare etoolbox e il providerobustcmd? Mi è venuto il dubbio perché nel consigliarmi la definizione di \celsius non hai usato un semplice \providecommand.

2. Se l’uso di \providerobustcmd fosse ancora necessario, che ne pensi se al posto di caricare etoolbox mi limitassi a scrivere:
`\@ifdefinable{\pippo}{\DeclareRobustCommand{\pippo}{…}}`

\providerobustcmd è certamente più efficiente di \DeclareRobustCommand; di fatto in questa situazione non è strettamente necessario perché \ensuremath è definito con \DeclareRobustCommand. In genere vanno “irrobustiti” comandi che si pensa possano trovar posto in argomenti mobili.

Se definisci \celsius con il solo \newcommand (o \providecommand), l’unica differenza è che in un file ausiliario troverai invece di \celsius la sua espansione di primo livello, cioè
`\ensuremath{{}^{\circ}\kern-\scriptspace\mathrm{C}}`
perché \ensuremath è irrobustito come \mathrm e gli altri comandi che compaiono non sono espandibili (\circ, \kern e \scriptspace).

Il vantaggio di {\new|\renew|\provide}robustcmd è che ciascuno di questi definisce un solo comando invece di due e l’espansione è di qualche nanosecondo più veloce. 🙂

Ciao
Enrico

Go to top