]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/papers/matita/kluref.sty
ported to kluwer style
[helm.git] / helm / papers / matita / kluref.sty
diff --git a/helm/papers/matita/kluref.sty b/helm/papers/matita/kluref.sty
new file mode 100644 (file)
index 0000000..df49b6f
--- /dev/null
@@ -0,0 +1,441 @@
+%
+%
+\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
+
+
+
+