Re: Idea nuovo pacchetto gestione brani biblici

#71364
OldClaudio
Partecipante
    Up
    0
    Down
    ::

    Ho quasi capito tutto il tuo procedimento, devo ancora trovare il coraggio di iniziare a pensare al perché dei 7 \expandafter di fila… ma ci arriverò!

    Francesco, ti confesso, io ho cominciato con soli tre \expandafter e io stesso ho scoperto sperimentalmente che ce ne volevano 7; la spiegazione sta in questo; prima di far intervenire \ifbpoem bisogna che il versetto sia completamente sviluppato e quindi che sia completamente sviluppato \@nameuse{\the\versetto};
    Per sviluppare questo comando ci vogliono tre sviluppi (supponendo che il contatore \versetto contenga il numero 12 e il suo contenuto sia la lista di token che io indico con ):

    [tt]\@nameuse{\the\versetto} –> \csname \the\versetto\endcsname –> \12 –> [/tt]

    dunque bisogna ritardare l’esecuzione di \ifbpoem tre volte mediante gli \expandafter; dei 7 \expandafter la prima volta vengono sfruttati quelli di posto dispari (in tutto quattro) per avere il primo sviluppo di [tt]\@nameuse{\the\versetto}[/tt]; restano 3 \expandafter e al secondo giro vengono usati quelli di posto dispari (in totale 2) per sviluppare [tt]\csname…\encsname[/tt]; ne resta 1; questa volta serve l’unico \expanfdafter di posto dispari per sviluppare [/tt]\12[/tt] e rimanere coi token da sviluppare rimanenti:

    [tt]\ifbpoem[/tt]

    A questo punto non c’è più nessun \expandafter che possa ritardare l’esecuzione di \ifbpoem e questo, mediante \futurelet, può esaminare il primo token della lista e agire di conseguenza.

    Bisogna sapere quante espansioni bisogna eseguire prima di far entrare in gioco il comando da eseguire; nel nostro caso erano 3, e dovendo aggiungere sempre tanti \expandafter di posto dispari quanti ne occorrono, ne abbiamo 1+2+4=7. Se avessimo avuto bisogno di 4 espansioni ne sarebbero occorsi 1+2+4+8=15 😯

    Mi pare di avere letto da qualche parte una intervista al nostro IGW (Italian Grand Wizard) Enrico, dove diceva, se ben ricordo, che egli una volta aveva dovuto ricorrere a 15 \expandafter; conoscendo il meccanismo ora sappiamo perché 😉

    Ciao
    Claudio

    Go to top