\ifx\hyperref\@@undefined #1{#2}~\ref{#3}%
\else \hyperref[#3]{#1{#2}~\ref*{#3}}\fi%
}
+\def\xref@fallback#1{\formatxref\relax{?\texttt{#1}}{#1}}
% \end{macrocode}
% \end{macro}
%
\def\@tempa{#2}\def\@tempb{#3}%
\ifx\@tempb\q@delim%
\PackageError{xref}{Bad ref syntax}%
+ {A reference name doesn't contain a `:'-delimited prefix. Did you %
+ mean to use plain \string\ref here?}%
+ \xref@fallback{#2}%
\else%
\expandafter\let\expandafter\@tempa\csname xref$#2\endcsname%
\ifx\@tempa\relax%
\PackageError{xref}{Unknown ref kind `#2'}%
+ {The ref name's prefix `#2' is unknown: either it's been mistyped %
+ or there's a missing \string\defxref somewhere.}%
+ \xref@fallback{#2:#3}%
\else%
\toks@\expandafter{\@tempa}%
\edef\next@##1{##1{\the\toks@}}%