Ho recuperato questo codice scritto una ventina di anni fa:
`
\newenvironment{Soluzioni}{\cleardoublepage
\pagestyle{myheadings}\chapter{Soluzioni}
\markboth{Soluzioni}{Soluzioni}\linespread{.95}\small
\def\soluzione##1{\subsubsection*{Esercizio \ref{##1}}}
}{\par\clearpage}
`
Mi serviva per raccogliere le soluzioni di tutti gli esercizi del libro di testo che avevo scritto alla fine dei vari capitoli, in modo che le soluzioni non fossero proprio due pagine dopo, altrimenti la tentazione di leggere le soluzioni sarebbe stata troppo forte (In realtà la tentazione non era affatto diminuita mettendo il capitolo delle soluzioni fra le appendici).
Quini l’idea era di farne un capitolo/appendice a se stante. Perché un environment? perché cosi tutte le definizioni all’interno restano locali, compreso il comando \soluzione che serve per dare un titolino al paragrafo che contiene la soluzione; e come vedi questo titolino contiene proprio \ref e l’argomento del comando \soluzione è proprio l’etichetta dell’esercizio di cui si propone la soluzione.
Anche gli esercizi erano contenuti in un environment che cambiava anche la numerazione delle figure e delle tabelle per non confonderle con la numerazione degli analoghi oggetti contenuti nel capitolo. Quindi un capitolo poteva essere formato così:
\chapter{Titolo}
…
\section{…}
…
\begin{Esercizi}
\esercizio{…}\label{es:primo}
…
\esercizio{…}\label{es:secondo}
…
\end{Esercizi}
e la parte delle soluzioni sarebbe stata:
\begin{Soluzioni}
…
\soluzione{es:primo}
…
\soluzione{es:secondo}
…
\end{Soluzioni}
A quei tempi amsmath non esisteva ancora e si lavorava ancora con LaTeX209, quindi oggi le stesse cose si possono fare in modo più elegante ed efficiente.
La risposta alla tua domanda è un’altra domanda: Perché \vref{…} non dovrebbe funzionare?