Uso del carattere @ [Banalità del giorno]

  • Creatore
    Topic
  • #31037
    Up
    0
    Down
    ::


    Sto leggendo ‘Appunti di programmazione in LaTeX e TeX’, ma mi sfugge l’uso corretto del carattere ‘@’.
    Ovvero: \@author è un ‘comando interno’ perché ha la chiocciola?
    Quindi \abc@aaa è un comando interno, mentre se scrivo \abcaaa è un comando non interno?
    Oppure il fatto che il carattere @ venga assegnato a categoria 11 solo nel file .sty forza il comando ad essere definito solo nel file .sty (a meno di \makeatletter) e pertanto considerato comando interno?

    Ancora: è pertanto obbligatorio usare @ quando si definisce un comando?

    Scusate se sono contorto, ma mi sono arenato a pagina 19…

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #31038
      lorenzo.pantieri
      Partecipante
      • #31039
        Up
        0
        Down
        ::

        http://www.guit.sssup.it/phpbb/viewtopic.php?t=5136&highlight=interni

        Ciao,
        L.

        Grazie, così andiamo già meglio. Che keyword hai usato per la ricerca?

      • #31040
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::

          Che keyword hai usato per la ricerca?

          Quell’intervento di Enrico lo ricordavo bene (me l’ero anche stampato per studiarmelo con calma). Più che la “ricerca avanzata”, ho usato la memoria! 😉

          Ciao,
          L:

        • #31041
          Up
          0
          Down
          ::

          Sto leggendo ‘Appunti di programmazione in LaTeX e TeX’, ma mi sfugge l’uso corretto del carattere ‘@’.
          Ovvero: \@author è un ‘comando interno’ perché ha la chiocciola?
          Quindi \abc@aaa è un comando interno, mentre se scrivo \abcaaa è un comando non interno?
          Oppure il fatto che il carattere @ venga assegnato a categoria 11 solo nel file .sty forza il comando ad essere definito solo nel file .sty (a meno di \makeatletter) e pertanto considerato comando interno?

          Ancora: è pertanto obbligatorio usare @ quando si definisce un comando?

          Scusate se sono contorto, ma mi sono arenato a pagina 19…

          La tradizione di usare comandi con @ nasce insieme a TeX; in plain TeX non c’è alcun comando per “definizioni sicure” e Knuth voleva evitare che si ridefinissero comandi importanti. Le primitive di TeX hanno nomi senza @, ma almeno sono elencate nel TeXbook, in modo che si sappia ciò che si fa. In LaTeX il problema non si porrebbe, ma si è preferito mantenere la tradizione: questo, in un certo senso, crea un “namespace” per le macro non direttamente impiegabili nel documento, che servono solo a compiti ripetitivi o di supporto per la programmazione.

          Più o meno ogni comando LaTeX ha una versione esterna e una interna; pensa a \chapter e a tutte le cose che deve fare. A esso sono collegati \@chapter, \@schapter, \c@chapter, \l@chapter e altri ancora. Usare nomi con @ evita di doversi spaccare la testa a cercarne di più complicati che non rendano difficile la vita di quelli che usano LaTeX, lasciando loro la libertà di scegliersi tutti i nomi di comando che vogliono, eccetto quelli “esterni” già definiti.

          Non c’è alcun obbligo di usare solo nomi con @ nei file .sty, ma è comodo: tipicamente, come scrivo negli Appunti, si usa un prefisso come “abc@” per i comandi interni propri del pacchetto, in modo che non vadano in conflitto con nomi interni di altri pacchetti. Adoperare \newcommand non risolverebbe il problema, ovviamente: le incompatibilità crescerebbero a dismisura.

          Non c’è in fondo molto da capire: i comandi @ devono essere usati solo tra \makeatletter e \makeatother oppure in file .cls o .sty. Li chiamo “interni” ma non c’è una vera differenza, a parte quella: sono macro come le altre.

          Ciao
          Enrico

        • #31042
          Up
          0
          Down
          ::


          Grazie a tutti.
          La mia perplessità nasceva dal fatto che sono un ‘code-monkey’, pertanto mi chiedevo se @ avesse o no un significato particolare, rifacendomi al fatto che TeX NON è un linguaggio di programmazione, ma ci va molto vicino.

      Visualizzazione 4 filoni di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top