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
(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