We often want something like ‘`See Theorem~31`’. But by-hand typing
the 31 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 enhances LaTeX’s
cross referencing features. 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.”