Posizione di \label

  • Creatore
    Topic
  • #69166
    Liverpool
    Partecipante
      Up
      0
      Down
      ::


      Esempio 1: \chapter{Pippo\label{ch:pippo}}
      Esempio 2: \chapter{Pippo}\label{ch:pippo}

      Quali sono le eventuali differenze tra i due metodi e qual è da preferire (o da evitare assolutamente)?

      Grazie,
      Luigi

    Visualizzazione 5 filoni di risposte
    • Autore
      Risposte
      • #69167
        Up
        0
        Down
        ::


        Non saprei dirti le eventuali differenze. So per certo che il comando \label va dato sempre DOPO il comando o l’ambiente che assegna un numero all’oggetto (non solo i comandi per sezionare il testo, dunque, ma anche certi ambienti matematici e \caption).

        Un \label può essere dato DENTRO l’argomento di un comando, per esempio, quando hai una cosa del tipo:

        `
        \begin{itemize}
        \item primo item\label{item:primo}
        \item secondo item\label{…}
        \item …
        \end{itemize}
        `

        per ottenere un richiamo automatico a un particolare item di un elenco particolarmente importante. Ma non l’ho mai usato. Credo, comunque, che tu sapessi già tutte queste cose 😉

        Ciao
        Tommaso

      • #69168
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          L’esempio del Linguista non funziona perché itemize non usa contatori e quindi label recupererebbe forse il numero del paragrafo dentro al quale si ritrova; funziona invece con l’ambiente enumerate e solo quando non viene usat l’argomento facoltativo di \item. (Vedi GuidaGuIT).

          Per argomenti mobili, come l’argomento di \chapter, sarebbe meglio metterlo fuori, anche se non è vietato metterlo dentro; l’argomento infatti viene trascritti prima nel file aux poi nel file toc; è vero che LaTeX prvvede a disattivare il comando \label nell’argomento mobile, o meglio, lo rende equivalente a \@gobble, vale a dire che ne prende l’argomento e non ne fa nulla, ma questo solo nel processo di trascrizione verso il file ausiliario, non nel processo di composizione del titolo.

          Come buona regola è meglio, quindi, metterlo fuori dell’argomento di \chapter e di qualunque altro comando di sezionamento, \caption compreso, anche se non ha tutte le caratteristiche di un comando di sezionamento.

          L’unico caso in cui mi pare che \label debba essere messo dentro l’argomento di un comando è il caso di \footnote nella remota circostanza in cui si volesse fare riferimento ad una nota già scritta o che verrà più avanti. Le note, pur essendo mobili, non vengono trascritte in alri file, tranne le endnotes (che per altro sarebbe sepre meglio non usare — non è solo un parere mio, ma anche di altri famosi tipografi e book designers — io non lo sono affatto, ma quando lo dico alcuni sembrano cascare dalle nuvole…)

        • #69169
          Up
          0
          Down
          ::


          Un \label inserito nell’argomento di \chapter (o \section…) potrebbe creare problemi se finisse nell’indice generale o nelle testatine, ma ciò non accade. Come ha anticipato Claudio, \addtocontents lo annulla, perché pone \let\label\@gobble e poi lo fa espandere (l’espansione avviene sempre quando si scrive nei file ausiliari, è per questo che ogni tanto serve un \protect): se noti, nel file .toc non c’è più traccia di \label.
          😉

          Una cosa analoga fanno \markboth e \markright, eliminandolo dalle testatine.

          Domanda per esperti: perché \markright e \markboth fanno \let\label\relax anziché \let\label\@gobble come mi aspetterei, per eliminare anche l’argomento? Non è la prima volta che trovo dei \let “incongrui” (e che non me li spiego; per esempio anche un \let\thepart\@gobble in classicthesis)…
          😕

          In ogni caso, io preferisco porre il \label fuori. Sarebbe bene tenere sempre a mente la regola che scrive Tommaso: di darlo dopo il comando associato (tranne che per casi particolari o ambienti, ovvio). Ancora meglio sotto:
          `\chapter{Un gran bel capitolo}
          \label{chap:bel-capitolo}`

          Ciao,
          Antonio

        • #69170
          Liverpool
          Partecipante
            Up
            0
            Down
            ::


            Grazie a tutti per le risposte. Ogni tanto mi prendono dei dubbi ingiustificati, che però è meglio chiarire una volta per tutte 😉 . Ancora:

            1) Quando l’etichetta si riferisce ad un ambiente (ad esempio equation) ci sono differenze tra inserire l’etichetta dentro o fuori?
            2) Ho visto che nell’Arte il \label è dato subito dopo il \begin{equation} mentre io di solito lo do alla fine. Cambia qualcosa?

            Grazie ancora,
            Luigi

            P.S. controesempio: il comando \subcaptionbox del pacchetto subcaption richiede esplicitamente il \label al suo interno (vedi manuale, par. 6.4).

          • #69171
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              tutte le volte che un contatore viene incrementato il suo valore con i prefissi viene assegnato ad una control sequence con una definizione locale; così l’ambiente equation incrementa il contatore equation quando si apre e ne mette il valore con i debiti prefissi dentro la suddetta control sequence; \label ne prende il contenuto e lo assegna ad un’altra control sequence che verrà scritta nel file aux al omento opportuno. alla chiusura dell’ambiente equation quella control sequence riprende il suo valore precedente; quindi il numero dell’equazione non è più accessibile; quindi mettere \label all’inizio o alla fine dell’equazione non cambia nulla purché sia sempre dentro all’ambiente. per gli allineamenti tipo align o gather che formano una tabella, il comando \lable deve essere messo alla fine della righe della espressione che si vuole etichettare

              Per le sottofigure le cose vanno un po’ diversamente, perché il caption non viene effettivamente composto e sub-numerato finché la scatola nella quale è stato messo il testo della sotto-didascalia con il suo \label non viene usata..

            • #69172
              Liverpool
              Partecipante
                Up
                0
                Down
                ::

                OldClaudio” post=68320alla chiusura dell’ambiente equation quella control sequence riprende il suo valore precedente; quindi il numero dell’equazione non è più accessibile;

                Ti ringrazio per la spiegazione: sei stato veramente convincente. 😉 Ti confesso che non avevo nemmeno provato a mettere l’etichetta fuori dall’ambiente, ma oggi era la giornata dei dubbi…

                Ciao,
                Luigi

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

            Go to top