allora, vediamo se riesco a fare il giochino di indovinare il significato dei comandi…
`\def\ProcessOptionsWithKV#1{%
\let\@tempa\@empty
`
allora: si definisce un comando che elabora le opzioni con keyval e inizializiamo una \@tempa ponendolo vuoto (usando la definizione interna di \empty)
`
\@for\CurrentOption:=\@classoptionslist\do{%
`
Immagino che si fa un ciclo per ogni opzione corrente, sul contenuto di tutta la lista delle opzioni. in pratica quando metto le opzioni in \usepackage queste dovrebbero venir messe nella lista suddetta, che io avrei chiamato \@packageoptionslist per non fare cosino con le classi, ma insomma…
`
\@ifundefined{KV@#1@\CurrentOption}%
`
qui tiro un po’ a indovinare:
usando la macro di keyval \define@key{family}{key}{code} questa definisce una macro \KV@family@key che quando viene usata in una lista keyval riceve i valori specificati come argomenti.
in questo caso si vuole controllare se altrove è stato definito \KV@family@key in maniera che family sia l’argomento specificato per \ProcessOptionsWithKV e key l’opzione corrente. se non esiste una dichiarazione del genere si passa avanti.
o mi sto inventando tutto?
`
{}{\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…
in ogni caso si esce dal ciclo do.
`
\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.
non capisco più cosa contiene \@tempa e cosa si fa con \@currname e \@curext. vado a cercare se trovo la definizione di tali comandi.
`
\AtEndOfPackage{\let\@unprocessedoptions\relax}}
\ProcessOptionsWithKV{fbs}`
posponendo il codice quando verrà utilizzato alla fine del pacchetto per un istante si ridefinisce al volo \@unprocessedoptions in modo che equivalga a \relax perché altrimenti latex darebbe un errore visto che non sono stati usati i comandi \DeclareOption e nonostante questo sono presenti delle opzioni.
infine si lancia il comando suddetto, che dovrebbe processare tutte le opzioni.
incomincio a capirci qualcosa…
ciao
f