Dubbio su \makeatletter e \makeatother

  • Creatore
    Topic
  • #118753
    Up
    0
    Down
    ::


    Ciao a tutti !
    Come potete notare questo è il mio primo messaggio su questo forum che frequento come ospite da qualche mese. Mi sto approcciando a LaTeX in vista della tesi (che gran sorpresa, vero ? 😛 ). Essendo il mio primo messaggio voglio cogliere l’occasione per ringraziare tutte le persone che mettono a disposizione la loro conoscenza ed il loro tempo a titolo gratuito per aiutare quelli come me (non parlo solo di risposte sul forum, ma anche della numerosissima documentazione prodotta e distribuita liberamente). Davvero un sentito grazie ! Vengo al dunque; nonostante il titolo sia un po’ fuorviante (e di questo mi scuso), la mia domanda è questa: leggendo Introduzione all’arte della composizione tipografica con LATEX, a pag. 466 dell’ultima versione rilasciata a gennaio 2020, è scritto che

    …il comando comincia
    con il segno @ che per il programma non è una lettera e quindi difficilmente il
    compositore può andare a ‘disturbare’ i comandi interni di sistema. Tuttavia il
    modo esiste, ed è descritto da Leslie Lamport in persona nel suo manuale
    . Bisogna
    usare il comando \makeatletter6 prima di ridefinire un comando interno…

    Ora, mi è abbastanza chiaro l’uso di \makeatletter, ma la mia domanda riguarda la parte in grassetto; il manuale di Leslie Lamport è A document preparation system — LATEX — User’s guide and reference manual. Addison Wesley, Reading, Mass., 2 ed., 1994 come riportato anche nella bibliografia del suddetto testo, oppure ci si sta riferendo ad un altro manuale ? Perché, sul manuale di Lamport non riesco a trovare alcun riferimento al comando \makeatletter ? Ho forse cercato male e non l’ho visto io ? (probabile) Oppure non è riportato tale comando perché nella versione di LaTeX del 1994 (anno di pubblicazione del manuale) magari LaTeX agiva in modo diverso e non era presente questo comando ? Nel LaTeX reference manual commentato si fa riferimento a tale comando a pag. 73 (versione del gennaio 2019), ma sul Lamport non trovo nulla al riguardo. Com’è possibile ? Inoltre mi domandavo se poteste consigliarmi qualche libro e guida (eventualmente anche in inglese) riguardo i comandi (passatemi il termine) più “interni” di LaTeX, come quello in questione, o altri che permettono di modificare porzioni dei file di classe, etc…

    Ringrazio sin da ora quanti risponderanno

    Saluti

Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #118754
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Benvenuto nel forum.

        Confermo: nella seconda edizione si parla del carattere @ in diversi punti, come si evince dal’indice analitico. ma non si parla di \makeatleter e \makeatother. Se ne parlava invece nella prima edizione del 1985 che si riferiva a LaTeX 209, non a LaTeX2e che non esisteva ancora.

        Nel nucleo di LaTeX e di moltissimi pacchetti si usano questi questi comandi ma forse si suppone che l’utente generico sono venga invogliato a mettere le mani e a ridefinire comandi interni. Ricordo che ella prima edizione Lamport parlava della ridefinzione di \@chapapp.

        Comunque nella seconda edizione si dice espressamente che @ si può usare solo nei file .sty; quindi se uno vuolmodificare un qualche comando interno, deve sapersi scrivere un file .sty. Mi pare un approccio più prudente e lo consiglierei. Fra le guide tematiche ce ne è na che parla della personalizzazione e della costruzione di file .cls e .sty; lè si parla di nuovo della funzione di protezione del carattere @.

        Se proprio uno desidera definire macro protette da caratteri non alfabetici ma considerai tali durante la elaborazione dei file .sty oggi ha altri sistemi; uno che io uso spesso è usare il pacchetto etoolbox, di cui bisogna evidentemente studiare a fondo la documentazione perché è scritto prevalentemente per gli sviluppatori di software.

        Tuttavia, come ricordato sopra, Lamport nella prima edizione suggeriva di elaborare \@chapapp. Faccio un esempio d’uso; l’utente ad un certo puto vuole sapere quale sia a definizione di \@chapapp a un certo punto del suo file sorgente può scrivere`\makeatletter
        \show\@chapapp
        \makeatother` e, durante la composizione del documento, ottiene un arresto e nella console gli compare un messaggio che gli conferma che \@chapapp è una macro la cui espansione è, per esempio, “Capitolo”. Se non si fida ad usare i due comandi suddetti può invece scrivere`\expandafter\show\csname @chapapp\endcsname` e sulla console gli apparirà la stessa informazione, cioè che \@chapapp è una macro la cui espansione è “Capitolo”.

        Ciò premesso, consiglio chiunque di non usare \makeatletter e \makeatother se non sa esattamente che cosa sta facendo, perché usando male questi comandi è come maneggiare nitroglicerina senza le dovute precauzioni.

      • #118755
        Up
        0
        Down
        ::


        Grazie della risposta e dei consigli !

        Dai tuoi messaggi precedenti su questo forum mi pare di intuire che tu sia Claudio Beccari; in tal caso permettimi di ringraziarti per tutti i tuoi contributi a guide, documentazioni e quant’altro. Se non sei tu perdona la mia svista 😀 e spero tu non prenda il mio darti del tu come una mancanza di rispetto nei tuoi confronti, ma solo come una abitudine da forum. E’ un vero piacere parlare con te ! Tra l’altro non potevo sperare di ricevere risposta proprio dall’autore del documento cui si fa riferimento 🙂 .
        Per quanto riguarda la guida per la costruzione di classi du cui parli, immagino ti riferisca a quella scritta sempre da te Introduzione alla creazione di file di classe, che ho provveduto a scaricare, ma non ho ancora avuto modo di leggere.
        Un’ultima domanda, permettimi: dunque per modificare un comando interno ad una classe, che metodo useresti ? Per fare un esempio, prendiamo la classe “europecv” e mettiamo di non voler far comparire a piè di pagina a sinistra “curriculum vitae di”, cioè di voler ignorare il comando \ecvfootername{name} impostato di default. Come procederesti ?

        Saluti !

      • #118756
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Probabilmente mi scriverei un comando del tipo`
          \makeatletter\let\ecvfotnotename\@gobble\makeatother`alla fine del preambolo o subito dopo \begin{document}.

          Ma è sempre pericoloso modificare quei pacchetti i cui codice non è sufficientemente documentato.

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

      Go to top