\documentclass[11pt]{article}
\usepackage{refcheck}
\textwidth=360pt
\begin{document}
\baselineskip=4.5mm
\textheight=40\baselineskip
\pagestyle{myheadings}

\parindent=1em\parskip=0.75ex
\makeatletter

\thispagestyle{empty}

\enlargethispage{-8mm}

\def\RefCheck{\textsl{Refcheck\/}}
\def\AmS{\mbox{$\mathcal{A}$\kern-0.17em\raise-2.1pt\hbox{$\mathcal{M}$}%
\kern-0.115em$\mathcal{S}$}}
\renewcommand{\refname}{{\normalsize References}}
\def\curversion{1.9.2}
\def\curvertime{2025/06/20}

\section*{\RefCheck{\tiny${}^{\mathrm{\ \ ver.
\curversion}}_{\mathrm{\curvertime}}$} for \LaTeXe}
\markboth{\hfill\bfseries\RefCheck\ for \LaTeXe\hfill}%
{\hfill\bfseries\RefCheck\ for \LaTeXe\hfill}
This short demo file describes usage of \RefCheck\ package
with \LaTeXe. The package looks for useless labels,
unlabelled equations, unused bibliography references
and puts `keys' of labels on margins.

To start checking, one should just write
\begin{verbatim}
     \documentclass{article}
     \usepackage{refcheck}
\end{verbatim}
at the beginning of document and compile the file twice.
Then, comments on references could be found in \texttt{.log} file and
in the margins.

Consider the set of equations
\begin{eqnarray}
&&a=b\label{eq.1}\\
&&b=c\label{eq.2}\\
&&c=d,
\end{eqnarray}
written as
\begin{verbatim}
     \begin{eqnarray}
     &&a=b\label{eq.1}\\
     &&b=c\label{eq.2}\\
     &&c=d,
     \end{eqnarray}
\end{verbatim}
Then the \texttt{.log} file will contains the following messages:
{\small
\begin{verbatim}
 Package refcheck Warning: Unused label `eq.2' on input line 44.
 Package refcheck Warning: Unlabelled equation (3) on input line 46.
\end{verbatim}
}
\noindent
because the equation (\ref{eq.1}) is
referenced here by \verb#(\ref{eq.1})#, the label {\tt eq.2} of the second
equation is not used and the last equation is numbered but it is not
labelled.

Keys of labels are written in the marginal notes when the option
\textit{showrefs\/} (default) or the command \verb#\showrefnames# are
invoked. This regime can be set off by the option \textit{norefs} or (at
any point of text) by the command \verb#\norefnames#.

These marks include some information on labels.  Namely, useless
labels are underlined and bounded by `\texttt{?}', the mark `\unl@bld@mark'
means that the equation is unlabelled.  Marks are framed for
the labels which are used in text.

\newpage

The package is working in the same way with bibliography.
Consider the following short list of books:

\vspace{-1\baselineskip}

\begin{thebibliography}{9}
 \bibitem{book1}A book.
 \bibitem{book2}Another book.
 \bibitem{book3}Third book.
\end{thebibliography}
defined as follows
\begin{verbatim}
     \begin{thebibliography}{9}
     \bibitem{book1}A book.
     \bibitem{book2}Another book.
     \bibitem{book3}Third book.
     \end{thebibliography}
\end{verbatim}
Further, we use the labels of \cite{book1,book2} with the
command \verb#\cite{book1,book2}# and do not use the label
`book3'. Then, the \texttt{.log} file will contain the following message
{\small
\begin{verbatim}
 Package refcheck Warning: Unused bibitem `book3' on input line 88.
\end{verbatim}}

Commands \verb#\showcitenames# and \verb#\nocitenames# for
bibliography are analogous to the commands \verb#\showrefnames# and
\verb#\norefnames#.  They set on and off \RefCheck\ to write keys of
bibitems to output.  The same function is for the options
\textit{showcites\/} (default) and \textit{nocites}.

Options \textit{msgs\/} (default) and \textit{nomsgs\/} state whether
\RefCheck\ writes its messages to \texttt{.log} file or not.

The check of unlabelled equations can be switched off by the option
\mbox{\textit{ignoreunlbld\/}} and on (default) by the option
\textit{chkunlbld\/}.

\medskip

\RefCheck\ generally works with \AmS-\LaTeX\ and \textbf{hyperref},
but the packages must be loaded \underline{before} the \RefCheck\ package.

\medskip

