Re: Definizione pacchetto con opzioni (contrastanti)

#23691
Up
0
Down
::

Ma non facevi prima a scrivere
`
\if@terminecolor
\RequirePackage{color}
\definecolor{celeste}{rgb}{0,.5,.99}
\newcommand\termine{\textcolor{celeste}}
\else
\relax %oppure \let\termine\relax allo scopo di definire \termine e basta
\fi `

Certo che no! Nel documento ci sarà scritto \termine, se non lo definisci come si fa?

Una curiosità: dopo l’istruzione `\newcommand\termine{\@iden} `
il comando \termine è vuoto? Oppure no?

Il comando \termine diventa essenzialmente equivalente a \@iden: perciò l’espansione di “\termine{abc}” diventa “\@iden{abc}” che a sua volta si espande in “abc” senza le graffe. Per semplicità ho proposto “\newcommand{\termine}{\@iden}”, che dovrebbe essere “\let\termine\@iden”, in modo da risparmiare un’espansione a ogni uso di \termine.

Definire \termine equivalente a \relax, come vorresti tu, non sarebbe corretto, anche se probabilmente innocuo nel caso particolare. Introdurresti un token non espandibile, “\relax”, dove non serve. A livello utente, \termine appare come un comando con un argomento, è bene che si comporti come tale togliendo di mezzo le graffe se non servono.

Per esempio, la macro \@secondoftwo è definita come
`\def\@secondoftwo#1#2{#2}`
e non come
`\def\@secondoftwo#1{}`
che potrebbe sembrare più semplice, visto che non si raccoglie un argomento. Ma con la prima definizione, “\@secondoftwo{abc}{xyz}” si espande in “xyz”, con la seconda si espanderebbe in “{xyz}” che è molto diverso.

Ciao
Enrico

Go to top