Gentilissimi del forum,
vi ringrazio per permettermi di partecepitare e magari in seguito fornire il mio contributo sulla base di ciò che sperimenterò con il meraviglioso Tex/Latex
E’ da poco che mi sono avvicinato a questo linguaggio che consente di comporre in modo professionale un’opera che il nostro cervello può aver più o meno sapientemente partorito 🙂
Non essendo digiuno di programmazione mi sono cimentato da subito studiando il pacchetto genialmente ideato per scrivere un frontespizio.
Lo scopo del mio studio è ovviamente buttar giù qualcosa che possa aiutare a comporre la prima pagina di un libro
Il pacchetto dal quale ho preso lo spunto è dedicato appunto alla stesura del frontespizio della tesi di laurea.
Vi chiedevo il significato logico delle seguenti righe di codice:
(penso di averle dedotte ma c’è qualcosa che mi sfugge)\def\@mia_string1@parametro{TT\fi\@nameeuse{ifmia_string2@parametro}}
si defisce poi
\newif\ifmia_string2+parametro
per arrivare poi alla
\if\@mia_string1@{parametro}
altre control_sequence
\fi
Vi chiedo:
supponiamo di aver inserito il parametro ‘x_y_z’
i
una volta espanso arrivo ad ottenere\if\TT\fi\ifmia_string2@x_y_z
\fi
il primo if quale condizione assumerebbe,nessuna???la cs ‘\TT’ dopo l’if come si comporta???
Non so a quale pacchetto tu ti riferisca. Il trucco che usa (implicitamente) quella costruzione
`\if TT\fi`
serve per potersi definire comandi condizionali senza avere problemi. Evito le tue notazioni un po’ troppo pesanti. Supponiamo di volerci definire un comando che restituisca il ramo “vero” se un certo numero è pari, quello “falso” se il numero è dispari. Una costruzione come
`\def\ifiseven#1#2#3{\ifodd #1\relax #3\else #2\fi}`
funzionerebbe benissimo. Ma a volte questa non è una buona procedura, perché è complicato annidare i condizionali. Perciò si può fare in un altro modo:
`\newif\ifiseven
\def\iseven#1{TT\fi\ifodd #1\relax\isevenfalse\else\iseventrue\fi\ifiseven}`
Adesso il codice
`\if\iseven{
funziona anche annidato in altri condizionali. Infatti l’espansione di \if prevede l’espansione del token che segue, in questo caso \iseven che prima di tutto raccoglie il suo argomento; a questo punto viene sostituita la lista di token della definizione e la lista diventa
`\if TT\fi\ifodd
Ora dopo \if ci sono due token non espandibili e \if TT\fi sparisce senza fare nulla (con espansione vuota, per la precisione) e il condizionale richiesto viene valutato correttamente.
Se invece il codice “\if\iseven{
Ciao
Enrico