%%% ====================================================================
%%%  @LaTeX-file{
%%%     filename        = "upref.dtx",
%%%     version         = "2.01",
%%%     date            = "2004/07/29",
%%%     time            = "16:37:01 EDT",
%%%     checksum        = "07926 151 617 5530",
%%%     author          = "American Mathematical Society",
%%%     copyright       = "Copyright 1996 American Mathematical Society,
%%%                        all rights reserved.  Copying of this file is
%%%                        authorized only if either:
%%%                        (1) you make absolutely no changes to your copy,
%%%                        including name; OR
%%%                        (2) if you do make changes, you first rename it
%%%                        to some other name.",
%%%     address         = "American Mathematical Society,
%%%                        Technical Support,
%%%                        Electronic Products and Services,
%%%                        P. O. Box 6248,
%%%                        Providence, RI 02940,
%%%                        USA",
%%%     telephone       = "401-455-4080 or (in the USA and Canada)
%%%                        800-321-4AMS (321-4267)",
%%%     FAX             = "401-331-3842",
%%%     email           = "tech-support@ams.org (Internet)",
%%%     codetable       = "ISO/ASCII",
%%%     keywords        = "latex, amslatex, ams-latex, cross references",
%%%     supported       = "yes",
%%%     abstract        = "This is a LaTeX package that provides printing
%%%                        of \cn{ref}s in an upright font even if the
%%%                        current context is italic or slanted.",
%%%     docstring       = "The checksum field above contains a CRC-16
%%%                        checksum as the first value, followed by the
%%%                        equivalent of the standard UNIX wc (word
%%%                        count) utility output of lines, words, and
%%%                        characters.  This is produced by Robert
%%%                        Solovay's checksum utility.",
%%%  }
%%% ====================================================================
%
%\iffalse
%<*driver>
\documentclass{amsdtx}
\begin{document}
\title{The \pkg{upref} package}
\author{American Mathematical Society\\ Michael Downes\\
  updated by Barbara Beeton}
\date{Version \fileversion, \filedate}
\hDocInput{upref.dtx}
\end{document}
%</driver>
%\fi
%
% \maketitle
%
% \MakeShortVerb\|
%
% \section{Introduction}
%
%    This package changes the \cn{ref} command so that it never applies
%    a slanted font shape to its argument, regardless of context. This
%    was the default behavior in \cls{amsart} version 1.1. Starting with
%    \cls{amsart} version 1.2, upright references must be obtained via
%    |\usepackage{upref}|.
%
% \StopEventually{}
%
% \section{Implementation}
%    Give package name, date, version.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\ProvidesPackage{upref}[2004/07/29 v2.01]
%    \end{macrocode}
%
%  \begin{macro}{\@noref}
%    Give a warning if a cited reference isn't defined.
%    \begin{macrocode}
\newcommand{\@noref}[1]{%
  \G@refundefinedtrue
  \nfss@text{\reset@font\bfseries ??}%
  \@latex@warning{Reference `#1' on page \thepage\space undefined}%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@setref}
%    If the current fontshape is italic or slanted, we want to switch to
%    upright/roman for printing the number of a \cn{ref}. This requires
%    changing the \cs{@setref} command.
%
%    Since \cs{@setref} is modified by the \pkg{hyperref} package, delay
%    the definition until \cs{AtBeginDocument}.  Then check whether
%    \pkg{hyperref} is loaded.  If it is, we have to redefine some
%    control sequences that \pkg{hyperref} defined in order to get
%    upright references even in a \pkg{hyperref} environment.
%    [tjk,bnb, 2004/07/29]
%    \begin{macrocode}
\AtBeginDocument{%
  \@ifpackageloaded{hyperref}{%
%    \end{macrocode}
%    We overload \cs{Hy@setref@link} as this is where the upright
%    references get clobbered.  Used in overloaded \cs{@setref}.
%    \begin{macrocode}
    \def\Hy@setref@link#1#2#3#4#5#6\@nil#7{%
      \begingroup
      \toks0{\hyper@@link{#5}{#4}}%
      \toks1\@xp{#7{\textup{#1}\hbox{}}{#2}{#3}{#4}{#5}}%
      \edef\x{\endgroup\the\toks0{\the\toks1}}\x
    }%
%    \end{macrocode}
%    We should not have to overload \cs{@setref}, but there is
%    a chance that an author is using an old version of hyperref
%    which does not use \cs{Hy@setref@link} in \cs{@setref}.
%    \begin{macrocode}
    \def\@setref#1#2#3{%
      \ifx#1\relax
        \@xp\protect\@noref{#3}%
      \else
        \@xp\Hy@setref@link#1\@empty\@empty\@nil{#2}%
      \fi
    }%
  }{%
    \def\@setref#1#2#3{\ifx#1\relax
        \protect\@noref{#3}%
      \else
        \protect\textup{\@xp#2#1\hbox{}}%
      \fi
    }%
  }%
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@upn}
%    The function \cs{\@upn} is used to force theorem numbers and
%    similar elements to be upright in sloped or italic contexts.
%    If a suitable italic font with upright numbers and punctuation is
%    available, this function should be redefined to be a no-op.
%    \begin{macrocode}
\providecommand\@upn{\textup}
%    \end{macrocode}
%  \end{macro}
%
%    The usual \cs{endinput} to ensure that random garbage at the end of
%    the file doesn't get copied by \fn{docstrip}.
%    \begin{macrocode}
\endinput
%    \end{macrocode}
%
% \CheckSum{61}
% \Finale
