Re: Scoprire la definizione di una macro in LaTeX

#49290
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    Certo, la macro è sempre \show, ma (pdf)latex generalmente protegge i comandi fragili, che invece con (plain) tex non sono protetti.

    la cosa è delicata: per diversi motivi, comprensibili a posteriori, un comando \pippo viene definito come \protect\pippo .
    Nota lo spazio fra \pippo e il punto fermo di fine periodo. L’utente non se ne accorge, quando un comando così protetto viene scritto in un file ausiliario viene scritto con lo spazio appeso, e quando il file viene riletto quello spazio non conta niente.

    Per cui per avere il significato di una macro al di là del suo nome per l’utente bisogna essere “astuti”; il comando per conoscere la definizione di \LaTeX, tanto per fare un esempio, è:
    `
    \expandafter'show\csname LaTeX \endcsname
    `

    L’uso di \csname…\encsname serve per creare un nome di macro che contenga qualunque segno, anche uno spazio; noti infatti lo spazio prima di \endcsname; invece lo spazio dopo\csname serve a LaTeX per capire che è finito il nome della macro.
    \expandafter fa esattamente quello che dice il suo nome: espandi (esegui) \show DOPO aver espanso (eseguito) \csname; questo a sua volta ha bisogni di trattare tutto quanto fino a \endcsname per poter svolgere il suo compito.

    In buona sostanza viene prima eseguito \csname…\endcsname per produrre \LaTeX_
    (ho sostituito lo spazio con la lineetta ribassata per marcarlo, altrimenti questo browser non lo fa vedere) poi viene eseguito \show\LaTeX_

    Se usi tex, conosci certamente questi comandi “primigeni” dai quali con le macro si ottengono tutti gli altri.

    Go to top