\ref prima di aver definito la corrispondente \label

  • Creatore
    Topic
  • #5105
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      Carissimi, ho notato che se mi riferisco ad un oggetto prima di averlo etichettato, LaTeX non restituisce la numerazione corretta.

      Per esempio, se faccio
      `

      ….vedi ad esempio la seguente figura \ref{fig:figura}:
      \begin{figure}
      \includegraphics{figura}
      \caption{….} \ref{fig:figura}
      \end{figure}
      `

      LaTeX aumenta di 1 la numerazione della figura, rispetto a quella che dovrebbe correttamente aversi.

      Perché?? 🙄

      Lorenzo

    Visualizzazione 6 filoni di risposte
    • Autore
      Risposte
      • #5106
        Up
        0
        Down
        ::

        Carissimi, ho notato che se mi riferisco ad un oggetto prima di averlo etichettato, LaTeX non restituisce la numerazione corretta.
        Per esempio, se faccio`….vedi ad esempio la seguente figura \ref{fig:figura}:
        \begin{figure}
        \includegraphics{figura}
        \caption{….} \ref{fig:figura}
        \end{figure}`LaTeX aumenta di 1 la numerazione della figura, che in questo modo risulta scorretta.

        Benedetto figliolo! E come farà mai LaTeX a sapere il numero prima di averlo generato? Hai guardato la fine del log (o i messaggi sullo schermo che ti dicono`Label(s) may have changed.
        Rerun to get cross-references right`per indicarti con precisione che cosa fare?
        Spero comunque sia solo un errore di battitura, ma dopo \caption ci va \label.
        Ciao
        Enrico

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

          Benedetto figliolo! E come farà mai LaTeX a sapere il numero prima di averlo generato?

          Gulp!! LaTeX è così potente che, a volte, finisco per pensare che mi legga nel pensiero…

          Ciao,
          Lorenzo

        • #5108
          Up
          0
          Down
          ::


          Ci si riferisce al fatto che LaTeX mette a disposizione il riferimento incrociato interno solo dopo 2 compilazioni, perché deve prima crearsi una lista di \label e poi linkarla. Ovviamente, intendo solamente nel caso in cui i \ref siano inseriti prima delle corrispondenti \label.

          Ciao.

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

            Carissimi, ho notato che se mi riferisco ad un oggetto prima di averlo etichettato, LaTeX non restituisce la numerazione corretta.

            Come farà mai LaTeX a sapere il numero prima di averlo generato?

            Riprendo il 3D a distanza di tempo, ma c’è qualcosa che non mi convince. Non so più qual è il motivo per cui ottenevo quell’errore, ma ora tutto funziona a dovere.

            In generale, penso che LaTeX permetta di riferirsi senza problemi ad un oggetto prima di aver definito la corrispondente label. Per esempio, nella stesura di un documento può capitare di dover dire “…di questo ci occuperemo nel capitolo~\ref{cap:xxx}”, dove il comando \label{cap:xxx} può essere pagine e pagine avanti.

            A questo punto, però, non capisco l’obiezione di Enrico.

            L.

          • #5110
            Up
            0
            Down
            ::

            Carissimi, ho notato che se mi riferisco ad un oggetto prima di averlo etichettato, LaTeX non restituisce la numerazione corretta.

            Come farà mai LaTeX a sapere il numero prima di averlo generato?

            Riprendo il 3D a distanza di tempo, ma c’è qualcosa che non mi convince. Non so più qual è il motivo per cui ottenevo quell’errore, ma ora tutto funziona a dovere.

            In generale, penso che LaTeX permetta di riferirsi senza problemi ad un oggetto prima di aver definito la corrispondente label. Per esempio, nella stesura di un documento può capitare di dover dire “…di questo ci occuperemo nel capitolo~\ref{cap:xxx}”, dove il comando \label{cap:xxx} può essere pagine e pagine avanti.

            A questo punto, però, non capisco l’obiezione di Enrico.

            Quale obiezione?

            Il sistema label-ref funziona così:
            (1) all’inizio della compilazione, LaTeX legge il file .aux (se non c’è non importa)
            e lo tiene in memoria, poi lo cancella;
            (2) quando LaTeX incontra un comando \label scrive un’annotazione sul file .aux
            (3) alla fine della compilazione paragona il nuovo file .aux con quello che ha in memoria, se i due differiscono emette il messaggio di invito alla ricompilazione; può anche avvisare di \ref a \label non definite o di \label duplicate;
            (4) ogni riga del file .aux proveniente da un comando \label definisce un comando dal nome complicato che qui non importa; diciamo che \label{pippo} definisce il comando \ref@pippo che ha come espansione il valore di \the dove è l’ultimo numero generato (con un \refstepcounter) e il comando \pageref@pippo che ha come espansione il numero di pagina dove si trova il comando \label
            (5) Il comando \ref{pippo} si espande come ?? se \ref@pippo non è definito, nel caso contrario come \ref@pippo; analogo per \pageref{pippo}.

            È più chiaro adesso? Se LaTeX incontra \ref{xx} dopo \label{xx} sa a che cosa si riferisce e lo usa. Altrimenti stampa ??. Ma può avere incontrato \label{xx} durante la prima lettura del file .aux (già come definizione di \ref@xx), e si comporterà di conseguenza, ma usando il valore ottenuto nella compilazione precedente.

            Ciao
            Enrico

          • #5111
            Up
            0
            Down
            ::


            giusto per dire la mia, in caso di documenti complicati, con diversi tipi di \ref, pageref, \vref, \eqref, con riferimenti bibliografici, indici, acronimi, float e tutte le belle cose automatiche di latex puo’ capitare di dover ricompilare diverse volte prima di ottenere il risultato corretto. in generale comunque latex scriverà tutte le informazioni necessarie nel log.
            in certi casi addirittura, quando il docuemnto è totalmente dinamico, si creano delle incongruenze, vedi per esempio l’uso dell’opzione draft del pacchetto varioref.
            prova anche a dare un’occhiata ai pacchetti refcheck e showkeys
            ciao
            f

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

              Se LaTeX incontra \ref{xx} dopo \label{xx} sa a che cosa si riferisce e lo usa. Altrimenti stampa ??. Ma può avere incontrato \label{xx} durante la prima lettura del file .aux, e si comporterà di conseguenza, usando il valore ottenuto nella compilazione precedente.

              Puo’ capitare di dover ricompilare diverse volte prima di ottenere il risultato corretto.

              Beh… grazie di cuore ad entrambi! Il riassunto di tutta la questione è: usare \ref{xxx} prima di aver definito \label{xxx} si può, a patto di ricompilare un numero adeguato di volte.
              Lorenzo

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

          Go to top