Re: Curiosità

#50273
OldClaudio
Partecipante
    Up
    0
    Down
    ::


    I comandi fragili si rompevano perché in certe situazioni il loro sviluppo cominciava al momento sbagliato e quindi non facevano quello che dovevano producendo spesso degli errori “fatali”.

    Per rendere robusti i comandi si usava protect, ma ancora talvolta non bastava.

    In LaTeX2e a seconda dei comandi che potrebbero avere per argomento un comando da eseguire al momento giusto (potenzialmente fragile) si definiscono diversi livelli di protezione, non solo uno, al punto che talvolta anche lo stesso \protect viene protetto. È diffcile dare esempi senza scendere nei dettagli, ma se apri latex.ltx e cerchi la stringa protect (senza backslash) troverai molti “sinonimi’ tipo \write@protect, \edef@protect (cito a memoria) ognuno di quali protegge quel che deve proteggere in un modo diverso.

    Il LaTeX3 Team sta facendo il possibile per eliminare i comandi fragili; dicono che ce ne è ancora qualcuno quindi anche loro non li hanno trovati tutti; tuttavia se ti scrivi delle macro può succedere facilmente che non proteggi abbastanza le tue macro subalterne o che la tua macro bella e comodissima alla fine risulti fragile.

    Ecco perché una quantità di comandi in latex.ltx sono definiti con \DeclareRobustCommand invece che con \def come succedeva nelle prime versioni nel 1994 e come succedeva sempre con il nucleo di LaTeX209, quello che è stato sostituito da LaTeX2e.

    Nota che \def in LaTeX2e è sostituito da \newcommand, che non fa molto di più di \def, salvo, importantissimo, controllare che il nuovo comando sia effettivamente non ancora definito e la sua struttura (il suo nome) non possa andare in conflitto con i comandi del nucleo di LaTeX. Quindi i comandi definiti con \newcommand potrebbero risultare fragili a seconda di che cosa sono chiamati a fare e, specialmente, quando.

    Go to top