%
%
\ifcat a\noexpand @\let\next\relax\else \def\next{%
\documentclass{kluwer}\usepackage{doc}\MakePercentIgnore}\fi\next
\NeedsTeXFormat{LaTeX2e}
\def\filename{kluref.sty}
\def\filedate{1998/03/17}
%\DoNotIndex{\@M,\def,\c@secnumdepth,\baselineskip,\@pnumwidth,\else,\fi}
%\DoNotIndex{\newcommand,\z@,\relax,\renewcommand,\ifnum,\csname,\endcsname}
%\DoNotIndex{\baselineskip,\vskip,\hskip,\relax,\secdef,\refstepcounter}
%\DoNotIndex{\normalsize,\numberline,\protect,\endinput}
%\changes{1998/03/17}{TH: Fixed optional argument to cite for numreferences}
%\changes{1997/02/18}{TH: Toggled lines for cite definition and citation write (3x)}
%\CodelineIndex
%\newcommand{\Bs}{}
%\parindent=0pt
%\parskip=3pt
%\hfuzz=10pt
%\addtolength{\textwidth}{4pc}
%\MakeShortVerb{\|}  
%\begin{document}
%\begin{article}
%\begin{opening}
%\title{\filename}
%\date{\filedate}
%\author{Kluwer Academic Publishers\surname{}}
%\institute{~}
%\begin{abstract}
%This internal stylefile provides commands for references. Options are
%|openbib|, |numreferences| and |namedreferences|. This documentation
%is compiled on |kluwer.cls| to give some examples.
%\end{abstract}
%\end{opening}
%\tableofcontents
%\newpage
%\section{Interface}
% This file provides |namedreferences| and |numreferences| options
% for the stylefiles. |namedreferences| use the syntax that is
% explained in the |named.sty| package, but will be repeated
% below. |numreferences| we wrote ourselves, the major difference with
% standard \LaTeX\ iss that the brackets in the `references' section
% have turned into a dot.  
% \subsection{Named references} 
% This presumes that the reference list you use is sorted
% alphabetically. The general chape of the references section is this:
% 
% \begin{verbatim}
% \begin{thebibliography}{}
% \bibitem[\protect\citeauthoryear{author's name}{year}]{key} 
% \end{verbatim}
% In a `real' example this is what it looks like: 
% \begin{verbatim}
% \begin{thebibliography}{}
%\bibitem[\protect\citeauthoryear{Bisogni~Jr and Arroyo}{1991}]{BJA91}
%J.J. Bisogni~Jr and S.L. Arroyo.
%\newblock The effect of carbon dioxide equilibrium on p{H} in dilute lakes.
%\newblock {\em Water Research}, 25(2):185--190, 1991.
% \end{verbatim}
% This entry was generated by \BibTeX, using the file |named.bst|
% to do the formatting and sorting. This method of generating
% references is highly recommended, because it tends to prevent
% errors. (The |\protect| is only needed if the output is in an
% external file, like the |.bbl| file.) Until we have a `private'
% |.bst| file, |named.bst| is the best option.
%
% Allthough keying this sort of thing in is quite tedious, It also has
% some advantages: this allows you to use some `special' |\cite|
% commands that are normally not available. The following shows what
% the respective commands output on the previous example:
%
% \begin{tabular}{ll} \hline
%Call:                &Produces:\\ \hline
%|\cite{BJA91}|       &\cite{BJA91}\\
%|\cite*{BJA91}|      &\cite*{BJA91}\\
%|\shortcite{BJA91}|  &\shortcite{BJA91}\\
%|\citeyear{BJA91}|   &\citeyear{BJA91}\\
%|\inlinecite{BJA91}| &\inlinecite{BJA91}\\
%|\opencite{BJA91}|   &\opencite{BJA91}
%\end{tabular}
%\section{Implementation}
% From the options follows that the default value is
% |namedreferences|.                           
% 
%    \begin{macrocode}
\ProvidesPackage{kluref}[\filedate ]
\newif\if@numreferences 
\DeclareOption{namedreferences}{\@numreferencesfalse}
\DeclareOption{numreferences}{\@numreferencestrue}
%    \end{macrocode}
%
% openbib is ignored (for now ?). 
%
%    \begin{macrocode}
\DeclareOption{openbib}{}
\ExecuteOptions{namedreferences}
\ProcessOptions*
%    \end{macrocode}
% 
%
% |\sectioncmd| is either |\section| or |\chapter|, depending on the used
% major stylefile. Same goes for |\Uppercase|, with regard to pagestyles.
%
%
%    \begin{macrocode}
\newenvironment{thebibliography}[1]{%
  \sectioncmd*{\refname}\imarkboth{\bibname}{\bibname}%
  \footnotesize
  \message{\refname}
  \def\bibwidthlabel{\releft#1\reright}%
%    \end{macrocode}
%  |\releft| and |\reright| are usually empty, but they can be defined
%  to contain brackets, for instance. This is only useful using
%  |numreferences|.
%
% The list and counter are defined below. They vary for the different
% options. 
%    \begin{macrocode}
  \list{\kapbib@counter}{\kapbib@list}
  \let\makelabel\@biblabel
  \def\newblock{\hskip .11em plus .33em minus .07em}%
  \sloppy
  \clubpenalty10000
  \widowpenalty10000
  \sfcode`\.=1000\relax
  }{\endlist}
%    \end{macrocode}
% 
% \subsection{Some utilities} 
%
% |\refname| and |\bibname| are not |\providecommand|'s to allow for 
% already existing definitions, because  we do need to be absolutely
% sure we are in control. That's why they are inside 
% |\AtBeginDocument|, to circumvent the |babel| package.
%
% I should ask for french/german names, though.
%
%    \begin{macrocode}
\AtBeginDocument{%
  \def\refname{References}%
  \def\bibname{References}}
%    \end{macrocode}
% 
% 
%
% |\releft| and |\reright| are around the text inside the optional
% argument to |\bibitem|. Together with |\redot|, this allows the 
% following hack: 
%
%\begin{verbatim}
%\documentclass[numreferences]{kluwer}
%\renewcommand{\releft}{[}
%\renewcommand{\reright}{]}
%\renewcommand{\redot}{}
%\begin{document}
%......
%\begin{thebibliography}{abs}
%\bibitem[abs]{key}...
%\end{verbatim}
%... and the references will look identical to \LaTeX\ Article 
% `namedreferences', except for size. Note that this will only work
% using numreferences.
%
% |\coleft| and |\ccright| are the same sort of thing, they allow you
% to change the braces around |\cite| commands into something else.
% 
% This is a hook for klups.sty (oldstyle numerals)
%    \begin{macrocode}                           
\def\i@oldseries{}
%    \end{macrocode}
%    \begin{macrocode}
\newlength{\bibhang}
\setlength{\bibhang}{14pt}
\newcommand{\redot}{.}
\newcommand{\releft}{}
\newcommand{\reright}{}
\newcommand{\coleft}{(}
\newcommand{\ccright}{)}
\let\oldcite\cite 
%    \end{macrocode}
% \newpage\subsection{Numbered references}
%    \begin{macrocode}
\def\numreferences{%
  \typeout{KAP -- Numbered references}%
  \def\kapbib@counter{\arabic{enumiv}}%
  \def\labelsepwidth{1em}%
  \def\kapbib@list{%
    \setlength{\labelsep}{\labelsepwidth}%
    \settowidth{\labelwidth}{\@biblabel{\bibwidthlabel}}%
    \setlength{\leftmargin}{\labelwidth}%
    \addtolength{\leftmargin}{\labelsep}%
    \setlength{\itemindent}{0pt}%
    \setlength{\itemsep}{0pt}%
    \setlength{\parsep}{0pt}%
    \usecounter{enumiv}%
    \let\makelabel\kap@biblabel}%
%    \end{macrocode}
%  This makes flush right labels
%    \begin{macrocode}
  \def\@biblabel##1{\hfill\releft##1\redot\reright}%
%    \end{macrocode}
% |\@bibitem| writes out either |\bibcite{key}{number}| or
% |\bibcite{number}{number}| in case there is no key given. This
% allows |\cite{2}| without a key.
%    \begin{macrocode}
  \def\@bibitem##1{\item               
    \def\@tempa{##1}%
    \ifx\@tempa\empty
      \if@filesw
      \immediate\write\@auxout 
      {\string\bibcite{\thearticle \the\value{\@listctr}}%
                        {\the\value{\@listctr}}}%
      \fi
    \else
      \if@filesw
      \immediate\write\@auxout 
      {\string\bibcite{\thearticle ##1}{\the\value{\@listctr}}}%
      \fi
    \fi 
    \ignorespaces
    }%
%    \end{macrocode}
% |\@lbibitem| handles the optional argument version. 
%
% If no key
% is given, we presume numbered references are really wanted. (It would
% be a bit strange to have entries like |\bibitem[A95]{}| and
% to reference using a counter as in |\cite{1}|). 
%                                     
%    \begin{macrocode}
  \def\@lbibitem[##1]##2{%
    \def\@biblabel####1{####1}%
    \let\makelabel\@biblabel
    \def\@tempa{##2}%
    \ifx\@tempa\empty          
      \item[\@biblabel{\hfill\releft 
          \arabic{\@listctr}\redot\reright}]%
      \if@filesw
        {\def\protect####1{\string ####1\space}\immediate
        \write\@auxout{\string\bibcite{\thearticle \the\value{\@listctr}}%
        {\the\value{\@listctr}}}}%
      \fi
%    \end{macrocode}
% Otherwise, typeset the argument and write out both argument and key
% to the |.aux| file.
%    \begin{macrocode}
    \else
      \item[\@biblabel{\hfill\releft ##1\redot\reright}]%
      \if@filesw 
        {\def\protect####1{\string ####1\space}\immediate
        \write\@auxout{\string\bibcite{\thearticle ##2}{##1}}}%
      \fi  
    \fi  
    \ignorespaces
    }%
%    \end{macrocode}
% Now allow some |namedreferences| commands to a least mean something.
%    \begin{macrocode}
  \let\@internalcite\oldcite
  \let\shortcite\@internalcite
  \let\citeauthor\@internalcite
  \let\citeyear\@internalcite
  \let\inlinecite\@internalcite
  \let\opencite\@internalcite
  \let\cite\@internalcite
  \def\citeauthoryear##1##2{}%
%    \end{macrocode}
% To end: relatively standard definition of |\@citex|. 
%    \begin{macrocode}
\def\@citex[##1]##2{%                        
  \let\@citea\@empty
  \@cite{\@for\@citeb:=##2\do
    {\@citea\def\@citea{,\penalty\@m\ }%
     \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
     \edef\gl@citeb{\expandafter\@firstofone\@citeb}%
     \edef\@citeb{\thearticle\expandafter\@firstofone\@citeb}%
     \@ifundefined{b@\@citeb}{%
        \@ifundefined{b@\gl@citeb}{%
            \mbox{\reset@font\bfseries ?}%
            \G@refundefinedtrue
            \@latex@warning
            {Citation `\@citeb' on page \thepage \space undefined}}%
            {\hbox{\csname b@\gl@citeb\endcsname}}}%
         {\hbox{\csname b@\@citeb\endcsname}}%
       }}{##1}}
}
%    \end{macrocode}
%\newpage \subsection{Named references}
%    \begin{macrocode}                       
\def\namedreferences{%
  \typeout{KAP -- Named references}%
%    \end{macrocode}
% This (having no optional argument and/or key) 
% is typically one of those things that happen if you switch from
% |num| to |named|. Just write out something to indicate that there
% may be a problem.  
%
%    \begin{macrocode}
  \def\@bibitem##1{\item
    \def\@tempa{##1}%
    \ifx\@tempa\empty                              
      \if@filesw \immediate\write\@auxout{%
        \string\bibcite{\thearticle ??}{??}}\fi
    \else
      \if@filesw \immediate\write\@auxout{%
        \string\bibcite{\thearticle ##1}{??}}\fi
    \fi
    \ignorespaces
    }%
%    \end{macrocode}
% Not having a key probably indicates that the optional argument is
% also wrong, but hey, we can't do everything. At least now |\cite|
% is something useful if you can count very well...
%
% It is also possible
% that the optional argument is empty, but that is never a problem
% because it will not be typeset anyway (|\@biblabel| will gobble the 
% argument).  
%
% 21/3/1997 inserted increment of |\@listctr| to prevent multiply 
% defined labels.
%    \begin{macrocode}
  \def\@lbibitem[##1]##2{\item[\@biblabel{##1}\hfill]%
    \def\@tempa{##2}%   
    \stepcounter{\@listctr}%
    \ifx\@tempa\empty
      \if@filesw{\def\protect####1{\string ####1\space}\immediate
       \write\@auxout{\string\bibcite{\thearticle 
        \the\value\@listctr}{##1}}}\fi
    \else
      \if@filesw{\def\protect####1{\string ####1\space}\immediate
       \write\@auxout{\string\bibcite{\thearticle ##2}{##1}}}\fi
    \fi
    \ignorespaces
    }% 
\def\labelsepwidth{1em}%
%    \end{macrocode}
% Here is the list again. |\bibhang| allows control over the amount 
% of hanging indentation.
%    \begin{macrocode}
\def\kapbib@counter{\relax }%
  \def\kapbib@list{%
    \setlength{\labelsep}{0em}%
    \setlength{\labelwidth}{0pt}%
    \setlength{\itemindent}{-\bibhang}%
    \setlength{\itemsep}{0pt}%
    \setlength{\parsep}{0pt}%
    \usecounter{enumiv}%                        
    \setlength{\leftmargin}{\bibhang}%
    \i@oldseries
    }%
%    \end{macrocode}
% Gobble |\@biblabel|. Also, save meaning of |\cite| for later use.
%    \begin{macrocode}
  \def\@biblabel##1{}%
  \let\@internalcite\oldcite
%    \end{macrocode}
% Differences between these |\cite| commands can be seen above.
%    \begin{macrocode}
  \def\cite{\@ifstar{\citeyear}{\klu@cite}}%
                                                       
  \def\klu@cite{\def\@citeseppen{1000}%       
    \def\@cite####1####2{\coleft{####1\if@tempswa , ####2\fi}\ccright}%
    \def\citeauthoryear####1####2{{\rm\i@oldseries ####1, ####2}}\@internalcite }%

  \def\shortcite{\def\@citeseppen{1000}%
    \def\@cite####1####2{\coleft{####1\if@tempswa , ####2\fi}\ccright}%
    \def\citeauthoryear####1####2{{\rm\i@oldseries ####2}}\@internalcite }%

  \def\citeauthor##1{\def\@citeseppen{1000}%
    \def\@cite####1####2{{####1\if@tempswa , ####2\fi}}%
    \def\citeauthoryear####1####2{\rm ####1}\@citedata{##1}}%

  \def\citeyear##1{\def\@citeseppen{1000}%
    \def\@cite####1####2{{####1\if@tempswa , ####2\fi}}%
    \def\citeauthoryear####1####2{{\rm\i@oldseries ####2}}\@citedata{##1}}%
                                                       
  \def\opencite##1{\citeauthor{##1}, \citeyear{##1}}%

  \def\inlinecite##1{\citeauthor{##1} (\citeyear{##1})}%
%    \end{macrocode}
% This is rather tricky stuff, these macros  come from |named.sty| and
% I remember that I understood them once, but not any more,
% apparantly. Checking this is left as an exersize to the reader.
%    \begin{macrocode}
\def\@citedata##1{%    
    \@tempswafalse%
  \let\@citea\@empty
  \@cite{\@for\@citeb:=##1\do
    {\@citea\def\@citea{,\penalty\@citeseppen\ }%
     \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
     \edef\gl@citeb{\expandafter\@firstofone\@citeb}%
     \edef\@citeb{\thearticle\expandafter\@firstofone\@citeb}%
     \@ifundefined{b@\@citeb}{%
        \@ifundefined{b@\gl@citeb}{%
            \mbox{\reset@font\bfseries ?}%
            \G@refundefinedtrue
            \@latex@warning
            {Citation `\@citeb' on page \thepage \space undefined}}%
            {\csname b@\gl@citeb\endcsname}}%
         {\csname b@\@citeb\endcsname}}}{}}
\def\@citex[##1]##2{%    
  \let\@citea\@empty
  \@cite{\@for\@citeb:=##2\do
    {\@citea\def\@citea{;\penalty\@citeseppen\ }%
     \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
     \edef\gl@citeb{\expandafter\@firstofone\@citeb}%
     \edef\@citeb{\thearticle\expandafter\@firstofone\@citeb}%
     \@ifundefined{b@\@citeb}{%
        \@ifundefined{b@\gl@citeb}{%
            \mbox{\reset@font\bfseries ?}%
            \G@refundefinedtrue
            \@latex@warning
            {Citation `\@citeb' on page \thepage \space undefined}}%
            {\csname b@\gl@citeb\endcsname}}%
         {\csname b@\@citeb\endcsname}}}{##1}}
%    \end{macrocode}
% Allow |\citeauthoryear| in |\write|       
%    \begin{macrocode}
\def\citeauthoryear##1##2{\string\citeauthoryear{##1}{##2}}}
%%%%%%%%%%%%%%%%%%%%%%%%%
\if@numreferences
    \numreferences
\else
    \namedreferences
\fi
\endinput
%    \end{macrocode}
%\begin{thebibliography}{}
%\bibitem[\citeauthoryear{Bisogni~Jr and Arroyo}{1991}]{BJA91}%
%J.J. Bisogni~Jr and S.L. Arroyo.
%\newblock The effect of carbon dioxide equilibrium on p{H} in dilute lakes.
%\newblock {\em Water Research}, 25(2):185--190, 1991.
%\end{thebibliography}
%\PrintIndex   
%\end{article}
%\end{document}
% end of kluref.sty