\RefCheck\ can be used with the \textbf{xr} package. Suppose one invokes\\
\verb#\usepackage{xr}# \verb#\externaldocument[A:]{apps}#\\ in document foo1.tex and\\
\verb#\usepackage{xr}# \verb#\externaldocument[B:]{apps}#\\ in document foo2.tex.
Then the commands \verb#\refcheckxrdoc[A:]{foo1}# and \verb#\refcheckxrdoc[B:]{foo2}#
used in apps.tex allows to check usage of labels from apps.tex in the
external files foo1.tex and foo2.tex.

\medskip

Note the problem with implicitly cited labels.  For
example, if there is a set of equations which are labelled with
$\,$\texttt{a1,a2,...an}$\,$ and referred in document by
\verb#(\ref{a1})--(\ref{an})#, then the labels
$\,$\texttt{a2,a3,...an-1}$\,$ cannot be recognized as `used'.

\medskip
\bigskip

\textbf{Summary of options and commands:}
\medskip

\noindent
\verb#\refcheckxrdoc[prefix]{foo}# to check usage of labels
of the current document in the file foo.tex where they are used
via \verb#\usepackage{xr}# and
\verb#\externaldocument[prefix]{thisdocument}#

\medskip

\begin{raggedright}
\begin{tabular}{|l|l|c|l|}
\hline
Option & Command & Switch & Function\\
\hline
showrefs$^{*}$ & \verb#\showrefnames# & on & to put keys of labels\\
\cline{1-3}
norefs & \verb#\norefnames# & off & in the marginal notes\\
\hline
showcites$^{*}$ & \verb#\showcitenames# & on & to put bibitem keys\\
\cline{1-3}
nocites & \verb#\nocitenames# & off & in the marginal notes\\
\hline
msgs$^{*}$ & \verb#\setonmsgs# & on & to write \RefCheck's\\
\cline{1-3}
nomsgs & \verb#\setoffmsgs# & off & messages to \texttt{.log}\\
\hline
chkunlbld$^{*}$ & \verb#\checkunlbld# & on & to check unlabelled\\
\cline{1-3}
ignoreunlbld & \verb#\ignoreunlbld# & off & equations\\
\hline
\end{tabular}
\end{raggedright}
\par\noindent
\mbox{\qquad}$*$ default

\bigskip

\def\item{\noindent\mbox{\kern0.5em$\bullet$\kern0.5em}}

\textbf{Versions of \RefCheck, acknowledgments and bugs:}

\item
Versions \textbf{1.0--1.3} worked with \LaTeX2.09.  Many
thanks to Antonio Loria for his useful comments on those versions.
Version \textbf{1.2} of \RefCheck\ can be found in
\texttt{/tex-archive/obsolete/macros/latex209/contrib/} in CTAN.

\item
\textbf{1.4} was the first version of \RefCheck\ for \LaTeXe, it had a
few bugs in its functionality for \AmS-\LaTeXe's \verb#\eqref#,
\verb#\tag#, \verb#split# and \verb#multline#.  Many thanks to
Cornelius C. Noack and Mikhail Zotov for finding the problem.

\item
In the version~\textbf{1.5} the bugs were removed, but it was found
(thanks to Mikhail Zotov) that the version marks \AmS-\LaTeXe's
\verb#equation*# and \verb#gather*# as unlabelled.  The versions
\textbf{1.6} solved the problem.

\item The version \textbf{1.7} (optimized code of \textbf{1.6}) was
found by Adriano Pascoletti to work incorrectly in \verb#\caption# (more
generally, when \verb#\ref#, \verb#\pageref# occur in a material
processed to \verb#\write#, in particular, to be put into \texttt{.toc},
\texttt{.lot}, \texttt{.lof} files).

\item The version \textbf{1.8} was intended to solve the
problem. Besides, some more work was done to provide compatibility with
\AmS-\LaTeX\ and \textbf{hyperref}.

\item The version \textbf{1.9} added possibility to check usage of labels in external
files. More compatibility with \textbf{cite} package was achieved.

\item The minor version \textbf{1.9.1} was intended to fix the bug discussed
at \\
{\small\texttt{http://tex.stackexchange.com/questions/88046/problem-with-refcheck}}.\\
Besides, the format of refcheck warnings was changed.

\item The minor version \textbf{\curversion} ensures compatibility with the latest versions
of \AmS-\LaTeX. Many thanks to Andrea Crisanti for providing information about the problem, 
which notably manifested as duplicate labels in subsequent unlabelled equations.

\bigskip

\textbf{New options and commands:}

\item
Version \textbf{1.5}: \textit{msgs\/} and \textit{nomsgs\/}.

\item
Version \textbf{1.6}: \textit{ignoreunlbld\/} and
\textit{chkunlbld\/} (suggested by Miroslav Fikar).

\item
Version \textbf{1.9}: \verb#\refcheckxrdoc#.

\end{document}
