makeatletter e makeatother

  • Creatore
    Topic
  • #28724
    Up
    0
    Down
    ::


    Nell’intestazione di una tesi ho trovato questi due comandi; ho provato a cercare notizie su google ma non ho trovato molto…
    qualcuno sà a cosa servono???

Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #28725
      Up
      0
      Down
      ::

      Nell’intestazione di una tesi ho trovato questi due comandi; ho provato a cercare notizie su google ma non ho trovato molto…
      qualcuno sà a cosa servono???

      La questione è un po’ sottile, ma provo a risponderti nel modo più semplice possibile.

      I comandi di LaTeX sono di tre tipi: quelli a livello utente, quelli di livello medio e quelli “interni”. I comandi di livello medio hanno tutti almeno due lettere maiuscole nel nome (fa eccezione il comando \AA che produce una A con un circoletto sopra) e servono nei file .sty per eseguire compiti ripetitivi (\DeclareRobustCommand, \DeclareFontFamily, eccetera). I comandi a livello utente hanno nomi normalmente con lettere minuscole (eccetto quelli per indicare simboli speciali come \S e \P o particolari lettere come \L).

      I comandi interni hanno tutti un nome che contiene il carattere @. Perché ciò sia possibile, però, occorre essere in un ambiente particolare, dal momento che normalmente @ non è una lettera. Infatti, quando TeX incontra un carattere \ entra nella routine per scoprire il nome del comando: se dopo \ c’è un carattere che non è una lettera, quello è il nome del comando (pensa a \; o \{); se dopo \ c’è una lettera, il nome termina quando viene trovato un carattere che non è una lettera.

      Con questo trucco si evita che l’utente possa ridefinire o usare impropriamente i comandi interni; infatti se si prova a usare \@line, che è uno dei comandi interni, si avrà un errore oppure qualcosa che non ci si aspetta, perché TeX vede semplicemente il comando \@ seguito dai quattro caratteri line.

      Il comando \makeatletter fa appunto in modo che il carattere @ venga visto, nella ricerca dei nomi dei comandi, come una lettera. È necessario darlo ogni volta che si debba ridefinire (quando si sa che cosa si sta facendo) un comando interno oppure adoperare comandi interni in una definizione.

      Questa possibilità di agire sui comandi interni va disabilitata al più presto possibile, per evitare problemi successivi di interpretazione dei comandi e \makeatother fa esattamente questo.

      Un’ultima parola: “sa” si scrive senza accento. 🙂

      Ciao
      Enrico

    • #28726
      Up
      0
      Down
      ::


      Grazie di tutto, anche della correzione… 😆

Visualizzazione 1 filone di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top