Re: estrarre le opzioni delle classi standard

#1638
ev
Partecipante
    Up
    0
    Down
    ::

    `\def\controllo#1,#2\fine{%`allora: definisci un comando chiamato controllo che ha due argomenti, separati da una virgola. se non ho capito male l’idea hai una lista di elementi e con \controllo li guardi uno per uno, fino alla fine.

    Esatto.

    \fine cos’é?

    Un token qualunque per segnalare a TeX che il secondo argomento di \controllo e’ tutto quello che si trova tra la prima virgola e questo token, quindi il “resto” della lista.

    ` \def\temp@a{#2}%`altro comando interno, che si becca il secondo argomento di controllo. mi par di capire che serve per vedere se ci sono aoncora elementi nella lista.

    Esatto.

    ` \ifx\temp@a\@empty
    \let\next\relax
    `se la mia supposizione è esatta si controlla se non c’è l’n+1 elemento, in tal caso si smette di controllare.

    Esatto.

    immahino \@emty voglia semplicmeente dire vuoto.

    Esatto. E’ la “versione” interna di \empty, da utilizzarsi preferibilmente perche’ qualche pacchetto potrebbe combinarti lo scherzetto di ridefinire \empty come qualche cosa di non vuoto. Se proprio si vuol essere sicuri, basta crearsi qualche cosa di sicuramente vuoto con \def\sicuramentevuoto{}.

    mi sfuggono i dettagli, la differenza fra \if e \ifx, cosa si fa con la seconda riga.

    \if controlla l’uguaglianza dei character code dei due argomenti (i primi due token che incontra) mentre \ifx effettua un solo passo di espansione dei due token incriminati e controlla che la loro definizione sia esattamente uguale. In questo caso, si controlla che #2 sia completamente vuoto.

    `
    \else
    \def\next{\controllo#2\fine}%
    \fi
    `
    altrimenti si definisce \next come…
    qui immagino che si salvi il valore trovato.

    Con quella ridefinizione di \next si “riimmette” nel flusso di input il comando \controllo passandogli come argomento la coda della lista del passo precedente.

    Nel tuo caso, invece di scivere opzione XYZ potresti testare #1 (dopo averlo infilato in una macro di appoggio come \temp@b) con \ifx.

    ???????????

    Intendevo qualche cosa del tipo:`\def\temp@b{#1}%
    \def\temp@c{12pt}%
    \ifx\temp@b\temp@c
    % Abbiamo beccato l'opzione 12pt
    \else
    \def\temp@c[11pt}%
    \ifx \temp@b\temp@c
    % Abbiamo beccato l'opzione 11pt
    \fi
    \fi`

    già, forse era meglio studiare ancora un po’ che mettersi a smanettare sui pacchetti… lo faccio per imparare, perdonatemi…

    E quale modo migliore di imparare se non mettere in pratica la teoria?

    Go to top