<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doi}[2007/07/24 handle doi numbers]

%% This style file is based original code written by Heiko Oberdiek 
%% and published on comp.text.tex. It was packaged with permission  
%% as a style file by Maarten Sneep, with some minor changes suggested 
%% by Bruno Voisin to accomodate the Apple pdf framework
%%
%% This code is placed under the LPPL.
%%
%% Original discussion on Google under:
%% http://groups.google.com/group/comp.text.tex/msg/922919daa207d613
%%
%% You can hyperlink DOI numbers to dx.doi.org. Some publishers have elected to 
%% use some nasty characters in their doi numbering scheme (&lt;, &gt;, ; have all 
%% been spotted). This will either upset (La)TeX, or your pdf reader. This style 
%% file contains a user-level command \doi{}, which takes a doi number, 
%% and creates a hyperlink from it. The format of the doi can be controlled by 
%% redefining the \doitext command, which does not take an argument (unlike the
%% command with the same name in the doipubmed package). 
%%
%% Note: the \doi{} command connot be used within other macros.
 
%% Change history:
%% December 15, 2003: original code posted on Usenet (see link above)
%% Somewhere in 2005: Bruno Voisin suggests some changes to accomodate the 
%%     Apple pdf framework on the Tex on Mac OS X mailing list.
%% April 2007: Maarten packages the lot, and Karl Ove Hufthammer fixes a 
%%     few bugs introduced by Maarten (oops).
%%     A \doitext command is added, following the example from doipubmed.
%%     Some comments are added to make the code a little more readable.
%% July 2007: Michael Orlov sends in a patch to correctly handle underscores.

%% We need hyperref, but you probably want to load hyperref 
%% beforehand, or set some options later on.
\RequirePackage{hyperref}

%% to change the default prefix, redefine this command within your own code.
%% It takes no argument, which is different from the doipubmed package.
\newcommand{\doitext}{doi:}

%% the meat of the code
%% the first command opens a group, and changes a few catcodes.
\newcommand*{\doi}{% 
  \begingroup 
  \lccode`\~=`\#\relax 
  \lowercase{\def~{\#}}%
  \lccode`\~=`\_\relax
  \lowercase{\def~{\_}}%
  \lccode`\~=`\&lt;\relax 
  \lowercase{\def~{\textless}}%
  \lccode`\~=`\&gt;\relax 
  \lowercase{\def~{\textgreater}}%
  \lccode`\~=0\relax 
  \catcode`\#=\active 
  \catcode`\_=\active 
  \catcode`\&lt;=\active 
  \catcode`\&gt;=\active 
  \@doi
}

%% this is the actual command which processes the argument, with the catcodes 
%% set in the previous command
%% it closes the group, and spits out the url.
\def\@doi#1{% 
  \let\#\relax
  \let\_\relax
  \let\textless\relax 
  \let\textgreater\relax 
  \edef\x{\toks0={{#1}}}% 
  \x
  \edef\#{\@percentchar23}%
  \edef\_{_}%
  \edef\textless{\@percentchar3C}% instead of {\string&lt;} for Apple
  \edef\textgreater{\@percentchar3E}% instead of {\sting&gt;} for Apple
  \edef\x{\toks1={\noexpand\href{http://dx.doi.org/#1}}}% 
  \x
  \edef\x{\endgroup\doitext\the\toks1 \the\toks0}%
  \x
}

%% that's all folks.
\endinput
</pre></body></html>