We often want something like ‘See Theorem~31’. But typing the 31
by hand is poor practice. Instead you should write a label such
as \label{eq:GreensThm} and then reference it, as with
See equation~\ref{eq:GreensThm}. LaTeX will automatically
work out the number, put it into the output, and will change that
number later if needed.
We will see this with Theorem~\ref{th:GreensThm}. % forward reference
...
\begin{theorem} \label{th:GreensThm}
...
\end{theorem}
...
See Theorem~\ref{th:GreensThm} on page~\pageref{th:GreensThm}.
LaTeX tracks cross reference information in a file having the
extension .aux and with the same base name as the file containing
the \label. So if \label is in calculus.tex then
the information is in calculus.aux. LaTeX puts the
information in that file every time it runs across a \label.
The behavior described in the prior paragraph results in a quirk that
happens when your document has a forward reference, a \ref
that appears before the associated \label. If this is the first
time that you are compiling the document then you will get ‘LaTeX
Warning: Label(s) may have changed. Rerun to get cross references right’
and in the output the forward reference will appear as two question
marks ‘??’, in boldface. A similar thing happens if you
change some things so the references changes; you get the same warning
and the output contains the old reference information. In both cases,
resolve this by compiling the document a second time.
The cleveref package, among others, enhances LaTeX’s
cross referencing features (https://ctan.org/pkg/cleveref). You
can arrange that if you enter \begin{thm}
\label{th:Nerode}...\end{thm} then \cref{th:Nerode} will
output ‘Theorem 3.21’, without you having to enter the
“Theorem”. LaTeX’s own \labelformat command also makes
this possible, though cleveref has a variety of additional
features.