Re: passare un opzione a un pacchetto con keyval

#1656
ev
Partecipante
    Up
    0
    Down
    ::

    allora, vediamo se riesco a fare il giochino di indovinare il significato dei comandi…

    Ok, ma niente premio :mrgreen:

    `
    \@ifundefined{KV@#1@\CurrentOption}%
    `
    qui tiro un po’ a indovinare:

    Taglio un po’ per non annoiare gli altri utenti: hai sostanzialmente afferrato il significato di \@ifundefined e la modalità di “reperimento” delle macro che keyval associa ad ogni opzione.

    `
    {}{\edef\@tempa{\@tempa,\CurrentOption,}}}%
    `
    qui mi perdo, se \@tempa è vuoto definiamo \@tempa come “,opzione corrente,”.
    se al ciclo precedente eravamo passati dentro l’if allora lo definiamo come
    “,opzione precendente,opzione corrente,” ??? se invece non siamo passati nell’if \@tempa contiene la definizione specificata sotto, che è la cosa che capisco meno…

    No. Per ogni opzione valida per keyval si aggiunge quell’opzione alla lista che stiamo costruendo in \@tempa; per ogni opzione non valida, cioè quelle che danno luogo ad alcuna macro \KV@fam@key, non si esegue alcuna operazione (la coppia di parentesi graffe vuota) e si passa ad esaminare l’elemento seguente di \@classoptionslist.

    `
    \edef\@tempa{%
    \noexpand\setkeys{#1}{\@tempa\@ptionlist{\@currname.\@currext}}}%
    \@tempa
    `
    adesso si definisce \@tempa come:
    \noexpand???
    e si utilizza la macro \setkeys, dando appunto come primo argomento il nome della famiglia e come argomento \@tempa e \@optionlist (ho aggiunto una o di option, ho fatto male?) e poi mi perdo.

    Per \edef e \noexpand dai un’occhiata al TeXbook (il capitolo sulle macro, se non ricordo male). Dopo l’esecuzione di quell’\edef in \@tempa avrai:`\setkey{}{}`cioè quello che si voleva fin dall’inizio.

    Go to top