X-Git-Url: https://git.distorted.org.uk/~mdw/mdwtools/blobdiff_plain/74754fa285f4e6481391a738eeeaa60bbeec1e23..ae8b308b845cb0f6ed748ceac7f9c49964788abf:/mdwref.dtx

diff --git a/mdwref.dtx b/mdwref.dtx
index d7d24e0..0075487 100644
--- a/mdwref.dtx
+++ b/mdwref.dtx
@@ -110,6 +110,26 @@
 % the string to be typeset by |\xref|.  Such references are typeset using
 % |\formatxref|, described below.
 %
+% For references that don't fit into this pattern, there's a more complex
+% definition syntax using |\defxref*|:
+% \begin{grammar}
+% <definition> ::= \[[
+% "\\defxref*"
+% "{" <prefix> "}"
+% "{" <expansion> "}"
+% \]]
+% \end{grammar}
+% The \<expansion> is given four arguments.
+% \begin{itemize}
+% \item |#1| is the name of a macro which should be given two arguments,
+%   respectively the reference name and the body of the hyperlink to
+%   generate.
+% \item |#2| is the name of a macro to apply to the reference name to typeset
+%   the actual reference.
+% \item |#3| is the \<mangle> token, or |\relax|.
+% \item |#4| is the reference name itself.
+% \end{itemize}
+%
 % \DescribeMacro\formatxref
 % Simple references are typeset by calling
 % \syntax{"\\formatxref{"<mangle>"}{"<string>"}{"<label>"}"}, which can do as
@@ -137,7 +157,7 @@
 %     \texttt{cor}      & corollary $n$                                 \\
 %     \texttt{fig}      & figure $n$                                    \\
 %     \texttt{tab}      & table $n$                                     \\
-%     \texttt{eq}       & equation $n$                                  \\
+%     \texttt{eq}       & ($n$)                                         \\
 %     \texttt{i}        & item $n$                                      \\
 %     \texttt{ex}       & exercise $n$                                  \\
 %   \hlx*{vh}\end{tabular}
@@ -162,8 +182,14 @@
 % called \syntax{"\\xref$"<prefix>}, which takes two arguments: a \<mangle>
 % token (or |\relax|), and the reference name.
 %    \begin{macrocode}
-\def\defxref#1#2{%
+\def\defxref{\@ifstar\defxref@raw\defxref@cooked}
+\def\defxref@cooked#1#2%
   {\expandafter\def\csname xref$#1\endcsname##1##2{\formatxref{##1}{#2}{##2}}}
+\def\defxref@raw#1#2{%
+  \expandafter\edef\csname xref$#1\endcsname
+    {\noexpand\xrefdispatch\expandafter\noexpand\csname xref$$#1\endcsname}%
+  \expandafter\def\csname xref$$#1\endcsname##1##2##3##4{#2}%
+}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -252,7 +278,7 @@
 \defxref{cor}{corollary}
 \defxref{fig}{figure}
 \defxref{tab}{table}
-\defxref{eq}{equation}
+\defxref*{eq}{#1{#4}{(#2{#4})}}
 \defxref{i}{item}
 \defxref{ex}{exercise}
 %    \end{macrocode}
