% \iffalse meta comment
% File: babelbib.dtx Copyright (C) 2003--2005 Harald Harders
% \fi
%
% \iffalse
%
%<*driver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage[ngerman,english]{babel}
%\usepackage{url}
\usepackage{array}
\usepackage{hyperref}
\IfFileExists{booktabs.sty}%
  {\usepackage{booktabs}}%
  {\let\toprule\hline
    \let\midrule\hline
    \let\bottomrule\hline}
\IfFileExists{babelbib.sty}{\usepackage{babelbib}
  \let\babelbibSTYfound\active}{\GenericWarning{babelbib.dtx}{Package
    file babelbib.sty not found (Documentation will be messed up!^^J^^A
    Generate babelbib.sty by LaTeXing babelbib.ins, process
    babelbib.dtx again)^^J}\stop}
\GetFileInfo{babelbib.sty}
\title{Multilingual bibliographies: The \texttt{babelbib} package}
\author{Harald Harders\\\texttt{h.harders@tu-bs.de}}
\date{Version \fileversion, \filedate, printed \today}
\newlength{\tempdima}%
\makeatletter
\renewenvironment{table}[1][]{%
  \@float{table}[#1]%
  \centering%
  \setlength{\tempdima}{\abovecaptionskip}%
  \setlength{\abovecaptionskip}{\belowcaptionskip}%
  \setlength{\belowcaptionskip}{\tempdima}%
  }{%
\end@float
}
\makeatother
\def\AmS{$\mathcal{A}$\kern-.1667em\lower.5ex\hbox
    {$\mathcal{M}$}\kern-.125em$\mathcal{S}$}
\EnableCrossrefs
\CodelineIndex
\DoNotIndex{\def,\edef,\let,\newcommand,\newenvironment,\newcounter}
\DoNotIndex{\setcounter,\space,\",\@empty,\begin,\end,\iffalse,\fi,\extras}
\DoNotIndex{\bibs,\ifx,\else,\fi,\ ,\ae,\emph,\input}
\CodelineNumbered
\RecordChanges
\CheckSum{7995}
\hyphenation{bib-lio-gra-phy}
\begin{document}
 \DocInput{babelbib.dtx}
\end{document}
%</driver>
% \fi
%
% \changes{0.1}{2003/04/11}{Total new version}%
% \changes{0.2}{2003/04/20}{Rewritten in main parts}%
% \changes{0.42}{2003/11/09}{Use unique version strings for all files
%   of the bundle}%
% \changes{0.42}{2003/11/09}{Reorganise docstrip code}%
% \changes{0.43}{2004/01/06}{Document the problem using
%   \texttt{frenchle.sty} when using \texttt{french} language with
%   some babel versions}%
% \changes{0.44}{2004/01/06}{Improved spacings in documentation}%
% \changes{0.44a}{2004/02/12}{Adapted Makefile for \TeX Live}%
% \changes{0.46}{2004/06/28}{Enable to switch off printout of language
%   name with \texttt{babamspl} style}%
% \changes{1.00}{2005/02/16}{Rewritten warning about \texttt{frenchle.sty}
%   package}%
% \changes{1.00}{2005/02/16}{Shorten version string}%
% \changes{1.00}{2005/02/16}{Added \texttt{urldate} to all \BibTeX\
%   styles}%
% \changes{1.01}{2005/04/11}{Added space after the \cs{btx}\ldots\
%   commands in the \texttt{bst} files to avoid line-breaking problem}%
% \changes{1.02}{2005/04/15}{Language Portuguese completed}%
% \changes{1.10}{2005/05/24}{Allow different ordering of forenames and
%   lastnames}%
% \changes{1.10}{2005/05/24}{Protect the \cs{foreignlanguage} calls
%   (avoids problems with natbib)}%
% \changes{1.11}{2005/06/12}{Avoid some additional line breaks in
%   author and editor names}%
% \changes{1.11}{2005/06/12}{Switch ISBN and ISSN in bibliographies on
%   and off (does not work for \AmS\ style)}%
% \changes{1.11}{2005/06/12}{Remove space after \cs{btxurlfont}
%   because a linebreak between \cs{url} and the argument breaks
%   \texttt{hyperref.sty} (which is a pity because this can lead to
%   line-break problems with long arguments)}%
% \changes{1.12}{2005/06/19}{Correct \cs{btxlanguagenameenglish},
%   \cs{btxmastthesis}, and \cs{btxmonaugshort} in
%   \texttt{french.bdf}}%
% \changes{1.13}{2005/06/27}{Apply corrections to and complete Italian
%   language}%
% \changes{1.14}{2005/07/11}{Complete and correct catalan}%
%
% \maketitle
% \begin{abstract}
% \noindent
% This package enables to generate multilingual bibliographies in
% cooperation with |babel|.
% Two approaches are possible:
% Each citation may be written in another language, or the whole
% bibliography can be typeset in a language chosen by the user.
% 
% In addition, the package supports commands to change the typography
% of the bibliographies.
% 
% The current version supports Afrikaans, Catalan, Danish, Dutch,
% English, Esperanto, Finnish, French,\footnote{Babelbib does not work
%   with \texttt{frenchle} prior V5,987. Please update the frenchle
%   package or use the native babel support for French, instead.}
% German, Italian, Norwegian, Portuguese, Spanish, and Swedish.
% Please help me to add more languages.
% 
% Many of the standard and extended bibliography styles are available.
% Please read section~\ref{sec:styles}.
%
% \textbf{If you have used version 0.1 of this package:
% The mechanism to change fonts have changed, please read
% section~\ref{sec:typography}.}
%
% Have a look to \texttt{tugboat-babelbib.pdf} which includes detailed
% descriptions how to use and extend the babelbib bundle.
% \end{abstract}
%
% \tableofcontents
%
% \section*{Copyright}
% Copyright 2003--2005 Harald Harders.
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or any later version.
%
% \section{Introduction}
%
% This package is a replacement for |bibgerm.sty| \cite{germbib} with the
% aim to be extendable to other languages more easily.
% In addition, |babelbib| provides a more flexible typography of
% bibliographies without the need to change |bst| files.
% But there are two shortcomings: This package needs
% |babel.sty|~\cite{babel} (thus, it does not work with |german.sty|
% or |ngerman.sty|), and it is written for \LaTeXe\ and does not work
% with plain \TeX.
%
% The current version supports Afrikaans, Danish, Dutch, English,
% Esperanto, Finnish, French,\footnote{Babelbib does not work with
% \texttt{frenchle} prior V5,987. Please update the frenchle package
% or use the native babel support for French, instead.}
% German, Italian, Norwegian, Portuguese, Spanish, and Swedish.
%
% If you have used version 0.1 of this package:
% The mechanism to change fonts have changed, please read
% section~\ref{sec:typography}.
%
% \section{Usage}%
% \label{sec:usage}%
%
% To use this package place
% \begin{verbatim}
%\usepackage{babelbib}\end{verbatim}
% into the preamble of your document.
% The package loads all necessary language definitions for all files
% it knows that are loaded by |babel|.
% 
% By default, the language of the bibliographic keywords (``editor'',
% ``page'', etc.) switches for each item to the language of the cited
% document.
% If all citations shall be written in the same language, add the
% option\index{fixlanguage=\texttt{fixlanguage}|usage} |fixlanguage|
% to the package call.
% Then, all bibliographies are typeset in the document's main
% language.
% To change the bibliography's language, use
% \DescribeMacro{\selectbiblanguage}
% |\selectbiblanguage{|$\langle$language$\rangle$|}|.
% This command only has an effect, if |fixlanguage| is set. 
%
% |babelbib| supports the \BibTeX\ styles |babplain|, |babplai3|,
% |babalpha|, |babunsrt|, |bababbrv|, and |bababbr3| that correspond
% to the standard |bst| files, but include international support as
% well as flexible typography.\footnote{The versions with the
%   \texttt{3} in the filenames replace the second and later authors by
%   \emph{et al.}, if more than three authors are given.}
% As usual, you select the style using
% \DescribeMacro{\bibliographystyle}
% |\bibliographystyle{|$\langle$filename$\rangle$|}|.
% In addition, the package supports the \BibTeX\ style |babamspl|
% which corresponds to |amsplain| by the \AmS. 
% \changes{0.2}{2003/04/20}{Added option \texttt{languagenames} to
%   define commands for language names}%
% \index{languagenames=\texttt{languagenames}|usage}%
% If you want to use this style, you have to add the option
% |languagenames| to the call of the package.
%
% \DescribeMacro{\declarebtxcommands}%
% If you don't like some of the keywords provided by |babelbib|, or if
% you want to use new ones, you are able to get these using the
% command \cs{declarebtxcommands}.
% It takes two arguments, where the first is the language for which
% you want to add or change keywords, and the second is the list of
% command definitions.
% It seems to be best to show that for an example. 
% You may want to change the definitions for Ph.D.\ theses for English
% and German with new orthography (the defaults are ``PhD thesis'' resp.\
% \foreignlanguage{ngerman}{"`Dissertation"'}).
% You can reach a change by the following code:
% \begin{verbatim}
%\declarebtxcommands{english}{%
%  \def\btxphdthesis#1{\protect\foreignlanguage{english}{Ph.D.\ thesis}}%
%}
%\declarebtxcommands{ngerman}{%
%  \def\btxphdthesis#1{\protect\foreignlanguage{ngerman}{Doktorarbeit}}%
%}\end{verbatim}
% You may change more than one command in one |\setbtxcommand|
% command.
% You just have to add more of the |\def|\ldots\ lines.
% But please don't forget the percent sign at the end of the lines in
% order to avoid unwanted spaces in the output.
% The \AmS\ \BibTeX\ style |amsplain| uses ``Ph.D.\ thesis'' instead
% of the default ``PhD thesis'' for |babamspl|.
% If you want the same keyword as in the \AmS\ original, you can use
% the |\declarebtxcommands| line shown above.
%
% \section{Preparing the \texttt{bib} files}
%
% In order to use the feature of multilingual bibliographies, add the
% field |language| to every entry in your |bib| files.
% This field gives the language of the cited document, e.\,g.
% \begin{verbatim}
%@InBook{dieter1997a,
%  editor =       {Dieter, George~E. and others},
%  title =        {Materials Selection and Design},
%  chapter =      {Effects of Composition, Processing, and Structure on 
%                  Properties of Engineering Plastics},
%  publisher =    {ASM International},
%  year =         1997,
%  volume =       20,
%  series =       {ASM Handbook},
%  pages =        {434--456},
%  language =     {english},
%  isbn =         {0-87170-386-6}
%}\end{verbatim}
% Then, the output of the document data (title, authors, series, etc.)
% is typeset with correct hyphenation patterns.
% Wheather also the keywords (``edition'', ``pages'', etc.) are
% switched to the citation language, depends on wheather |fixlanguage|
% has been used.
% All languages that appear in the bibliography have to be loaded by
% |babel|.
%
% \DescribeMacro{\setbtxfallbacklanguage}
% If the field |language| is missing, the citation is typeset using a
% fall-back language.
% By default, the document's main language (that one that is active at
% \cs{begin\{document\}}) is used.
% You can change the fall-back language by using
% \cs{setbtxfallbacklanguage\marg{language}}, e.\,g.,
% \begin{verbatim}
%\setbtxfallbacklanguage{ngerman}\end{verbatim}
%
% |babelbib| supports four additional fields:
% |ISBN|, |ISSN|, |URL|, and |URLDATE|.
% |ISBN| and |ISSN| take the ISBN or ISSN respectively.
% |URL| is the address of a WWW page while |URLDATE| is the date when
% the WWW page has been visited.
% The field |URL| is typeset using the command |\url| if available,
% e.\,g., if the user has loaded |url.sty|.
% Otherwise, |babelbib| defines a |\url| command which just calls
% |\texttt|.
%
% \DescribeMacro{\biblanguage}%
% If you want to use language-dependent commands as \cs{alsoname} in a
% bibliography that was produced with |fixlanguage| you will be
% surprised that the commands change the output depending on the
% language of the citation.
% If you want to write a field with the keyword language, you can use
% the command \cs{biblanguage}, e.g.,
% \begin{verbatim}
%@Article{abinger1988a,
%  author =      {Abinger, R. and Hammer, F. and Leopold, J. and others},
%  title =       {Gro"sschaden an einem 300"=MW"=Dampfturbosatz},
%  journal =     {Der Maschinenschaden},
%  year =        1988,
%  volume =      61,
%  number =      2,
%  pages =       {58--60},
%  language =    {ngerman},
%  note =        {\biblanguage{\alsoname~\cite{abinger1990a}}}
%}\end{verbatim}
% This will give the note ``\alsoname~[\ldots]'' instead of
% ``{\selectlanguage{ngerman}\alsoname~[\ldots]}'' when the
% bibliography uses English keywords.
%
%
% \section{Available bibliography styles}%
% \label{sec:styles}%
%
% The |babelbib| bundle contains adapted versions of the standard
% bibliography styles |plain|, |unsrt|, |abbrv|, and |alpha|.
% They are called |babplain|, |babunsrt|, |bababbrv|, and |babalpha|,
% respectively.
% All variants write names in a special manner when more than one
% author is given.
% The first author ist written ``Lastname, Forename'' while all other
% authors are written ``Forename Lastname''.
% This is done to emphesize the ordering by the lastname.
%
% If you don't want this behaviour you can use additional variants
% that use the same notation for all names.
% By appending |-fl| to the style name, e.\,g., |babalpha-fl|, all names
% are written ``Forename Lastname''.
% By appending |-lf|, e.\,g., |babalpha-lf|, all names are written
% ``Lastname, Forename''.
%
% The style |babamspl| is the |babelbib| equivalent to |amsplain|.
%
%
% \section{Customisation of the bibliography's typography}
% \label{sec:typography}%
%
% In constrast to the standard and |germbib| |bst| files, the
% appearance of the different data types is not fixed for |bab*.bst|.
% There are commands for some data fields that determine the used
% font.
%
% \DescribeMacro{\setbibliographyfont}%
% You can change some font specifications in the bibliography using
% the command
% \cs{setbibliographyfont\{\textrm{\meta{element}}\}\{\textrm{\meta{font command}}\}},
% where \meta{element} is a typographic element, listed in
% table~\ref{tab:elements}.
% \begin{table}[tp]
%   \centering
%   \caption{Default values for the fonts in bibliographies.
%     If no value is given, the standard font (normally upright roman)
%     is used.}
%   \label{tab:elements}
%   \begin{tabular}{llll}
%     \toprule
%     Element& Data types& \multicolumn{2}{c}{Default value for
%     \BibTeX\ style} \\
%     && |bababbrv|, |babalpha|& |babamspl| \\
%     && |babplain|, |babunsrt|& \\
%     \midrule
%     name& Authors, editors& & \\
%     lastname& Lastnames of Authors, editors& & \\
%     title& All kinds of titles& \cs{emph}& \cs{emph}\\
%     etal& ``\emph{et al.}''& \cs{emph}& \\
%     journal& Journal title& & \\
%     volume& Volume (journal)& & \cs{textbf} \\
%     ISBN& ISBN& \cs{MakeUppercase}& \cs{MakeUppercase} \\
%     ISSN& ISSN& \cs{MakeUppercase}& \cs{MakeUppercase} \\
%     url& URL& \cs{url}& \cs{url} \\
%     urldate& visiting date of URL& & \\
%     \bottomrule
%   \end{tabular}
% \end{table}
% \meta{font command} is a command that takes one argument, e.\,g.\
% |\textbf|, |\emph|, or |\textsc|.
% If no suitable command is available, you have to define one, first.
% For example, you can get a bold italic font as follows:
% \begin{verbatim}
%\newcommand\textitbf[1]{{\bfseries\itshape #1\/}}%
%\setbibliographyfont{title}{\textitbf}%\end{verbatim}
% As it can be seen in this example, the argument of the used font
% command mustn't be specified in |\setbibliographyfont|.
%
% The \meta{element} |name| changes the whole name of the author,
% including forename and lastname.
% If |lastname| is also specified, it changes the lastname within the
% font for the name.
% For example,
% \begin{verbatim}
%\setbibliographyfont{name}{\emph}
%\setbibliographyfont{lastname}{\MakeUppercase}\end{verbatim}
% leads to |\emph{Harald \MakeUppercase{Harders}}| resp.\
% ``\emph{Harald \MakeUppercase{Harders}}''.
%
% The font definition for |urldate| can also be used not to change the
% font but to provide a command that writes the date in the correct
% language, e.\,g., using the |isodate| package:
% \begin{verbatim}
%\usepackage[short]{isodate}
%\setbibliographyfont{urldate}{\printdate}\end{verbatim}
%
% \DescribeMacro{\btxISBN}%
% \DescribeMacro{\btxISSN}%
% There are two additional commands, \cs{btxISBN} and \cs{btxISSN}.
% They generate the strings ``ISBN'' and ``ISSN'' in bibliographies. 
% By default, they do it without a change of the font. 
% For example, if using oldstyle digits, it could be worth to change
% them e.\,g.\ to
% \begin{verbatim}
%\renewcommand\btxISBN{\textsc{isbn}}
%\renewcommand\btxISSN{\textsc{issn}}\end{verbatim}
%
% \DescribeMacro{\btxprintISBN}%
% \DescribeMacro{\btxprintISSN}%
% By default, the ISBN resp.\ ISSN is printed if present in the data
% base.
% You can switch this behaviour off by using \cs{btxprintISBN\{false\}}
% resp.\ \cs{btxprintISSN\{false\}}.
% Similarly, printing is switched on by \cs{btxprintISBN\{true\}}
% resp.\ \cs{btxprintISSN\{true\}}.
% This, however, only works for the "`standard"' styles, i.\,e., not for
% the \AmS\ style |babamspl|.
%
% If you are using |babamspl|, the language names of the citations are
% printed by default, as the original \AmS\ style does it.
% You can avoid this by adding following line to your preamble:
% \begin{verbatim}
%\newcommand\btxprintamslanguage[1]{}\end{verbatim}
%
%
% \section{How to add new languages}
%
% The language definitions are placed in special files with the
% extension |.bdf|.
% If you want to add a new language to the |babelbib| system, you
% should copy one of the existing |bdf| files and change the new
% file.
% 
% Since |babelbib.sty| contains a list of known languages, it will not
% find the new language definition file, automatically. 
% Then, you can give the name of the new file without extension as an
% option when loading |babelbib|. 
% For example, to load |mylang.bdf|, you have to load the package as
% follows:
% \begin{verbatim}
%\usepackage[mylang]{babelbib}\end{verbatim}
%
% If you have developed a new |bdf| file, please send it to
% |h.harders@tu-bs.de|.
% Then, I will add it to the |babelbib| system.
%
% \section{Problems and Incompatibilities}
%
% \begin{itemize}
% \item Babelbib does not work together with old versions of the
%   |frenchle| package prior V5,987.
%   Please update the frenchle package or use the native babel support
%   for the French language, instead.
% \end{itemize}
%
% \section{To Do}
%
% \begin{itemize}
% \item Add more languages.
% \item Complete Dutch.
% \item Add the possibility to switch off ISBN and ISSN to |babasmpl|.
% \end{itemize}
%
%
% \section*{Acknowledgements}
%
% Danie Els, \url{dnjels@sun.ac.za} (Afrikaans);
% Taneli Huuskonen, \url{huuskone@cc.helsinki.fi} (Esperanto, Finnish);
% V\'\i ctor Lua\~na, \url{victor@fluor.quimica.uniovi.es} (Spanish);
% Hans Fredrik Nordhaug, \url{hansfn@mi.uib.no} (Norwegian, Swedish);
% Robert Fuster, \url{rfuster@imm.upv.es} (Catalan);
% Markus Kohm, \url{komascript@gmx.info} (Different schemes for writing names);
% Matthias D. Eisner, \url{matthias.eisner@ethz.ch} (protect
% \cs{foreignlanguage} calls);
% Daniel Winkelmann, \url{daniel.winkelmann@club-internet.fr}
% (idea for different formatting of forenames and lastnames);
% Jan Steffan, \url{me@jansteffan.de} (\cs{setbtxfallbacklanguage});
% Philip Ratcliffe, \url{philip.ratcliffe@email.it} (corrections for
% Italian); Angel Tsankov, \url{bigman@abv.bg} (bugfix with
% \cs{bbbb\meta{\cs{CurrentOption}}loaded}).
%
%
%\begin{thebibliography}{1}
%  \providebibliographyfont{name}{}%
%  \providebibliographyfont{title}{\emph}%
%  \providebibliographyfont{etal}{\emph}%
%  \providebibliographyfont{volume}{}%
%  \providebibliographyfont{ISBN}{\MakeUppercase}%
%  \providebibliographyfont{ISSN}{\MakeUppercase}%
%  \providebibliographyfont{url}{\url}%
%
%\selectlanguage{\english}
%\bibitem{babel}
%\btxnamefont{Braams, Johannes}: \btxtitlefont{Babel, a multilingual package
%  for use with \LaTeX's standard document classes}, 2002.
%\newblock \btxurlfont{CTAN:macros/latex/required/babel/}.
%
%\selectlanguage{\english}
%\bibitem{germbib}
%\btxnamefont{Wallmeier, M.}, A.~Scherer\btxandcomma{} \btxandlong{}\
%  \btxnamefont{H.~Harders}: \btxtitlefont{Macros for german {\BibTeX}ing},
%  2000.
%\newblock \btxurlfont{CTAN:biblio/bibtex/contrib/germbib/}.
%
%\end{thebibliography}
%
% \StopEventually{\PrintChanges \PrintIndex}
%
%
% \section{The implementation}
%
% Source lines that look like \texttt{$\langle$*...$\rangle$} or
% \texttt{$\langle$/...$\rangle$} where \texttt{...} is arbitrary text
% are not written into the output files.
% If a source line starts with \texttt{$\langle$...$\rangle$}, this
% part of the line is omitted.
%
% \subsection{Headings of the files}
%
% Heading of the package and the other files:
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[1998/06/01]
\ProvidesPackage{babelbib}
%</package>
%    \end{macrocode}
% File heads of the |bdf| files:
%    \begin{macrocode}
%<afrikaans>%% Language definitions for Afrikaans by
%<afrikaans>%%   Danie Els, dnjels@sun.ac.za
%<afrikaans>\ProvidesFile{afrikaans.bdf}
%<catalan>%% Language definitions for Catalan by
%<catalan>%%   Robert Fuster, rfuster@imm.upv.es
%<catalan>\ProvidesFile{catalan.bdf}
%<danish>\ProvidesFile{danish.bdf}
%<dutch>\ProvidesFile{dutch.bdf}
%<english>\ProvidesFile{english.bdf}
%<esperanto>%% Language definitions for Esperanto by
%<esperanto>%%   Taneli Huuskonen, huuskone@cc.helsinki.fi
%<esperanto>\ProvidesFile{esperanto.bdf}
%<portuguese>%% Language definitions for Portuguese by
%<portuguese>%%   Jos\'e Carlos Santos, jcsantos@fc.up.pt
%<portuguese>\ProvidesFile{portuguese.bdf}
%<finnish>%% Language definitions for Finnish by
%<finnish>%%   Taneli Huuskonen, huuskone@cc.helsinki.fi
%<finnish>\ProvidesFile{finnish.bdf}
%<french>\ProvidesFile{french.bdf}
%<german>\ProvidesFile{german.bdf}
%<italian>\ProvidesFile{italian.bdf}
%<norsk>%% Language definitions for Norwegian by
%<norsk>%%   Hans Fredrik Nordhaug <hansfn@mi.uib.no>
%<norsk>\ProvidesFile{norsk.bdf}
%<spanish>%% Language definitions for spanish by
%<spanish>%%   V{\'\i}ctor Lua{\~n}a, victor@fluor.quimica.uniovi.es
%<spanish>\ProvidesFile{spanish.bdf}
%<swedish>%% Language definitions for Swedish by
%<swedish>%%   Hans Fredrik Nordhaug <hansfn@mi.uib.no>
%<swedish>\ProvidesFile{swedish.bdf}
%    \end{macrocode}
% Version information unique for all generated files:
%    \begin{macrocode}
%<latex>  [2005/09/01 v1.15  babelbib: multilingual bibliographies (HH)]
%<bst>%% 2005/09/01 v1.15  babelbib: multilingual bibliographies (HH)
%    \end{macrocode}
%
% \subsection{The package itself}
%
% \index{fixlanguage=\texttt{fixlanguage}|main}%
% Define an option which fixes the language in the bibliography to the
% main language of the document.
%    \begin{macrocode}
%<*package>
\newif\ifbbbbfixlanguage
\DeclareOption{fixlanguage}{\bbbbfixlanguagetrue}
%    \end{macrocode}
% \changes{0.2}{2003/04/20}{Added option \texttt{languagenames} to
%   define commands for language names}%
% \index{languagenames=\texttt{languagenames}|main}%
% If this option is used, generate the commands
% \cs{btxlanguagename}\meta{language} that save how languages are
% called in other languages, e.\,g. in German, French is called
% \foreignlanguage{ngerman}{"`französisch"'}.
%    \begin{macrocode}
\newif\ifbbbblanguagenames
\DeclareOption{languagenames}{\bbbblanguagenamestrue}
%    \end{macrocode}
% If additional options are given, try to load these as
% languages. This is implemented in order to be able to use a new
% language that is not yet supported by the official |babelbib|.
% \changes{1.15}{2005/09/01}{Small bug fix in loading language files}%
%    \begin{macrocode}
\DeclareOption*{%
  \InputIfFileExists{\CurrentOption.bdf}{%
    \expandafter\def\csname bbbb\CurrentOption loaded\endcsname{\@empty}%
  }{%
    \PackageError{babelbib}{%
      Language definition file \CurrentOption.bdf not found}{%
      Maybe you misspelled the language option?}%
  }%
}
%    \end{macrocode}
% Process the given options.
%    \begin{macrocode}
\ProcessOptions*
%    \end{macrocode}
% \begin{macro}{\bbbbifundefined}
% Define a replacement for \cs{@ifundefined} that does not define the
% command it is tested for as side effect.
% This command has been taken from a news posting by Markus Kohm
% (|markus.kohm@gmx.de|).
%    \begin{macrocode}
\newcommand*{\bbbbifundefined}[1]{%
  \begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname #1\endcsname\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\bbbbaddto}
% Adds the command named |\bibs#2| to the command |\extras#1|, if this
% command is defined before, where |#1| and |#2| are the arguments of
% |\bbbbaddto|. For internal use only.
% \changes{0.32}{2003/05/06}{Changed \cs{bbbbaddto} in order to allow
%   different commands to be added to \cs{extras}\meta{language}}%
%    \begin{macrocode}
\newcommand\bbbbaddto[2]{%
%    \end{macrocode}
% Test wheather  |\extras#1| is defined.
%    \begin{macrocode}
  \expandafter\bbbbifundefined{extras#1}{}{%
%    \end{macrocode}
% Call |babel|'s command to append |\bibs#1| to |\extras#1|.
%    \begin{macrocode}
    \expandafter\addto\expandafter{\csname extras#1\endcsname}{%
      \csname #2\endcsname}%
    \typeout{babelbib extension \@backslashchar #2 added to
      \string\extras #1}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\inputbdf}
% Input the file |#2.bdf| if babel has loaded the language |#1|. 
% For internal use only.
%    \begin{macrocode}
\newcommand\inputbdf[2]{%
%    \end{macrocode}
% \changes{0.43}{2004/01/05}{Test on \cs{date}\meta{language} instead on
%   \cs{l@}\meta{language} (caused problems with \TeX Live)}%
% Test wheather |\date#1| is defined which is the case if the language
% |#1| has been loaded.
%    \begin{macrocode}
  \bbbbifundefined{date#1}{}{%
%    \end{macrocode}
% Input |#2.bdf|.
%    \begin{macrocode}
    \@ifundefined{bbbb#2loaded}{%
      \expandafter\def\csname bbbb#2loaded\endcsname{\@empty}%
      \input{#2.bdf}%
    }{}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\selectbiblanguage}
% \changes{0.3}{2003/04/21}{Handling of usage before or after
%   \texttt{begin\{document\}} added}%
% Define |\selectbiblanguage| which explicitly selects the language
% for the bibliography. This is only useful when the option
% |fixlanguage| is used.
% Otherwise the command produces a warning and does nothing else.
%
% Since all the language dependent macros are not know before
% |\begin{document}|, the command |\selectbiblanguage| has to wait
% until there, before doing any action. 
% Because after |\begin{document}|, it can do the action immediately,
% |\selectbiblanguge| has to be redefined there.
%    \begin{macrocode}
\ifbbbbfixlanguage
%    \end{macrocode}
% Define the |\selectlanguage| command for usage before
% |\begin{document}|.
%    \begin{macrocode}
  \newcommand\selectbiblanguage[1]{%
    \AtBeginDocument{\@selectbiblanguage{#1}}%
  }
%    \end{macrocode}
% Redefine it at |\begin{document}|.
%    \begin{macrocode}
  \AtBeginDocument{%
    \renewcommand\selectbiblanguage[1]{\@selectbiblanguage{#1}}%
  }
%    \end{macrocode}
% Define the ``real'' command that does the action.
% It tests wheather |\bibs#1| and |\extras#1| are known and produces
% error messages if not.
% If everything is okay, change the bibliography language.
%    \begin{macrocode}
  \newcommand\@selectbiblanguage[1]{%
    \bbbbifundefined{bibs#1}{%
      \bbbbifundefined{date#1}{%
        \PackageError{babelbib}{Language #1 in bibliography not loaded
          by babel}{%
          The language #1 hasn't been loaded by babel.
          Add it to the\MessageBreak
          options of the \string\usepackage{babel} command or to the
          global options.}%
      }{%
        \PackageError{babelbib}{Language #1 in bibliography unknown by
          babelbib}{%
          There are no definitions for #1 available in the
          current\MessageBreak
          version of babelbib. Please contact h.harders@tu-bs.de.}%
      }%
    }{%
      \typeout{babelbib: Set language for keywords in the bibliography fixed to #1}%
      \csname bibs#1\endcsname
    }%
  }
\else
  \newcommand\selectbiblanguage[1]{%
    \PackageWarning{babelbib}{Command \string\selectbiblanguage\space
      used without package\MessageBreak
      option fixlanguage. Ignored}%
  }
  \AtBeginDocument{%
    \typeout{babelbib: Use citation-dependent languages in bibliography}%
  }
\fi
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxselectlanguage}
% \changes{0.2}{2003/04/20}{Added}%
% Define |\selectbiblanguage| which selects a language and complains
% if babelbib does not know about this language.
% For internal use, only.
%    \begin{macrocode}
\newcommand\btxselectlanguage[1]{%
  \bbbbifundefined{bibs#1}{%
    \bbbbifundefined{date#1}{%
      \PackageError{babelbib}{Language #1 in bibliography not loaded
        by babel}{%
        The language #1 hasn't been loaded by babel.
        Add it to the\MessageBreak
        options of the \string\usepackage{babel} command or to the
        global options.}%
    }{%
      \ifbbbbfixlanguage
        \PackageWarning{babelbib}{Language #1 in bibliography
          unknown\MessageBreak 
          by babelbib. Hyphenation will be\MessageBreak
          incorrect}%
      \else
        \PackageError{babelbib}{Language #1 in bibliography unknown by
          babelbib}{%
          There are no definitions for #1 available in the
          current\MessageBreak
          version of babelbib. Please contact h.harders@tu-bs.de.}%
      \fi
    }%
  }{%
    \selectlanguage{#1}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\biblanguage}
% \changes{1.15}{2005/09/01}{Add \cs{biblanguage} that switches to the
%   keyword language within a field}%
% Define \cs{biblanguage} which switches to the keyword language
% within a field.
%    \begin{macrocode}
\newcommand\biblanguage[1]{{%
    \expandafter\selectlanguage\expandafter{\biblanguagename}#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxlanguagename}
% \changes{0.2}{2003/04/20}{Added}%
% Define |\btxlanguagename| which typesets the name of the language
% given in the argument, spoken in the current active language.
%    \begin{macrocode}
\newcommand\btxlanguagename[1]{%
  \bbbbifundefined{btxlanguagename#1}{%
    \PackageError{babelbib}{Languagename for #1 not
      defined\MessageBreak
      in \languagename\space language}{%
      Either you have forgotten to specify the option `languagenames'
      when loading\MessageBreak
      babelbib, or the command \string\bibs\languagename\space does
      not contain a definition\MessageBreak
      for the command \string\btxlanguagename#1.
      In the latter case, please\MessageBreak 
      contact h.harders@tu-bs.de.}%
    #1%
  }{%
    \@nameuse{btxlanguagename#1}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\setbtxfallbacklanguage}
% \changes{1.12}{2005/06/19}{Add the command \cs{setbtxfallbacklanguage}
%   to force a fall-back language}%
%    \begin{macrocode}
\newcommand*\setbtxfallbacklanguage[1]{%
  \edef\btxfallbacklanguage{#1}%
  \typeout{babelbib: Set bibliography fall-back language to
    \btxfallbacklanguage}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxfallbacklanguage}
% \changes{0.40}{2003/09/26}{Add the command \cs{btxfallbacklanguage}
%   for items without given language}%
%    \begin{macrocode}
\AtBeginDocument{%
  \@ifundefined{btxfallbacklanguage}{%
    \edef\btxfallbacklanguage{\languagename}%
  \typeout{babelbib: Set bibliography fall-back language to
    \btxfallbacklanguage}%
  }{%
    \typeout{babelbib: Bibliography fall-back language unchanged
      (\btxfallbacklanguage)}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\declarebtxcommands}
% \changes{0.3}{2003/04/21}{Added}%
% Declare |\declarebtxcommands| which adds or replaces one or more of the
% |\Btx| or |\btx| commands defined in a \cs{bibs}\meta{language}
% command.
% The first argument gives the language for which the commands shall
% be added or changed.
% The second argument includes the definitions of the commands.
% For an example, see section~\ref{sec:usage}.
%    \begin{macrocode}
\newcommand*\declarebtxcommands[2]{%
  \AtBeginDocument{%
    \typeout{babelbib: Add a command to \string\bibs#1}%
    \expandafter\g@addto@macro\csname bibs#1\endcsname{#2}%
    \ifbbbbfixlanguage
      \selectbiblanguage{\biblanguagename}%
    \fi
  }%
}
%    \end{macrocode}
% This command may only be used in the preamble.
%    \begin{macrocode}
\@onlypreamble\declarebtxcommands
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxifchangecaseon}
% \begin{macro}{\btxifchangecaseoff}
% \changes{0.32}{2003/05/06}{Move change of case from bst to sty}%
% The bst files write titles twice, first with changed case and second
% with preserved case.
% The macros \cs{btxifchangecaseon} and \cs{btxifchangecaseoff}
% typeset one of these versions.
% The languages append one of these commands to the
% \cs{extras}\meta{language} commands.
%    \begin{macrocode}
\newcommand*\btxifchangecaseon{%
  \def\btxifchangecase{\@firstoftwo}%
}%
\newcommand*\btxifchangecaseoff{%
  \def\btxifchangecase{\@secondoftwo}%
}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\setbibliographyfont}
% \changes{0.2}{2003/04/20}{Don't change the font commands directly
%   but use this command}%
% Define |\setbibliographyfont| and |\setbibliographyfont*| that set
% the font declared by the first argument |#1| to the second argument
% |#2|.
% The second argument has to be a macro with one argument, like
% |\textbf|, |\emph|, |\textsc|, etc.
% The normal version generates an error, if the internal command
% |\btx#1font| is not defined. 
% The star version doesn't.
% error.
%    \begin{macrocode}
\newcommand\setbibliographyfont{%
  \@ifnextchar*{\@@setbibliographyfont}{\@setbibliographyfont}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@setbibliographyfont}
%    \begin{macrocode}
\newcommand\@setbibliographyfont[2]{%
  \bbbbifundefined{btx#1font}{%
    \PackageError{babelbib}{Bibliography font `#1' can't be set}{%
      You have tried to define a font for the bibliographic element
      \MessageBreak
      `#1', which is unknown to babelbib}%
  }{%
    \expandafter\renewcommand\csname btx#1font\endcsname{#2}%
    \typeout{babelbib: Bibliography font for `#1' changed.}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@setbibliographyfont}
% The first argument is the |*| and ignored.
%    \begin{macrocode}
\newcommand\@@setbibliographyfont[3]{%
  \bbbbifundefined{btx#2font}{%
    \expandafter\newcommand\csname btx#2font\endcsname{#3}%
    \typeout{babelbib: Bibliography font for `#2' newly defined.}%
  }{%
    \expandafter\renewcommand\csname btx#2font\endcsname{#3}%
    \typeout{babelbib: Bibliography font for `#2' changed.}%
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\providebibliographyfont}
% \changes{0.2}{2003/04/20}{Added}%
% Define |\providebibliographyfont| and |\providebibliographyfont*|
% that do the same as |\setbibliographyfont| and
% |\setbibliographyfont*|, but only, if |\setbibliographyfont| has not
% been used for |#1|, before.
% It is similar to |\providecommmand| which only defines that command
% if it is undefined, before.
% This command is intended to be used by the \BibTeX\ style, but can
% also be used by the user.
%    \begin{macrocode}
\newcommand\providebibliographyfont{%
  \@ifnextchar*{\@@providebibliographyfont}{\@providebibliographyfont}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@providebibliographyfont}
%    \begin{macrocode}
\newcommand\@providebibliographyfont[2]{%
  \bbbbifundefined{btx#1font}{%
    \PackageError{babelbib}{Bibliography font `#1' can't be set}{%
      You have tried to define a font for the bibliographic element
      \MessageBreak
      `#1', which is unknown to babelbib}%
  }{%
    \expandafter\ifx\csname btx#1font\endcsname\@empty
      \expandafter\renewcommand\csname btx#1font\endcsname{#2}%
      \typeout{babelbib: Using the BibTeX style's default font for `#1'.}%
    \else
      \typeout{babelbib: Using user changed font for `#1'.}%
    \fi
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@setbibliographyfont}
% The first argument is the |*| and ignored.
%    \begin{macrocode}
\newcommand\@@providebibliographyfont[3]{%
  \bbbbifundefined{btx#2font}{%
    \expandafter\newcommand\csname btx#2font\endcsname{#3}%
    \typeout{babelbib: Using the BibTeX style's default font for `#2'.}%
  }{%
    \expandafter\ifx\csname btx#2font\endcsname\@empty
      \expandafter\renewcommand\csname btx#2font\endcsname{#3}%
      \typeout{babelbib: Using the BibTeX style's default font for `#2'.}%
    \else
      \typeout{babelbib: Using user changed font for `#2'.}%
    \fi
  }%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxnamefont}
% \changes{0.32}{2003/05/06}{Add new font for journal names}%
% \changes{1.12}{2005/06/19}{Add new font \cs{btxlastname} for last
%   names}%
% Define the dummy commands for available fonts
%    \begin{macrocode}
\newcommand*\btxnamefont{}
\let\btxnamefont=\@empty
\newcommand*\btxlastnamefont{}
\let\btxlastnamefont=\@empty
\newcommand\btxtitlefont{}
\let\btxtitlefont=\@empty
\newcommand\btxetalfont{}
\let\btxetalfont=\@empty
\newcommand\btxjournalfont{}
\let\btxjournalfont=\@empty
\newcommand\btxvolumefont{}
\let\btxvolumefont=\@empty
\newcommand\btxISBNfont{}
\let\btxISBNfont=\@empty
\newcommand\btxISSNfont{}
\let\btxISSNfont=\@empty
\newcommand\btxurlfont{}
\let\btxurlfont=\@empty
\newcommand\btxurldatefont{}
\let\btxurldatefont=\@empty
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxauthorcolon}
% \changes{0.2}{2003/04/20}{Added}%
% Define |\btxauthorcolon| which defines the characters typeset after 
% the authors, if they are written before the title.
% By default, it is a ``:''. 
%    \begin{macrocode}
\newcommand\btxauthorcolon{:}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxISBN}
% Define |\btxISBN| which outputs "`ISBN"' in a bibliography. 
% For example, it could be defined to |\textsc{isbn}| when old style
% digits are used.
%    \begin{macrocode}
\newcommand\btxISBN{ISBN}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\btxISSN}
% Define |\btxISSN| which outputs "`ISSN"' in a bibliography. 
% For example, it could be defined to |\textsc{issn}| when old style
% digits are used.
%    \begin{macrocode}
\newcommand\btxISSN{ISSN}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ifbtxprintISBN}
% \begin{macro}{\ifbtxprintISSN}
% These commands are used by the bibliography styles to typeset the
% ISBN or ISSN only if wanted.
%    \begin{macrocode}
\DeclareRobustCommand\ifbtxprintISBN[1]{\ifbtx@printISBN #1\fi}
\DeclareRobustCommand\ifbtxprintISSN[1]{\ifbtx@printISSN #1\fi}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\btxprintISBN}
% \begin{macro}{\btxprintISSN}
% These macros are used to switch on or off printing of ISBN resp.\
% ISSN.
% Valid arguments are |true| and |false|.
%    \begin{macrocode}
\newcommand*\btxprintISBN[1]{\csname btx@printISBN#1\endcsname}
\newcommand*\btxprintISSN[1]{\csname btx@printISSN#1\endcsname}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\ifbtx@printISBN}
% \begin{macro}{\ifbtx@printISSN}
% The booleans that store the necessary information.
%    \begin{macrocode}
\newif\ifbtx@printISBN
\newif\ifbtx@printISSN
\btxprintISBN{true}
\btxprintISSN{true}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\url}
% \changes{0.40}{2003/09/26}{If no \cs{url} command is defined,
%   produce an error}%
% \changes{0.2}{2003/04/20}{Added, if not available by another
%   package}%
% Define |\url| which, by default, is used for URLs. Only necessary if
% not provided by another package, e.\,g.\ |url.sty|.
%    \begin{macrocode}
\AtBeginDocument{%
  \providecommand\url[1]{%
    \PackageError{babelbib}{No \string\url\space command defined but
      field URL used\MessageBreak
      in bibliography}{%
      Please define a \string\url\space command for printing URLs
      before \string\begin{document}, e.\,g.\MessageBreak
        by loading the package `url.sty'.}%
    \texttt{#1}%
    }%
}
%    \end{macrocode}
% \end{macro}
% Perform the following commands at |\begin{document}| in order to be
% sure to do that after loading |babel|.
%    \begin{macrocode}
\AtBeginDocument{%
%    \end{macrocode}
% Load |babel| if that has not been done, yet.
%    \begin{macrocode}
  \RequirePackage{babel}
%    \end{macrocode}
% Input all know languages that babel has also loaded, before.
% \changes{0.2}{2003/04/20}{Removed Italian from the list of
%   automatically found languages, since it is not complete, yet}%
% \changes{0.31}{2003/05/01}{Added Italian to the list of automatically
%   found languages, again}%
% \changes{0.34}{2003/07/28}{Added Afrikaans}%
% \changes{0.41}{2003/11/03}{Added Norwegian (by Hans Fredrik Nordhaug)}%
% \changes{1.00}{2005/02/16}{Renamed franceis to francais}%
%    \begin{macrocode}
  \inputbdf{afrikaans}{afrikaans}
  \inputbdf{american}{english}
  \inputbdf{austrian}{german}
  \inputbdf{brazil}{portuguese}
  \inputbdf{brazilian}{portuguese}
  \inputbdf{british}{english}
  \inputbdf{canadian}{english}
  \inputbdf{canadien}{french}
  \inputbdf{catalan}{catalan}
  \inputbdf{danish}{danish}
  \inputbdf{dutch}{dutch}
  \inputbdf{english}{english}
  \inputbdf{esperanto}{esperanto}
  \inputbdf{finnish}{finnish}
  \inputbdf{francais}{french}
  \inputbdf{french}{french}
  \inputbdf{frenchb}{french}
  \inputbdf{german}{german}
  \inputbdf{germanb}{german}
  \inputbdf{italian}{italian}
  \inputbdf{norsk}{norsk}
  \inputbdf{mexican}{spanish}
  \inputbdf{naustrian}{german}
  \inputbdf{ngerman}{german}
  \inputbdf{portuges}{portuguese}
  \inputbdf{portuguese}{portuguese}
  \inputbdf{spanish}{spanish}
  \inputbdf{swedish}{swedish}
  \inputbdf{UKenglish}{english}
  \inputbdf{USenglish}{english}
%    \end{macrocode}
% Call |\bibs#1|, where |#1| stands for the main language of the
% document, to activate the additional bibliographic commands.
%    \begin{macrocode}
  \ifbbbbfixlanguage
    \typeout{babelbib: Load BibTeX extensions
      \string\bibs\bbl@main@language\space for \bbl@main@language}%
    \selectbiblanguage{\bbl@main@language}%
  \else
    \expandafter\selectlanguage\expandafter{\bbl@main@language}%
  \fi
}
%</package>
%    \end{macrocode}
%
% \subsection{The language definitions}
%
% \subsubsection{German}
%    \begin{macrocode}
%<*german>
%    \end{macrocode}
%
% \begin{macro}{\bibsgerman}
% Define |\bibsgerman| which itself defines all necessary expressions
% used in bibliographies that differ in different languages.
% This command is used for all German dialects.
%
% Since the language of the keywords may differ from the language of
% the bibliography item, the keyword language is set for each keyword.
% Because this command is also used for dialects, it has an optional
% argument which is set to the dialect.
%    \begin{macrocode}
\newcommand\bibsgerman[1][german]{%
%    \end{macrocode}
% Define the command |\biblanguagename| that always returns the name
% of the current language for bibliographies.
%    \begin{macrocode}
  \def\biblanguagename{#1}%
%    \end{macrocode}
% First, define all commands for usage within a sentence (which
% normally start with a lowercase letter, if they aren't a noun).
% These commands start with a lowercase letter.
%
% Many commands have an argument. This may be used by the bib\TeX\
% styles to append a dot after abbreviations, e.\,g.\
% |\btxetalshort{.}|.
%    \begin{macrocode}
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}% 
  \def\btxandshort##1{\protect\foreignlanguage{#1}{und}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{und}}%
%    \end{macrocode}
% The command |\btxandcomma| contains a ``,'' if a comma is added
% before the ``and'' in a list of more than two items.
% For German, this is not the case.
%    \begin{macrocode}
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{in:}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{in:}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{d.\ Reihe}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{der Reihe}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{Hrsg##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{Herausgeber}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{Hrsg##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{Herausgeber}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{Bd##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{Band}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{Nr##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{Nummer}}%
%    \end{macrocode}
% Avoid the ligature in
% \foreignlanguage{ngerman}{"`Auf"|lage"'} in the same way, |babel|
% does it.
% This is a change in the behaviour to the |germbib| package.
% In \foreignlanguage{ngerman}{"`Aufl"'} the ligature is still
% used since this is done in abbreviations.
%    \begin{macrocode}
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{Aufl##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{%
      Auf\penalty10000\discretionary{-}{}{\kern.03em}%
    \allowhyphens lage}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{Kap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{Kapitel}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{S##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{Seite}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{S##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{Seiten}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Diplomarbeit}}%
%    \end{macrocode}
% Use \foreignlanguage{ngerman}{"`Dissertation"'} instead of 
% \foreignlanguage{ngerman}{"`Doktorarbeit"'} for PhD theses.
% This is a change in the behaviour to the |germbib| package.
%    \begin{macrocode}
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{Dissertation}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Techn.\ Ber##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Technischer Bericht}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januar}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februar}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{M\"arz}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Mai}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Juni}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Juli}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{August}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktober}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{Dezember}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{M\"arz}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Mai}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Juni}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Juli}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dez##1{}}}%
%    \end{macrocode}
% Then, define all commands for usage at the begin of a sentence
% (which start with an uppercase letter).
% These commands start with an uppercase letter.
% Since, in German, many nouns are the same in the middle and at the
% start of a sentence, the |\Btx| variants just call the |\btx|
% variant.
%    \begin{macrocode}
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{In:}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{In:}}%
  \def\Btxeditorshort{\btxeditorshort}%
  \def\Btxeditorlong{\btxeditorlong}%
  \def\Btxeditorsshort{\btxeditorsshort}%
  \def\Btxeditorslong{\btxeditorslong}%
  \def\Btxvolumeshort{\btxvolumeshort}%
  \def\Btxvolumelong{\btxvolumelong}%
  \def\Btxnumbershort{\btxnumbershort}%
  \def\Btxnumberlong{\btxnumberlong}%
  \def\Btxeditionshort{\btxeditionshort}%
  \def\Btxeditionlong{\btxeditionlong}%
  \def\Btxchaptershort{\btxchaptershort}%
  \def\Btxchapterlong{\btxchapterlong}%
  \def\Btxpageshort{\btxpageshort}%
  \def\Btxpagelong{\btxpagelong}%
  \def\Btxpagesshort{\btxpagesshort}%
  \def\Btxpageslong{\btxpageslong}%
  \def\Btxtechrepshort{\btxtechrepshort}%
  \def\Btxtechreplong{\btxtechreplong}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{besucht:}}%
%    \end{macrocode}
% A command that just puts some user defined text in the language of
% the keywords.
%    \begin{macrocode}
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
%    \end{macrocode}
% \changes{0.2}{2003/04/20}{Added language names}%
% Names of all known languages in the current language.
% For example, used by |babamspl.bst|.
%    \begin{macrocode}
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{englisch}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{deutsch}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugiesisch}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugiesisch}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{englisch}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgarisch}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{englisch}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{franz\"osisch}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalanisch}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroatisch}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tschechisch}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{d\"anisch}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{niederl\"andisch}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{englisch}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finnisch}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{franz\"osisch}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{franz\"osisch}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{franz\"osisch}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{deutsch}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{deutsch}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{griechisch}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebr\"aisch}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{ungarisch}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{isl\"andisch}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irisch}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italienisch}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{lateinisch}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{deutsch}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{deutsch}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norwegisch}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{neunorwegisch}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polnisch}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugiesisch}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugiesisch}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russisch}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{schottisch}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbisch}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spanisch}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{schwedisch}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{t\"urkisch}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{englisch}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{englisch}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\bibsgermanb}
% Do the same for the language ``germanb''. Since there is no
% difference, just call |\bibsgerman|.
%    \begin{macrocode}
\newcommand\bibsgermanb{\bibsgerman}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\bibsngerman}
% Do the same for German with new ortography. Call |\bibsgerman| with
% new hyphenation patterns.
%    \begin{macrocode}
\newcommand\bibsngerman[1][ngerman]{\bibsgerman[#1]}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\bibsaustrian}
% Once again. Austrians use \foreignlanguage{ngerman}{"`J\"anner"'}
% instead of \foreignlanguage{ngerman}{"`Januar"'}. Thus, redefine the
% corresponding command.
%    \begin{macrocode}
\newcommand\bibsaustrian[1][austrian]{%
  \bibsgerman[#1]%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{J\"anner}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{J\"an##1{}}}%
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\bibsnaustrian}
% New Austrian is the same as Austrian.
%    \begin{macrocode}
\newcommand\bibsnaustrian[1][naustrian]{%
  \bibsngerman[#1]%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{J\"anner}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{J\"an##1{}}}%
}
%    \end{macrocode}
% \end{macro}
% The rest has to be executed after loading |babel.sty|, because the
% |\extra...| commands have to be defined for all used languages.
%    \begin{macrocode}
\AtBeginDocument{%
%    \end{macrocode}
% If the language is fixed, do nothing.
%    \begin{macrocode}
  \ifbbbbfixlanguage    
  \else
%    \end{macrocode}
% Append the corresponding |\#2| command to each used language,
% namely |\extras#1|.
%    \begin{macrocode}
    \bbbbaddto{austrian}{bibsaustrian}
    \bbbbaddto{german}{bibsgerman}
    \bbbbaddto{germanb}{bibsgermanb}
    \bbbbaddto{naustrian}{bibsnaustrian}
    \bbbbaddto{ngerman}{bibsngerman}
  \fi
%    \end{macrocode}
% \changes{0.32}{2003/05/06}{Move change of case from bst to sty}%
% Switch off the change of case in titles for all German dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{austrian}{btxifchangecaseoff}
  \bbbbaddto{german}{btxifchangecaseoff}
  \bbbbaddto{germanb}{btxifchangecaseoff}
  \bbbbaddto{naustrian}{btxifchangecaseoff}
  \bbbbaddto{ngerman}{btxifchangecaseoff}
}
%</german>
%    \end{macrocode}
%
% \subsubsection{English}
%    \begin{macrocode}
%<*english>
%    \end{macrocode}
%
% The language definition for English is mostly the same as the German
% one. Therefore, it is not described in detail, again.
%
% \begin{macro}{\bibsenglish}
% \changes{1.00}{2005/02/16}{Handle package \texttt{frenchpro}}%
% |french.sty| already defines \cs{bibsenglish}. 
% In this case it has to be redefined, otherwise newly defined.
%    \begin{macrocode}
\makeatletter
\@ifpackageloaded{french}{}{\newcommand\bibsenglish{}}
\makeatother
%    \end{macrocode}
% \changes{0.2}{2003/04/20}{Changed some abbreviations}%
% Bibliographic commands for English.
%    \begin{macrocode}
\renewcommand\bibsenglish[1][english]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}% 
  \def\btxandshort##1{\protect\foreignlanguage{#1}{and}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{and}}%
  \def\btxandcomma##1{,}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{of}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{of}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{editor}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{eds##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{editors}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volume}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{no##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{number}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{edition}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{ch##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{chapter}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{page}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{pp##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{pages}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Master's thesis}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{PhD thesis}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Techn.\ rep##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Technical report}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{January}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{February}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{March}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{May}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{June}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{July}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{August}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{October}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{December}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{May}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{June}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{July}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sept##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Oct##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Editor}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Eds##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Editors}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volume}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{No##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Number}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Edition}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Ch##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Chapter}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Page}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pp##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Pages}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tech.\ Rep##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Technical Report}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{visited on}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
%    \end{macrocode}
% \changes{0.2}{2003/04/20}{Added language names}%
% Names of all known languages in the current language.
%    \begin{macrocode}
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{english}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{german}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portuguese}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portuguese}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{english}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgarian}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{english}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{french}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catalan}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croatian}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{czech}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{danish}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{dutch}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{english}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finnish}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{french}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{french}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{french}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{german}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{german}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{greek}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebrew}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{hungarian}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{icelandic}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irish}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italian}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latin}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{german}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{german}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norwegian}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{new-norwegian}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polish}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portuguese}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portuguese}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russian}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{scottish}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbian}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spanish}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{swedish}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turkish}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{english}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{english}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Copy the commands to the other languages.
%    \begin{macrocode}
\newcommand\bibsamerican{\bibsenglish[american]}
\newcommand\bibsbritish{\bibsenglish[british]}
\newcommand\bibscanadian{\bibsenglish[canadian]}
\newcommand\bibsUKenglish{\bibsenglish[UKenglish]}
\newcommand\bibsUSenglish{\bibsenglish[USenglish]}
%    \end{macrocode}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage    
  \else
    \bbbbaddto{american}{bibsamerican}
    \bbbbaddto{british}{bibsbritish}
    \bbbbaddto{canadian}{bibscanadian}
    \bbbbaddto{english}{bibsenglish}
    \bbbbaddto{UKenglish}{bibsUKenglish}
    \bbbbaddto{USenglish}{bibsUSenglish}
  \fi
%    \end{macrocode}
% \changes{0.32}{2003/05/06}{Move change of case from bst to sty}%
% Switch on the change of case in titles for all English dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{american}{btxifchangecaseon}
  \bbbbaddto{british}{btxifchangecaseon}
  \bbbbaddto{canadian}{btxifchangecaseon}
  \bbbbaddto{english}{btxifchangecaseon}
  \bbbbaddto{UKenglish}{btxifchangecaseon}
  \bbbbaddto{USenglish}{btxifchangecaseon}
}
%</english>
%    \end{macrocode}
%
% \subsubsection{Italian}
%    \begin{macrocode}
%<*italian>
%    \end{macrocode}
%
% \begin{macro}{\bibsitalian}
% Bibliographic commands for Italian.
% \changes{0.33}{2003/05/22}{Changed some Italian keywords according
%   to the custom-bib file italian.mbs}%
%    \begin{macrocode}
\newcommand\bibsitalian[1][italian]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}% 
  \def\btxandshort##1{\protect\foreignlanguage{#1}{e}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{e}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{della serie}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{nella serie}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{della serie}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{nella serie}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{cur##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{curatore}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{cur##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{curatori}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volume}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{no##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{numero}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{edizione}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{cap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{capitolo}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{pagina}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{pp##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{pagine}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{tesi di laurea}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{tesi di dottorato}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Rapp.\ Tecnico}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Rapporto Tecnico}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{gennaio}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{febbraio}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{marzo}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{aprile}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{maggio}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{giugno}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{luglio}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{agosto}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{settembre}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{ottobre}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{novembre}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{dicembre}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{gen##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{mag##1{}}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{giu##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{lug##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{ago##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{set##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{ott##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{dic##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{Nel}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{Nel}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Editore}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Editori}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volume}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{No##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Numero}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Edizione}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Cap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Capitolo}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Pagina}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pp##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Pagine}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Rap.\ Tecnico}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Rapporto Tecnico}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{accesso a}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
%    \end{macrocode}
% \changes{0.2}{2003/04/20}{Added placeholders for language names}%
% \changes{0.31}{2003/05/01}{Added some language names for Italian}%
% Names of all known languages in the current language.
%    \begin{macrocode}
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{inglese}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{tedesco}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portoghese}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portoghese}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{inglese}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgaro}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{inglese}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{francese}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catalano}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croato}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{ceco}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{danese}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{olandese}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{inglese}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finlandese}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{francese}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{francese}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{francese}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{tedesco}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{tedesco}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{greco}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{ebreo}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{ungherese}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{islandese}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irlandese}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italiano}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latino}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{tedesco}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{tedesco}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norvegese}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{nuovo norvegese}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polacco}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portoghese}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portoghese}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russo}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{scozzese}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbo}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spagnolo}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{svedese}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turco}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{inglese}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{inglese}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage    
  \else
    \bbbbaddto{italian}{bibsitalian}
  \fi
%    \end{macrocode}
% \changes{0.32}{2003/05/06}{Move change of case from bst to sty}%
% Switch off the change of case in titles for Italian by
% appending \cs{btxifchangecaseoff} to \cs{extrasitalian}.
%    \begin{macrocode}
  \bbbbaddto{italian}{btxifchangecaseoff}
}
%</italian>
%    \end{macrocode}
%
% \subsubsection{Norwegian}
%    \begin{macrocode}
%<*norsk>
%    \end{macrocode}
%
% The language definition for Norwegian was provided by Hans Fredrik
% Nordhaug.
%
% \begin{macro}{\bibsnorsk}
% Bibliographic commands for Norsk.
%    \begin{macrocode}
\newcommand\bibsnorsk[1][norsk]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{og}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{og}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{av}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{av}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{redakt\o r}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{redakt\o rer}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{bd##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{bind}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{nr##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{nummer}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{utg##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{utgave}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{kap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{kapittel}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{s##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{side}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{s##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{sider}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Masteroppgave}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{PhD-avhandling}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{tekn.\ rap##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{teknisk rapport}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januar}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februar}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Mars}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Mai}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Juni}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Juli}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{August}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktober}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{Desember}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Mai}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Des##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{I}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{I}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Redakt\o r}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Redakt\o rer}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Bd##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Bind}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{Nr##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Nummer}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Utg##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Utgave}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Kap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Kapittel}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{S##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Side}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{S##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Sider}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tekn.\ rap##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Teknisk rapport}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{sjekket:}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
%    \end{macrocode}
% Names of all known languages in the current language.
%    \begin{macrocode}
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgarsk}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalansk}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroatisk}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tsjekkisk}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{dansk}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{nederlandsk}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finsk}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{gr\ae sk}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebraisk}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{ungarsk}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{islandsk}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irsk}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italiensk}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latinsk}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norsk}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{nynorsk}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polsk}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russisk}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{skotsk}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbisk}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spansk}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{svensk}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{tyrkisk}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{engelsk}}%
  \fi
}
\newcommand\bibsnorwegian{\bibsnorsk}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage    
  \else
    \bbbbaddto{norsk}{bibsnorsk}
  \fi
%    \end{macrocode}
% Switch off the change of case in titles for Norsk by
% appending \cs{btxifchangecaseoff} to \cs{extrasnorsk}.
%    \begin{macrocode}
  \bbbbaddto{norsk}{btxifchangecaseoff}
}
%</norsk>
%    \end{macrocode}
%
% \subsubsection{French}
% \changes{0.32}{2003/05/06}{Added French language}%
%    \begin{macrocode}
%<*french>
%    \end{macrocode}
%
% \begin{macro}{\bibsfrench}
% \changes{1.00}{2005/02/16}{Handle package \texttt{frenchpro}}%
% |french.sty| already defines \cs{bibsfrench}. 
% In this case it has to be redefined, otherwise newly defined.
%    \begin{macrocode}
\makeatletter
\@ifpackageloaded{french}{}{\newcommand\bibsfrench{}}
\makeatother
%    \end{macrocode}
% Bibliographic commands for French.
%    \begin{macrocode}
\renewcommand\bibsfrench[1][french]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}% 
  \def\btxandshort##1{\protect\foreignlanguage{#1}{et}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{et}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{dans}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{dans}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{dans}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{dans}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{r\'ed##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{r\'edacteur}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{r\'eds##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{r\'edacteurs}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{t##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{tome}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{%
      n\textsuperscript{o}\kern.2em\relax{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{num\'ero}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{\'ed##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{\'edition}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{chap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{chapitre}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{page}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{pages}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{M\'emoire de ma\^itrise}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{Th\`ese de doctorat}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{rap.\ tech##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{rapport technique}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{janvier}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{f\'evrier}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{mars}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{avril}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{mai}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{juin}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{juillet}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{ao\^ut}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{septembre}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{octobre}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{novembre}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{d\'ecembre}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{f\'ev##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{avr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{mai}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{juin}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{juil##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{ao\^ut}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{sept##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{oct##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{d\'ec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{Dans}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{Dans}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{R\'ed##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{R\'edacteur}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{R\'eds##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{R\'edacteurs}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{T##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Tome}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{%
      N\textsuperscript{o}\kern.2em\relax}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Num\'ero}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{\'Ed##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{\'Edition}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Chap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Chapitre}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Page}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Pages}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Rap. tech##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Rapport technique}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{visit\'e le}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
%    \end{macrocode}
% Names of all known languages in the current language.
%    \begin{macrocode}
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{anglais}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{allemand}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugais}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugais}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{anglais}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgare}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{anglais}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{fran\c{c}ais}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catalan}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croate}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tch\`eque}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{danois}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{n\'eerlandais}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{anglais}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finnois}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{fran\c{c}ais}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{fran\c{c}ais}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{fran\c{c}ais}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{allemand}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{allemand}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{grec}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{h\'ebreu}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{hongrois}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{islandais}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irlandais}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italien}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latin}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{allemand}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{allemand}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norv\'egien}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{nouveau
        norv\'egien}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polonais}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugais}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugais}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russe}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{\'ecossais}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbe}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{espagnol}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{su\'edois}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turc}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{anglais}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{anglais}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Copy the commands to the other languages.
%    \begin{macrocode}
\newcommand\bibsfrancais{\bibsfrench[francais]}
\newcommand\bibsfrenchb{\bibsfrench[frenchb]}
\newcommand\bibscanadien{\bibsfrench[canadien]}
%    \end{macrocode}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage    
  \else
    \bbbbaddto{francais}{bibsfrancais}
    \bbbbaddto{french}{bibsfrench}
    \bbbbaddto{frenchb}{bibsfrenchb}
    \bbbbaddto{canadien}{bibscanadien}
  \fi
%    \end{macrocode}
% Switch on the change of case in titles for all French dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{francais}{btxifchangecaseoff}
  \bbbbaddto{french}{btxifchangecaseoff}
  \bbbbaddto{frenchb}{btxifchangecaseoff}
  \bbbbaddto{canadien}{btxifchangecaseoff}
}
%    \end{macrocode}
% \changes{0.43}{2004/01/06}{Warn if using \texttt{french} language}%
% \changes{0.44}{2004/01/06}{Only warn if babel version is too old}%
% \changes{1.00}{2005/02/16}{Remove warning for old babel package with
%   \texttt{french} language}%
%    \begin{macrocode}
%</french>
%    \end{macrocode}
%
% \subsubsection{Spanish}
% \changes{0.33}{2003/05/22}{Added Spanish language}%
%    \begin{macrocode}
%<*spanish>
%    \end{macrocode}
%
% The language definition for Spanish was provided by V{\'\i}ctor
% Lua{\~n}a and slightly changed by me according to |spanish.mbs|
% (custom-bib package).
%
% \begin{macro}{\bibsspanish}
% Bibliographic commands for Spanish.
%    \begin{macrocode}
\newcommand\bibsspanish[1][spanish]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{y~cols##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{y~colaboradores}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{y}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{y}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{editor}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{eds##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{editores}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volumen}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{%
      n\textsuperscript{\underline{o}}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{n\'umero}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{edici{\'o}n}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{cap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{cap{\'\i}tulo}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p\'ag##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{p\'agina}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{p\'ags##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{p\'aginas}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Tesis de Licenciatura}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{Tesis de Doctorado}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Informe t\'ecnico##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Informe t\'ecnico}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Enero}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Febrero}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Marzo}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{Abril}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Mayo}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Junio}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Julio}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{Agosto}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{Septiembre}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Octubre}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{Noviembre}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{Deciembre}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Ene##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Abr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{May}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Ago##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Oct##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dic##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{En}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{En}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Editor}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Editores}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volumen}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{%
      N\textsuperscript{\underline{o}}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{N\'umero}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Edici\'on}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Cap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Cap\'\itulo}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P\'ag##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{P\'agina}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{P\'ags##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{P\'aginas}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Informe t\'ecnico}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Informe t\'ecnico}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{visitado el}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{ingl\'es}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{alem\'an}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugu\'es}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugu\'es}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{ingl\'es}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{b\'ulgaro}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{ingl\'es}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{franc\'es}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catalan}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croata}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{checo}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{dan\'es}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{holand\'es}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{ingl\'es}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finland\'es}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{franc\'es}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{franc\'es}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{franc\'es}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{alem\'an}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{alem\'an}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{griego}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebreo}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{h\'ungaro}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{island\'es}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irland\'es}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italiano}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{lat\'\i n}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{alem\'an}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{alem\'an}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{noruego}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{noruego}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polaco}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugu\'es}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugu\'es}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{ruso}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{escoc\'es}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbio}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{espa\~nol}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{sueco}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turco}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{ingl\'es}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{ingl\'es}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Copy the commands to the other languages.
%    \begin{macrocode}
\newcommand\bibsmexican[1][mexican]{%
  \bibsspanish[mexican]%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Tesis de Maestr{\'\i}a}}%
}
%    \end{macrocode}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{spanish}{bibsspanish}
    \bbbbaddto{mexican}{bibsmexican}
  \fi
  \bbbbaddto{spanish}{btxifchangecaseoff}
  \bbbbaddto{mexican}{btxifchangecaseoff}
}
%</spanish>
%    \end{macrocode}
%
% \subsubsection{Danish}
% \changes{0.33}{2003/05/22}{Added Danish language}%
%    \begin{macrocode}
%<*danish>
%    \end{macrocode}
%
% \begin{macro}{\bibsdanish}
% Bibliographic commands for Danish.
%    \begin{macrocode}
\newcommand\bibsdanish[1][danish]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{og}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{og}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{af}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{af}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{redakt\o r}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{redakt\o rer}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{bd##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{bind}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{nr##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{nummer}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{udg##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{udgave}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{kap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{kapitel}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{s##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{side}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{pp##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{sider}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Speciale}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{ph.d.-afhandling}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Tekn.\ rap##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Teknisk rapport}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januar}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februar}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Marts}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Maj}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Juni}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Juli}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{August}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktober}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{December}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Maj}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{I}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{I}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Redakt\o r}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Redakt\o rer}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Bd##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Bind}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{Nr##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Nummer}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Udg##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Udgave}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Kap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Kapitel}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{S##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Side}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pp##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Sider}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tekn.\ rap##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Teknisk rapport}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{bes\o gt den}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgarsk}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalansk}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroatisk}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tjekkisk}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{dansk}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{nederlandsk}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finsk}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{fransk}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{gr\ae sk}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebraisk}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{ungarsk}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{islandsk}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irsk}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italiensk}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latinsk}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{tysk}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norsk}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{nynorsk}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polsk}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugisisk}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russisk}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{skotsk}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbisk}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spansk}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{svensk}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{tyrkisk}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{engelsk}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{engelsk}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{danish}{bibsdanish}
  \fi
  \bbbbaddto{danish}{btxifchangecaseoff}
}
%</danish>
%    \end{macrocode}
%
% \subsubsection{Finnish}
% \changes{0.45}{2004/04/21}{Added Finnish language}%
%    \begin{macrocode}
%<*finnish>
%    \end{macrocode}
%
% \begin{macro}{\bibsfinnish}
% Bibliographic commands for Finnish.
%    \begin{macrocode}
\newcommand\bibsfinnish[1][finnish]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{ja}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{ja}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{teoksessa}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{teoksessa}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{sarjassa}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{sarjassa}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{sarjassa}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{sarjassa}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{toim##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{toimittaja}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{toim##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{toimittajat}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{nide}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{nide}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{nro##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{numero}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{painos}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{l##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{luku}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{s##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{sivu}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{ss##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{sivut}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Pro Gradu -ty\"o}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{v\"ait\"oskirja}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{tekn.\ rap##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{tekninen raportti}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{tammikuu}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{helmikuu}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{maaliskuu}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{huhtikuu}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{toukokuu}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{kes\"akuu}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{hein\"akuu}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{elokuu}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{syyskuu}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{lokakuu}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{marraskuu}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{joulukuu}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{tam##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{hel##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{maa##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{huh##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{tou##1{}}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{kes##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{hei##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{elo##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{syy##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{lok##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{mar##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{jou##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{Teoksessa}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{Teoksessa}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Toim##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Toimittaja}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Toim##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Toimittajat}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Nide##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Nide}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{Nro##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Numero}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Painos}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{L##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Luku}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{S##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Sivu}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Ss##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Sivut}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tekn.\ rap##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Tekninen raportti}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{vierailtu}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{englanti}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{saksa}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugali}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugali}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{englanti}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgaria}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{englanti}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{ranska}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalaani}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroaati}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tsekki}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{tanska}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{hollanti}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{englanti}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{suomi}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{ranska}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{ranska}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{ranska}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{saksa}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{saksa}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{kreikka}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{heprea}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{unkari}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{islanti}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{iiri}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italia}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latina}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{saksa}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{saksa}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norja}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{uusnorja}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{puola}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugali}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugali}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{ven\"j\"a}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{skotti}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbi}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{espanja}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{ruotsi}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turkki}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{englanti}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{englanti}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{finnish}{bibsfinnish}
  \fi
%    \end{macrocode}
% Switch off the change of case in titles by appending
% \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{finnish}{btxifchangecaseoff}
}
%</finnish>
%    \end{macrocode}
%
% \subsubsection{Esperanto}
% \changes{0.45}{2004/04/21}{Added Esperanto language}%
%    \begin{macrocode}
%<*esperanto>
%    \end{macrocode}
%
% \begin{macro}{\bibsesperanto}
% Bibliographic commands for Esperanto.
%    \begin{macrocode}
\newcommand\bibsesperanto[1][esperanto]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{k~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{kaj~aliaj}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{k}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{kaj}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{redaktoro}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{red-oj##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{redaktoroj}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volumo}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{no##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{nombro}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{redakcio}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{\^c##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{\^capitro}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{pa\^go}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{pp##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{pa\^goj}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{magistra disertacio}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{doktora disertacio}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Tekn.\ rap##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Teknika raporto}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januaro}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februaro}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Marco}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{Aprilo}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Majo}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Junio}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Julio}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{A\u{u}gusto}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{Septembro}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktobro}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{Novembro}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{Decembro}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Maj##1{}}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sept##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{En}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{En}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Redaktoro}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Redaktoroj}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volumo}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{No##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Nombro}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Redakcio}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{\^C##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{\^Capitro}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Pa\^go}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pp##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Pa\^goj}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tekn.\ Rap##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Teknika Raporto}}%
%  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{??}}%
  \def\btxurldatecomment##1{\PackageError{babelbib}{Comment for
      urldate in Esperanto undefined. Please send the translation for 
      'visited on' to harald.harders@tu-bs.de}{}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{angla}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{germana}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugala}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugala}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{angla}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgara}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{angla}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{franca}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalana}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroata}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{\^ce\^ha}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{dana}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{nederlanda}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{angla}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finna}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{franca}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{franca}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{franca}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{germana}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{germana}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{greka}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebrea}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{hungara}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{islanda}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irlanda}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{itala}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latino}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{germana}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{germana}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norvega}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{nov-norvega}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{pola}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugala}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugala}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{rusa}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{skota}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serba}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{hispana}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{sveda}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turka}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{angla}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{angla}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{esperanto}{bibsesperanto}
  \fi
%    \end{macrocode}
% Switch off the change of case in titles by appending
% \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{esperanto}{btxifchangecaseoff}
}
%</esperanto>
%    \end{macrocode}
%
% \subsubsection{Portuguese}
% \changes{0.33}{2003/05/22}{Added Portuguese language}%
% \changes{1.02}{2005/04/15}{Language Portuguese completed}%
% \changes{1.10}{2005/04/24}{Bug in Portuguese removed}%
%    \begin{macrocode}
%<*portuguese>
%    \end{macrocode}
%
% \begin{macro}{\bibsportuguese}
% Bibliographic commands for Portuguese.
%    \begin{macrocode}
\newcommand\bibsportuguese[1][portuguese]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}% 
  \def\btxandshort##1{\protect\foreignlanguage{#1}{e}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{e}}%
  \def\btxandcomma##1{,}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{de}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{editor}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{eds##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{editores}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volume}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{%
      n\textsuperscript{\underline{o}}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{n\'umero}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{edi\c c\~ao}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{cap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{cap\'\i tulo}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p\'ag##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{p\'agina}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{p\'ags##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{p\'aginas}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Tese de Mestrado}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{Tese de Doutoramento}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Rel.\ T\'ec##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Relat\'orio T\'ecnico}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{janeiro}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{fevereiro}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{mar\c co}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{abril}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{maio}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{junho}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{julho}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{agosto}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{setembro}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{outubro}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{novembro}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{dezembro}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{fev##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{mar##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{maio}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{jun##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{jul##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{ago##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{set##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{out##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{dez##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Editor}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Eds##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Editores}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volume}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{%
      N\textsuperscript{\underline{o}}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{N\'umero}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Edi\c c\~ao}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Cap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Cap\'{\i}tulo}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P\'ag##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{P\'agina}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{P\'ags##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{P\'aginas}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Rel.\ T\'ec##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Relat\'orio T\'ecnico}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{acedido em}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{ingl\^es}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{alem\~ao}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugu\^es}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugu\^es}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{ingl\^es}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{b\'ulgaro}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{ingl\^es}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{franc\^es}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catal\~ao}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croata}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{checo}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{dinamarqu\^es}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{holand\^es}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{ingl\^es}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finland\^es}}%
    \def\btxlanguagenamefranceis{\protect\foreignlanguage{#1}{franc\^es}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{franc\^es}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{franc\^es}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{\alem\~ao}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{\alem\~ao}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{grego}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebreu}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{h\'ungaro}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{island\^es}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irland\^es}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italiano}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latim}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{\alem\~ao}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{\alem\~ao}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{noruegu\^es}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{neo-noruegu\^es}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polaco}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugu\^es}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugu\^es}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russio}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{escoc\^es}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{s\'ervio}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{espanhol}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{sueco}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turco}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{ingl\^es}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{ingl\^es}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Copy the commands to the other languages.
%    \begin{macrocode}
\newcommand\bibsbrazil{\bibsportuguese[brazil]}
\newcommand\bibsbrazilian{\bibsportuguese[brazilian]}
\newcommand\bibsportuges{\bibsportuguese[portuges]}
%    \end{macrocode}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage    
  \else
    \bbbbaddto{brazil}{bibsbrazil}
    \bbbbaddto{brazilian}{bibsbrazilian}
    \bbbbaddto{portuges}{bibsportuges}
    \bbbbaddto{portuguese}{bibsportuguese}
  \fi
%    \end{macrocode}
% Switch off the change of case in titles for all Portuguese dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{brazil}{btxifchangecaseoff}
  \bbbbaddto{brazilian}{btxifchangecaseoff}
  \bbbbaddto{portuges}{btxifchangecaseoff}
  \bbbbaddto{portuguese}{btxifchangecaseoff}
}
%</portuguese>
%    \end{macrocode}
%
% \subsubsection{Dutch}
% \changes{0.33}{2003/05/22}{Added Dutch language}%
%    \begin{macrocode}
%<*dutch>
%    \end{macrocode}
%
% \begin{macro}{\bibsdutch}
% Bibliographic commands for Dutch.
%    \begin{macrocode}
\newcommand\bibsdutch[1][dutch]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{en anderen}}% 
  \def\btxandshort##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxandcomma##1{,}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{van}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{van}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{redactie}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{redactie}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volume}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{nr##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{nummer}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{druk}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{uitgave}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{hfdst##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{hoofdstuk}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{pag##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{pagina}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{pag##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{pagina's}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{scriptie}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{proefschrift}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Tech.\ Rapp##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Technisch Rapport}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januari}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februari}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Maart}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Mei}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Juni}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Juli}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{Augustus}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktober}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{December}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mrt}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Mei}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Redactie}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Redactie}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volume}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{Nr##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Nummer}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Druk}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Uitgave}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Hfdst##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Hoofdstuk}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{Pag##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Pagina}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pags##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Pagina's}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tech.\ Rapp##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Technisch Rapport}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{bezocht op}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{engels}}%
 %   \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{german}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{engels}}%
 %   \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgarian}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{engels}}%
 %   \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{french}}%
 %   \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catalan}}%
 %   \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croatian}}%
 %   \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{czech}}%
 %   \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{d\"anisch}}%
 %   \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{dutch}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{engels}}%
 %   \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
 %   \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finnish}}%
 %   \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{french}}%
 %   \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{french}}%
 %   \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{french}}%
 %   \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{german}}%
 %   \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{german}}%
 %   \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{greek}}%
 %   \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebrew}}%
 %   \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{hungarian}}%
 %   \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{icelandic}}%
 %   \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irish}}%
 %   \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italian}}%
 %   \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latin}}%
 %   \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{german}}%
 %   \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{german}}%
 %   \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norwegian}}%
 %   \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{new-norwegian}}%
 %   \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polish}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugees}}%
 %   \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{russian}}%
 %   \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{scottish}}%
 %   \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbian}}%
 %   \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spanish}}%
 %   \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{swedish}}%
 %   \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turkish}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{engels}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{engels}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage    
  \else
    \bbbbaddto{dutch}{bibsdutch}
  \fi
%    \end{macrocode}
% Switch on the change of case in titles for all Dutch dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{dutch}{btxifchangecaseoff}
}
%</dutch>
%    \end{macrocode}
%
% \subsubsection{Swedish}
% \changes{0.33}{2003/05/22}{Added Swedish language}%
% \changes{0.41}{2003/11/03}{Corrected swedish (by Hans Fredrik Nordhaug)}%
%    \begin{macrocode}
%<*swedish>
%    \end{macrocode}
%
% The language definition for Swedish was provided by Hans Fredrik
% Nordhaug.
%
% \begin{macro}{\bibsswedish}
% Bibliographic commands for Swedish.
%    \begin{macrocode}
\newcommand\bibsswedish[1][swedish]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{och}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{och}}%
  \def\btxandcomma##1{,}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{av}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{av}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{redakt\"or}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{redakt\"orer}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volym}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{nr##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{nummer}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{utg}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{utg\aa va}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{kap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{kapitel}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{s##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{sida}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{s##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{sidor}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{scriptie}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{proefschrift}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Tech.\ Rapp##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Technisch Rapport}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januari}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februari}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Mars}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Maj}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Juni}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Juli}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{Augusti}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktober}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{December}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mar}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Maj}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun##1{}}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul##1{}}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Dec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{I}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{I}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Redactie}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Redactie}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volume}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{Nr##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Nummer}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Druk}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Utgave}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Hfdst##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Hoofdstuk}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{Pag##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Pagina}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pags##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Pagina's}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tech.\ Rapp##1{}}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Technisch Rapport}}%
%  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{??}}%
  \def\btxurldatecomment##1{\PackageError{babelbib}{Comment for
      urldate in Swedish undefined. Please send the translation for 
      'visited on' to harald.harders@tu-bs.de}{}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{engelska}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{tyska}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugisiska}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugisiska}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{engelska}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgariska}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{engelska}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{franska}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalanska}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroatiska}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tjeckiska}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{danska}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{nederl\"andska}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{engelska}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finska}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{franska}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{franska}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{franska}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{tyska}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{tyska}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{grekiska}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebreiska}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{ungerska}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{isl\"andska}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{iriska}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{italienska}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{latin}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{tyska}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{tyska}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{norska}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{nynorska}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polska}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugisiska}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugisiska}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{ryska}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{skotsks}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbiska}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{spanska}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{svenska}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turkiska}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{engelska}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{engelska}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{swedish}{bibsswedish}
  \fi
%    \end{macrocode}
% Switch on the change of case in titles for all Swedish dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{swedish}{btxifchangecaseoff}
}
%</swedish>
%    \end{macrocode}
%
% \subsubsection{Afrikaans}
% \changes{0.34}{2003/07/28}{Added Afrikaans language}%
%    \begin{macrocode}
%<*afrikaans>
%    \end{macrocode}
%
% The language definition for Afrikaans was provided by Danie Els.
%
% \begin{macro}{\bibsafrikaans}
% Bibliographic commands for Afrikaans.
%    \begin{macrocode}
\newcommand\bibsafrikaans[1][afrikaans]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{et~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{et~alii}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{en}}%
  \def\btxandcomma##1{\protect\foreignlanguage{#1}{}}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxinshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofseriesshort##1{\protect\foreignlanguage{#1}{van}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{van}}%
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{in}}%
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{red##1{}}}%
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{redakteur}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{reds##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{redakteurs}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volume}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{no##1{}}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{nommer}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{uitg##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{uitgawe}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{hfst##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{hoofstuk}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{bladsy}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{pp##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{bladsye}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Meesters tesis}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{PhD verhandeling}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Tegn.\ versl##1{}}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Tegniese verslag}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{Januarie}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{Februarie}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{Maart}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{April}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{Mei}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{Junie}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{Julie}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{Augustus}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{September}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{Oktober}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{November}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{Desember}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{Jan##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{Feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{Mrt##1{}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{Apr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{Mei##1}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{Jun##1}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{Jul##1}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{Aug##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{Sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{Okt##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{Nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{Des##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{In}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Red##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Redakteur}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Reds##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Redakteurs}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volume}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{No##1{}}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{Nommer}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Uitg##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Uitgawe}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Hfst##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Hoofstuk}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{Bladsy}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{Pp##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{Bladsye}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Tegn.\ Verslag}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Tegniese Verslag}}%
%  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{??}}%
  \def\btxurldatecomment##1{\PackageError{babelbib}{Comment for
      urldate in Afrikaans undefined. Please send the translation for 
      'visited on' to harald.harders@tu-bs.de}{}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameafrikaans{\protect\foreignlanguage{#1}{afrikaans}}%
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{engels}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{duits}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{engels}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{bulgaars}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{engels}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{frans}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{katalaans}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{kroaties}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{tsjeggies}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{deens}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{nederlands}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{engels}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{fins}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{frans}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{frans}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{frans}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{duits}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{duits}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{grieks}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebreeus}}%
    \def\btxlanguagenamenhungarian{\protect\foreignlanguage{#1}{hongaars}}%
    \def\btxlanguagenamenicelandic{\protect\foreignlanguage{#1}{yslands}}%
    \def\btxlanguagenamenirish{\protect\foreignlanguage{#1}{iers}}%
    \def\btxlanguagenamenitalian{\protect\foreignlanguage{#1}{italiaans}}%
    \def\btxlanguagenamenlatin{\protect\foreignlanguage{#1}{latyn}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{duits}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{duits}}%
    \def\btxlanguagenamennorsk{\protect\foreignlanguage{#1}{noors}}%
    \def\btxlanguagenamennynorsk{\protect\foreignlanguage{#1}{neo-noors}}%
    \def\btxlanguagenamenpolish{\protect\foreignlanguage{#1}{pools}}%
    \def\btxlanguagenamenportuges{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenamenportuguese{\protect\foreignlanguage{#1}{portugees}}%
    \def\btxlanguagenamenrussian{\protect\foreignlanguage{#1}{russies}}%
    \def\btxlanguagenamenscottish{\protect\foreignlanguage{#1}{skots}}%
    \def\btxlanguagenamenserbian{\protect\foreignlanguage{#1}{serwies}}%
    \def\btxlanguagenamenspanish{\protect\foreignlanguage{#1}{spaans}}%
    \def\btxlanguagenamenswedish{\protect\foreignlanguage{#1}{sweeds}}%
    \def\btxlanguagenamenturkish{\protect\foreignlanguage{#1}{turks}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{engels}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{engels}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{afrikaans}{bibsafrikaans}
  \fi
%    \end{macrocode}
% Switch on the change of case in titles for all Afrikaans dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{afrikaans}{btxifchangecaseoff}
}
%</afrikaans>
%    \end{macrocode}
%
% \subsubsection{Catalan}
% \changes{1.00}{2005/02/16}{Added Catalan language}%
%    \begin{macrocode}
%<*catalan>
%    \end{macrocode}
%
% The language definition for Catalan was provided by
% Robert Fuster, rfuster@imm.upv.es.
%
% \begin{macro}{\bibsafrikaans}
%    \begin{macrocode}
\newcommand\bibscatalan[1][catalan]{%
  \def\biblanguagename{#1}%
  \def\btxetalshort##1{\protect\foreignlanguage{#1}{i~al##1{}}}%
  \def\btxetallong##1{\protect\foreignlanguage{#1}{i~altres}}%
  \def\btxandshort##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxandlong##1{\protect\foreignlanguage{#1}{i}}%
  \def\btxandcomma##1{}%
  \def\btxinlong##1{\protect\foreignlanguage{#1}{dins}}% 
  \def\btxinshort##1{\protect\foreignlanguage{#1}{dins}}%
  \def\btxinseriesshort##1{\protect\foreignlanguage{#1}{dins}}% 
  \def\btxofserieslong##1{\protect\foreignlanguage{#1}{de}}% 
  \def\btxinserieslong##1{\protect\foreignlanguage{#1}{dins}}% 
  \def\btxeditorshort##1{\protect\foreignlanguage{#1}{ed##1{}}}% 
  \def\btxeditorlong##1{\protect\foreignlanguage{#1}{editor}}%
  \def\btxeditorsshort##1{\protect\foreignlanguage{#1}{eds##1{}}}%
  \def\btxeditorslong##1{\protect\foreignlanguage{#1}{editors}}%
  \def\btxvolumeshort##1{\protect\foreignlanguage{#1}{vol##1{}}}%
  \def\btxvolumelong##1{\protect\foreignlanguage{#1}{volum}}%
  \def\btxnumbershort##1{\protect\foreignlanguage{#1}{n}}%
  \def\btxnumberlong##1{\protect\foreignlanguage{#1}{n\'umero}}%
  \def\btxeditionshort##1{\protect\foreignlanguage{#1}{ed##1{}}}%
  \def\btxeditionlong##1{\protect\foreignlanguage{#1}{edici{\'o}}}%
  \def\btxchaptershort##1{\protect\foreignlanguage{#1}{cap##1{}}}%
  \def\btxchapterlong##1{\protect\foreignlanguage{#1}{cap{\'\i}tol}}%
  \def\btxpageshort##1{\protect\foreignlanguage{#1}{p##1{}}}%
  \def\btxpagelong##1{\protect\foreignlanguage{#1}{p\`agina}}%
  \def\btxpagesshort##1{\protect\foreignlanguage{#1}{ps##1{}}}%
  \def\btxpageslong##1{\protect\foreignlanguage{#1}{p\`agines}}%
  \def\btxmastthesis##1{\protect\foreignlanguage{#1}{Tesina de Llicenciatura}}%
  \def\btxphdthesis##1{\protect\foreignlanguage{#1}{Tesi de Doctorat}}%
  \def\btxtechrepshort##1{\protect\foreignlanguage{#1}{Rep. t\`ecnic}}%
  \def\btxtechreplong##1{\protect\foreignlanguage{#1}{Report t\`ecnic}}%
  \def\btxmonjanlong##1{\protect\foreignlanguage{#1}{gener}}%
  \def\btxmonfeblong##1{\protect\foreignlanguage{#1}{febrer}}%
  \def\btxmonmarlong##1{\protect\foreignlanguage{#1}{mar\c{c}}}%
  \def\btxmonaprlong##1{\protect\foreignlanguage{#1}{abril}}%
  \def\btxmonmaylong##1{\protect\foreignlanguage{#1}{maig}}%
  \def\btxmonjunlong##1{\protect\foreignlanguage{#1}{juny}}%
  \def\btxmonjullong##1{\protect\foreignlanguage{#1}{juliol}}%
  \def\btxmonauglong##1{\protect\foreignlanguage{#1}{agost}}%
  \def\btxmonseplong##1{\protect\foreignlanguage{#1}{setembre}}%
  \def\btxmonoctlong##1{\protect\foreignlanguage{#1}{octubre}}%
  \def\btxmonnovlong##1{\protect\foreignlanguage{#1}{novembre}}%
  \def\btxmondeclong##1{\protect\foreignlanguage{#1}{desembre}}%
  \def\btxmonjanshort##1{\protect\foreignlanguage{#1}{gen##1{}}}%
  \def\btxmonfebshort##1{\protect\foreignlanguage{#1}{feb##1{}}}%
  \def\btxmonmarshort##1{\protect\foreignlanguage{#1}{mar\c{c}}}%
  \def\btxmonaprshort##1{\protect\foreignlanguage{#1}{abr##1{}}}%
  \def\btxmonmayshort##1{\protect\foreignlanguage{#1}{maig}}%
  \def\btxmonjunshort##1{\protect\foreignlanguage{#1}{juny}}%
  \def\btxmonjulshort##1{\protect\foreignlanguage{#1}{jul}}%
  \def\btxmonaugshort##1{\protect\foreignlanguage{#1}{ago##1{}}}%
  \def\btxmonsepshort##1{\protect\foreignlanguage{#1}{sep##1{}}}%
  \def\btxmonoctshort##1{\protect\foreignlanguage{#1}{oct##1{}}}%
  \def\btxmonnovshort##1{\protect\foreignlanguage{#1}{nov##1{}}}%
  \def\btxmondecshort##1{\protect\foreignlanguage{#1}{dec##1{}}}%
  \def\Btxinlong##1{\protect\foreignlanguage{#1}{Dins}}%
  \def\Btxinshort##1{\protect\foreignlanguage{#1}{Dins}}%
  \def\Btxeditorshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorlong##1{\protect\foreignlanguage{#1}{Editor}}%
  \def\Btxeditorsshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditorslong##1{\protect\foreignlanguage{#1}{Editors}}%
  \def\Btxvolumeshort##1{\protect\foreignlanguage{#1}{Vol##1{}}}%
  \def\Btxvolumelong##1{\protect\foreignlanguage{#1}{Volum}}%
  \def\Btxnumbershort##1{\protect\foreignlanguage{#1}{N\'um}}%
  \def\Btxnumberlong##1{\protect\foreignlanguage{#1}{N\'umero}}%
  \def\Btxeditionshort##1{\protect\foreignlanguage{#1}{Ed##1{}}}%
  \def\Btxeditionlong##1{\protect\foreignlanguage{#1}{Edici\'o}}%
  \def\Btxchaptershort##1{\protect\foreignlanguage{#1}{Cap##1{}}}%
  \def\Btxchapterlong##1{\protect\foreignlanguage{#1}{Cap\'\itol}}%
  \def\Btxpageshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpagelong##1{\protect\foreignlanguage{#1}{P\`agina}}%
  \def\Btxpagesshort##1{\protect\foreignlanguage{#1}{P##1{}}}%
  \def\Btxpageslong##1{\protect\foreignlanguage{#1}{P\`agines}}%
  \def\Btxtechrepshort##1{\protect\foreignlanguage{#1}{Rep. t\`ecnic}}%
  \def\Btxtechreplong##1{\protect\foreignlanguage{#1}{Report t\`ecnic}}%
  \def\btxurldatecomment##1{\protect\foreignlanguage{#1}{visitada el}}%
  \def\btxurldatecomment##1{\PackageError{babelbib}{Comment for
      urldate in Catalan undefined. Please send the translation for 
      'visited on' to harald.harders@tu-bs.de}{}}%
  \def\btxkeywordlanguage##1{\protect\foreignlanguage{#1}{##1}}%
  \ifbbbblanguagenames
    \def\btxlanguagenameamerican{\protect\foreignlanguage{#1}{angl\`es}}%
    \def\btxlanguagenameaustrian{\protect\foreignlanguage{#1}{alem\`any}}%
    \def\btxlanguagenamebrazil{\protect\foreignlanguage{#1}{portugu\`es}}%
    \def\btxlanguagenamebrazilian{\protect\foreignlanguage{#1}{portugu\`es}}%
    \def\btxlanguagenamebritish{\protect\foreignlanguage{#1}{angl\'es}}%
    \def\btxlanguagenamebulgarian{\protect\foreignlanguage{#1}{b\'ulgar}}%
    \def\btxlanguagenamecanadian{\protect\foreignlanguage{#1}{angl\`es}}%
    \def\btxlanguagenamecanadien{\protect\foreignlanguage{#1}{franc\`es}}%
    \def\btxlanguagenamecatalan{\protect\foreignlanguage{#1}{catal\`a}}%
    \def\btxlanguagenamecroatian{\protect\foreignlanguage{#1}{croat}}%
    \def\btxlanguagenameczech{\protect\foreignlanguage{#1}{txec}}%
    \def\btxlanguagenamedanish{\protect\foreignlanguage{#1}{dan\`es}}%
    \def\btxlanguagenamedutch{\protect\foreignlanguage{#1}{neerland\`es}}%
    \def\btxlanguagenameenglish{\protect\foreignlanguage{#1}{angl\`es}}%
    \def\btxlanguagenameesperanto{\protect\foreignlanguage{#1}{esperanto}}%
    \def\btxlanguagenamefinnish{\protect\foreignlanguage{#1}{finland\`es}}%
    \def\btxlanguagenamefrancais{\protect\foreignlanguage{#1}{franc\`es}}%
    \def\btxlanguagenamefrench{\protect\foreignlanguage{#1}{franc\`es}}%
    \def\btxlanguagenamefrenchb{\protect\foreignlanguage{#1}{franc\`es}}%
    \def\btxlanguagenamegerman{\protect\foreignlanguage{#1}{alem\`any}}%
    \def\btxlanguagenamegermanb{\protect\foreignlanguage{#1}{alem\`any}}%
    \def\btxlanguagenamegreek{\protect\foreignlanguage{#1}{grec}}%
    \def\btxlanguagenamehebrew{\protect\foreignlanguage{#1}{hebreu}}%
    \def\btxlanguagenamehungarian{\protect\foreignlanguage{#1}{hongar\`es}}%
    \def\btxlanguagenameicelandic{\protect\foreignlanguage{#1}{island\`es}}%
    \def\btxlanguagenameirish{\protect\foreignlanguage{#1}{irland\`es}}%
    \def\btxlanguagenameitalian{\protect\foreignlanguage{#1}{itali\`a}}%
    \def\btxlanguagenamelatin{\protect\foreignlanguage{#1}{llat\'\i}}%
    \def\btxlanguagenamenaustrian{\protect\foreignlanguage{#1}{alem\`any}}%
    \def\btxlanguagenamengerman{\protect\foreignlanguage{#1}{alem\`any}}%
    \def\btxlanguagenamenorsk{\protect\foreignlanguage{#1}{noruec}}%
    \def\btxlanguagenamenynorsk{\protect\foreignlanguage{#1}{noruec}}%
    \def\btxlanguagenamepolish{\protect\foreignlanguage{#1}{polon\`es}}%
    \def\btxlanguagenameportuges{\protect\foreignlanguage{#1}{portugu\`es}}%
    \def\btxlanguagenameportuguese{\protect\foreignlanguage{#1}{portugu\`es}}%
    \def\btxlanguagenamerussian{\protect\foreignlanguage{#1}{rus}}%
    \def\btxlanguagenamescottish{\protect\foreignlanguage{#1}{escoc\`es}}%
    \def\btxlanguagenameserbian{\protect\foreignlanguage{#1}{serbi}}%
    \def\btxlanguagenamespanish{\protect\foreignlanguage{#1}{espa\~nol}}%
    \def\btxlanguagenameswedish{\protect\foreignlanguage{#1}{suec}}%
    \def\btxlanguagenameturkish{\protect\foreignlanguage{#1}{turc}}%
    \def\btxlanguagenameUKenglish{\protect\foreignlanguage{#1}{angl\`es}}%
    \def\btxlanguagenameUSenglish{\protect\foreignlanguage{#1}{angl\`es}}%
  \fi
}
%    \end{macrocode}
% \end{macro}
% Append the definitions to the language-calling commands.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifbbbbfixlanguage
  \else
    \bbbbaddto{catalan}{bibscatalan}
  \fi
%    \end{macrocode}
% Switch on the change of case in titles for all Afrikaans dialects by
% appending \cs{btxifchangecaseoff} to \cs{extras}\meta{language}.
%    \begin{macrocode}
  \bbbbaddto{catalan}{btxifchangecaseoff}
}
%</catalan>
%    \end{macrocode}
%
% \section{\BibTeX\ style files}
% \changes{0.40}{2003/09/26}{Moved the \texttt{bst} files into the
%   global \texttt{dtx} file}%
%
% \subsection{``Normal'' \BibTeX\ style files}
%
% \subsubsection{Generic code}
%
% Because most parts of the \BibTeX\ style files are equal for all
% styles, they are generated from the same source code.
%    \begin{macrocode}
%<*bststd>
%    \end{macrocode}
% Declare the data fields that are handled by the \BibTeX\ styles.
%    \begin{macrocode}
ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    isbn
    issn
    journal
    key
    language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    url
    urldate
    volume
    year
  }
  {}
%</bststd>
%<bststd&!bstalpha>  { label }
%<bststd&bstalpha>  { label extra.label sort.label }
%<*bststd>

%    \end{macrocode}
% Declare integer variables.
%    \begin{macrocode}
INTEGERS
  { output.state
    before.all
    mid.sentence
    after.sentence
    after.block
    before.title
  }

%    \end{macrocode}
% Declare string variables.
%    \begin{macrocode}
STRINGS
  { s
    t
    language.state
    change.temp
    isbn.command
  }

%    \end{macrocode}
% Declare the constants that define at which position within a
% citation we are when processing it.
%    \begin{macrocode}
FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
  #4 'before.title :=
  "nostate" 'language.state :=
}

%    \end{macrocode}
% Logical function |not|.
%
% Syntax: \meta{int1} |not| $\longrightarrow$ \meta{int2}.
%
% Returns |1| if \meta{arg1} != |0|, |0| otherwise.
%    \begin{macrocode}
FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

%    \end{macrocode}
% Logical function |and|.
% Syntax: \meta{arg1} \meta{arg1} |and|.
% Returns |1| if \meta{arg1} == |true| and \meta{arg2} == |true|, |0|
% otherwise.
%    \begin{macrocode}
FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

%    \end{macrocode}
% Logical function |or|.
% Syntax: \meta{arg1} \meta{arg1} |or|.
% Returns |1| if \meta{arg1} == |true| or \meta{arg2} == |true|, |0|
% otherwise.
%    \begin{macrocode}
FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

%    \end{macrocode}
% Function |language.change.case|.
% Syntax: \meta{string1} \meta{string2} |language.change.case|
% $\longrightarrow$ \meta{string3}
% This function has the same syntax as |change.case$| but writes
% \meta{string1} twice into \meta{string3}, first with changed case,
% second with original case.
%    \begin{macrocode}
FUNCTION {language.change.case}
{ 
  'change.temp :=
  't :=
  "\btxifchangecase {"
  t change.temp change.case$ *
  "}{" *
  t *
  "}" *
}

%    \end{macrocode}
% Generates output for the string \meta{string1}.
% Syntax: \meta{string1} |output.nonnull| $\longrightarrow$ \meta{string2}
%    \begin{macrocode}
FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
        { add.period$ write$
          newline$
          "\newblock " write$
        }
        { output.state before.all =
            'write$
            {
              output.state before.title =
                { "\btxauthorcolon\ " * write$ }
                { add.period$ " " * write$ }
              if$
            }
          if$
        }
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

%    \end{macrocode}
% Generates output if the given string \meta{string1} is not empty.
% Syntax: \meta{string1} |output.nonnull| $\longrightarrow$ \meta{string2}
%    \begin{macrocode}
FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

%    \end{macrocode}
% Outputs a bibliography item.
%    \begin{macrocode}
FUNCTION {output.bibitem}
{ newline$
%    \end{macrocode}
% \changes{0.40}{2003/09/26}{Switch to a fall-back language when
%   \texttt{language} field is missing}%
% If no language is given, fall back to the language that has been
% active at \cs{begin\{document\}} or to the given fall-back
% language.
% For \BibTeX, this language gets the name \texttt{nolanguage}.
%    \begin{macrocode}
  language empty$
    { "empty language in " cite$ * warning$
      language.state "nolanguage" =
        'skip$
        {
          "\expandafter\btxselectlanguage\expandafter {"
          "\btxfallbacklanguage}" * write$
          newline$
        }
      if$
      "nolanguage" 'language.state :=
    }
    { language.state language =
        'skip$
        { "\btxselectlanguage {" language * "}" * write$
          newline$
        }
      if$
      language 'language.state :=
    }
  if$
%</bststd>
%<bststd&!bstalpha>  "\bibitem{" write$
%<bststd&bstalpha>  "\bibitem[" label * "]{" * write$
%<*bststd>
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

%    \end{macrocode}
% Output an ISBN or ISSN.
%
% Syntax: \meta{string1} \meta{string2} |output.isbn|
%
% Prints the ISBN or ISSN given by \meta{string1} and uses the \TeX\
% macro given by \meta{string2} to determine if the text is printed or
% not.
% \meta{string2} normally is \cs{ifbtxprintISSN} or
% \cs{ifbtxprintISSN}. 
%    \begin{macrocode}
FUNCTION {output.isbn}
{
  'isbn.command :=
  duplicate$
  empty$
    'pop$
    {
      's :=
      output.state mid.sentence =
        {
          isbn.command * " {, " * write$
          s "}" *
        }
        { output.state after.block =
            {
              add.period$
              write$
              newline$
              "\newblock " write$
              isbn.command " {" * s * ".}" *
            }
            { output.state before.all =
                {
                  write$
                  isbn.command " {" * write$
                  s "}" *
                }
                {
                  output.state before.title =
                    {
                      "\btxauthorcolon\ " * write$
                      isbn.command " {" * write$
                      s "}" *
                    }
                    {
                      add.period$ " " * write$
                      isbn.command " {" * write$
                      s ".}" *
                    }
                  if$
                }
              if$
            }
          if$
          mid.sentence 'output.state :=
        }
      if$
    }
  if$
}

%    \end{macrocode}
% Completes an entry.
%    \begin{macrocode}
FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
        'skip$
        { after.sentence 'output.state := }
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {after.authors}
{ output.state before.all =
    'skip$
    { before.title 'output.state := }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.block.checkc}
{ empty$
  swap$ empty$
  and
    'skip$
    'after.authors
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {new.sentence.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.sentence
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

%    \end{macrocode}
% \changes{1.00}{2005/02/16}{Remove \texttt{emphasize} and
%   \texttt{smallcaps} from \BibTeX\ styles}%
%    \begin{macrocode}
FUNCTION {namefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxnamefont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% \changes{1.12}{2005/06/19}{Add extra formatting of lastnames to
%   \BibTeX\ styles}%
%    \begin{macrocode}
FUNCTION {lastnamefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxlastnamefont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {titlefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxtitlefont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {journalfont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxjournalfont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {volumefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxvolumefont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {etalfont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxetalfont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
INTEGERS { nameptr namesleft numnames }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
%</bststd>
%<*bststd&!bstshort&!namevarb>
      {
        s nameptr "{ff~}{vv~}" format.name$
        s nameptr "{ll}" format.name$ lastnamefont * 
        s nameptr "{, jj}" format.name$ * 't :=
%</bststd&!bstshort&!namevarb>
%<*bststd&bstshort&!namevarb>
      {
        s nameptr "{f.~}{vv~}" format.name$
        s nameptr "{ll}" format.name$ lastnamefont * 
        s nameptr "{, jj}" format.name$ * 't :=
%</bststd&bstshort&!namevarb>
%<*bststd&!bstshort&namevarb>
      {
        s nameptr "{ll}" format.name$ lastnamefont
        s nameptr "{, jj}{, ff}{~vv}" format.name$ * 't :=
%</bststd&!bstshort&namevarb>
%<*bststd&bstshort&namevarb>
      {
        s nameptr "{ll}" format.name$ lastnamefont
        s nameptr "{,~jj}{,~f.}{~vv}" format.name$ * 't :=
%</bststd&bstshort&namevarb>
%<*bststd&bstthree>
          namesleft #2 >
            { " " "\btxetalshort {.}" etalfont * *
              #1 'namesleft := }
            {
%</bststd&bstthree>
%<*bststd>
          namesleft #1 >
            { ", " * t namefont * }
            { numnames #2 >
                { "\btxandcomma {}" * }
                'skip$
              if$
              s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ "others" =
                { " " "\btxetalshort {.}" etalfont * * }
%</bststd>
%<bststd&!bstshort>                { " \btxandlong {}\ " * t namefont * }
%<bststd&bstshort>                { " \btxandshort {.}\ " * t namefont * }
%<*bststd&bstthree>
              if$
            }
%</bststd&bstthree>
%<*bststd>
              if$
            }
          if$
        }
%</bststd>
%<*bststd&!bstshort&!namevara>
        {
          s nameptr "{ll}" format.name$ lastnamefont
          s nameptr "{,~jj}{, ff}{~vv}" format.name$ * namefont
        }
%</bststd&!bstshort&!namevara>
%<*bststd&bstshort&!namevara>
        {
          s nameptr "{ll}" format.name$ lastnamefont
          s nameptr "{,~jj}{,~f.}{~vv}" format.name$ * namefont
        }
%</bststd&bstshort&!namevara>
%<*bststd&!bstshort&namevara>
        {
          s nameptr "{ff~}{vv~}" format.name$
          s nameptr "{ll}" format.name$ lastnamefont * 
          s nameptr "{, jj}" format.name$ * namefont
        }
%</bststd&!bstshort&namevara>
%<*bststd&bstshort&namevara>
        {
          s nameptr "{f.~}{vv~}" format.name$
          s nameptr "{ll}" format.name$ lastnamefont * 
          s nameptr "{, jj}" format.name$ * namefont
        }
%</bststd&bstshort&namevara>
%<*bststd>
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
%</bststd>
%<*bststd&!bstshort>
        { "\ (\btxeditorslong {})" * }
        { "\ (\btxeditorlong {})" * }
%</bststd&!bstshort>
%<*bststd&bstshort>
        { "\ (\btxeditorsshort {.})" * }
        { "\ (\btxeditorshort {.})" * }
%</bststd&bstshort>
%<*bststd>
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" language.change.case titlefont }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
        { t #1 #2 substring$ "--" = not
            { "--" *
              t #2 global.max$ substring$ 't :=
            }
            {   { t #1 #1 substring$ "-" = }
                { "-" *
                  t #2 global.max$ substring$ 't :=
                }
              while$
            }
          if$
        }
        { t #1 #1 substring$ *
          t #2 global.max$ substring$ 't :=
        }
      if$
    }
  while$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.date}
{ year empty$
    { month empty$
        { "" }
        { "there's a month but no year in " cite$ * warning$
          month
        }
      if$
    }
    { month empty$
        'year
        { month "\ " * year * }
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.btitle}
{ title titlefont
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { "\ " }
  if$
  swap$ * *
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {volume.tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { "\ " }
  if$
  swap$ volumefont * *
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { output.state after.block =
%</bststd>
%<bststd&!bstshort>        { "\Btxvolumelong {}" }
%<bststd&!bstshort>        { "\btxvolumelong {}" }
%<bststd&bstshort>        { "\Btxvolumeshort {.}" }
%<bststd&bstshort>        { "\btxvolumeshort {.}" }
%<*bststd>
      if$
      volume volume.tie.or.space.connect
      series empty$
        'skip$
%</bststd>
%<bststd&!bstshort>        { " \btxofserieslong {}\ " * series titlefont * }
%<bststd&bstshort>        { " \btxofseriesshort {.}\ " * series titlefont * }
%<*bststd>
      if$
      "volume and number" number either.or.check
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.number.series}
{ volume empty$
    { number empty$
        { series field.or.null }
        { output.state mid.sentence =
%</bststd>
%<bststd&!bstshort>            { "\btxnumberlong {}" }
%<bststd&!bstshort>            { "\Btxnumberlong {}" }
%<bststd&bstshort>            { "\btxnumbershort {.}" }
%<bststd&bstshort>            { "\Btxnumbershort {.}" }
%<*bststd>
          if$
          number tie.or.space.connect
          series empty$
            { "there's a number but no series in " cite$ * warning$ }
%</bststd>
%<bststd&!bstshort>            { " \btxinserieslong {}\ " * series titlefont * }
%<bststd&bstshort>            { " \btxinseriesshort {.}\ " * series titlefont * }
%<*bststd>
          if$
        }
      if$
    }
    { "" }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.edition}
{ edition empty$
    { "" }
    { 
      output.state mid.sentence =
%</bststd>
%<*bststd&!bstshort>
        { edition "l" language.change.case "~\btxeditionlong {}" * }
        { edition "t" language.change.case "~\btxeditionlong {}" * }
%</bststd&!bstshort>
%<*bststd&bstshort>
        { edition "l" language.change.case "~\btxeditionshort {.}" * }
        { edition "t" language.change.case "~\btxeditionshort {.}" * }
%</bststd&bstshort>
%<*bststd>
      if$
    }
  if$
}

FUNCTION {format.isbn}
{ isbn empty$
    { "" }
    { "\btxISBN~\btxISBNfont {" isbn * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.issn}
{ issn empty$
    { "" }
    { "\btxISSN~\btxISSNfont {" issn * "}" * }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.url}
{ url empty$
    { "" }
    {
      urldate empty$
      { "\btxurlfont{" url * "}" * }
      {
        "\btxurlfont{" url *
        "}, \btxurldatecomment{} \btxkeywordlanguage {\btxurldatefont{" * 
          urldate * "}}" *
      }
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
INTEGERS { multiresult }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
        { #1 'multiresult := }
        { t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
%</bststd>
%<*bststd&!bstshort>
        { "\btxpageslong {}" pages n.dashify tie.or.space.connect }
        { "\btxpagelong {}" pages tie.or.space.connect }
%</bststd&!bstshort>
%<*bststd&bstshort>
        { "\btxpagesshort {.}" pages n.dashify tie.or.space.connect }
        { "\btxpageshort {.}" pages tie.or.space.connect }
%</bststd&bstshort>
%<*bststd>
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.vol.num.pages}
{ volume field.or.null
  number empty$
    'skip$
    { "(" number * ")" * *
      volume empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
    }
  if$
  pages empty$
    'skip$
    { duplicate$ empty$
        { pop$ format.pages }
        { ":" * pages n.dashify * }
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
%</bststd>
%<bststd&!bstshort>        { "\btxchapterlong {}" }
%<bststd&bstshort>        { "\btxchaptershort {.}" }
%<*bststd>
        { type "l" language.change.case }
      if$
      chapter tie.or.space.connect
      pages empty$
        'skip$
        { ", " * format.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
    { "" }
    { editor empty$
%</bststd>
%<*bststd&!bstshort>
        { "\Btxinlong {}\ " booktitle titlefont * }
        { "\Btxinlong {}\ " format.editors * ": " * booktitle titlefont * }
%</bststd&!bstshort>
%<*bststd&bstshort>
        { "\Btxinshort {.}\ " booktitle titlefont * }
        { "\Btxinshort {.}\ " format.editors * ": " * booktitle titlefont * }
%</bststd&bstshort>
%<*bststd>
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" language.change.case
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.tr.number}
{
  number empty$
  {
    type empty$
%</bststd>
%    \end{macrocode}
% \changes{0.40}{2003/09/26}{For \texttt{babalpha.bst}, use
%   \cs{btxtechreplong}}%
%    \begin{macrocode}
%<bststd&!bstshort>      { "\btxtechreplong {}" }
%<bststd&bstshort>      { "\btxtechrepshort {.}" }
%<*bststd>
      { type "t" language.change.case }
    if$
  }
  {
    type empty$
%</bststd>
%    \end{macrocode}
% \changes{0.40}{2003/09/26}{For \texttt{babalpha.bst}, use
%   \cs{Btxtechreplong}}%
%    \begin{macrocode}
%<bststd&!bstshort>      { "\Btxtechreplong {}" }
%<bststd&bstshort>      { "\Btxtechrepshort {.}" }
%<*bststd>
      { type "t" language.change.case }
    if$
    number tie.or.space.connect
  }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.article.crossref}
{ key empty$
%</bststd>
%<*bststd&!bstshort>
    { journal empty$
        { "need key or journal for " cite$ * " to crossref " * crossref *
          warning$
          ""
        }
        { "\Btxinlong {}\ " journal titlefont * }
      if$
    }
    { "\Btxinlong {}\ " key titlefont * }
%</bststd&!bstshort>
%<*bststd&bstshort>
    { journal empty$
        { "need key or journal for " cite$ * " to crossref " * crossref *
          warning$
          ""
        }
        { "\Btxinshort {.}\ " journal titlefont * }
      if$
    }
    { "\Btxinshort {.}\ " key titlefont * }
%</bststd&bstshort>
%<*bststd>
  if$
  " \cite{" * crossref * "}" *
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.crossref.editor}
{
%</bststd>
%<*bststd&!bstshort>
  editor #1 "{ll}{,~jj}{, ff}{~vv}" format.name$ namefont
%</bststd&!bstshort>
%<*bststd&bstshort>
  editor #1 "{ll}{,~jj}{,~f.}{~vv}" format.name$ namefont
%</bststd&bstshort>
%<*bststd>
  editor num.names$ duplicate$
  #2 >
    { pop$ " " "\btxetalshort {.}" etalfont * * }
    { #2 <
        'skip$
        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { " " "\btxetalshort {.}" etalfont * * }
%</bststd>
%<*bststd&!bstshort>
            { " \btxandlong {}\ " * editor #2 "{ff}{~vv}{~ll}{, jj}"
%</bststd&!bstshort>
%<*bststd&bstshort>
            { " \btxandshort {.}\ " * editor #2 "{vv~}{ll}"
%</bststd&bstshort>
%<*bststd>
              format.name$ namefont * }
          if$
        }
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
%</bststd>
%<bststd&!bstshort>      "\Btxinlong {}\ "
%<bststd&bstshort>      "\Btxinshort {.}\ "
%<*bststd>
    }
%</bststd>
%<*bststd&!bstshort>
    { "\Btxvolumelong {}" volume volume.tie.or.space.connect
      " \btxofserieslong {}\ " *
%</bststd&!bstshort>
%<*bststd&bstshort>
    { "\Btxvolumeshort {.}" volume volume.tie.or.space.connect
      " \btxofseriesshort {.}\ " *
%</bststd&bstshort>
%<*bststd>
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { series empty$
            { "need editor, key, or series for " cite$ * " to crossref " *
              crossref * warning$
              "" *
            }
            { series titlefont * }
          if$
        }
        { key titlefont * }
      if$
    }
%</bststd>
%<bststd&!bstshort>    { "\Btxinlong {}\ " format.crossref.editor * }
%<bststd&bstshort>    { "\Btxinshort {.}\ " format.crossref.editor * }
%<*bststd>
  if$
  " \cite{" * crossref * "}" *
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { booktitle empty$
            { "need editor, key, or booktitle for " cite$ * " to crossref " *
              crossref * warning$
              ""
            }
%</bststd>
%<bststd&!bstshort>            { "\Btxinlong {}\ " booktitle titlefont * }
%<bststd&bstshort>            { "\Btxinshort {.}\ " booktitle titlefont * }
%<*bststd>
          if$
        }
%</bststd>
%<bststd&!bstshort>        { "\Btxinlong {}\ " key titlefont * }
%<bststd&bstshort>        { "\Btxinshort {.}\ " key titlefont * }
%<*bststd>
      if$
    }
%</bststd>
%<bststd&!bstshort>    { "\Btxinlong {}\ " format.crossref.editor * }
%<bststd&bstshort>    { "\Btxinshort {.}\ " format.crossref.editor * }
%<*bststd>
  if$
  " \cite{" * crossref * "}" *
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.title "title" output.check
  new.block
  crossref missing$
    { journal 
      title missing$
        { titlefont }
        { journalfont }
      if$
      "journal" output.check 
      format.vol.num.pages output
      format.date "year" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  format.issn "\ifbtxprintISSN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  after.authors
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {booklet}
{ output.bibitem
  format.authors output
  after.authors
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  after.authors
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.chapter.pages "chapter and pages" output.check
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.pages output
      address empty$
        { organization publisher new.sentence.checkb
          organization output
          publisher output
          format.date "year" output.check
        }
        { address output.nonnull
          format.date "year" output.check
          new.sentence
          organization output
          publisher output
        }
      if$
    }
    { format.incoll.inproc.crossref output.nonnull
      format.pages output
    }
  if$
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {conference} { inproceedings }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
        'skip$
        { organization output.nonnull
          address output
        }
      if$
    }
    { format.authors output.nonnull }
  if$
  after.authors
  format.btitle "title" output.check
  author empty$
    { organization empty$
        { address new.block.checka
          address output
        }
        'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.title "title" output.check
  new.block
  "\btxmastthesis {}" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {misc}
{ output.bibitem
  format.authors output
  title howpublished new.block.checkc
  format.title output
  howpublished new.block.checka
  howpublished output
  format.date output
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.issn "\ifbtxprintISSN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
  empty.misc.check
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.btitle "title" output.check
  new.block
  "\btxphdthesis {}" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  after.authors
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
        { publisher new.sentence.checka }
        { organization publisher new.sentence.checkb
          organization output
        }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      new.sentence
      editor empty$
        'skip$
        { organization output }
      if$
      publisher output
    }
  if$
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  format.isbn "\ifbtxprintISBN" output.isbn
  new.block
  format.url output
  note output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  after.authors
  format.title "title" output.check
  new.block
  format.url output
  note "note" output.check
  format.date output
  fin.entry
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {default.type} { misc }

%</bststd>
%    \end{macrocode}
% Months and journals:
%    \begin{macrocode}
%<*bststd&!bstshort>
MACRO {jan} {"\btxmonjanlong {}"}
MACRO {feb} {"\btxmonfeblong {}"}
MACRO {mar} {"\btxmonmarlong {}"}
MACRO {apr} {"\btxmonaprlong {}"}
MACRO {may} {"\btxmonmaylong {}"}
MACRO {jun} {"\btxmonjunlong {}"}
MACRO {jul} {"\btxmonjullong {}"}
MACRO {aug} {"\btxmonauglong {}"}
MACRO {sep} {"\btxmonseplong {}"}
MACRO {oct} {"\btxmonoctlong {}"}
MACRO {nov} {"\btxmonnovlong {}"}
MACRO {dec} {"\btxmondeclong {}"}
MACRO {acmcs} {"ACM Computing Surveys"}
MACRO {acta} {"Acta Informatica"}
MACRO {cacm} {"Communications of the ACM"}
MACRO {ibmjrd} {"IBM Journal of Research and Development"}
MACRO {ibmsj} {"IBM Systems Journal"}
MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
MACRO {ieeetc} {"IEEE Transactions on Computers"}
MACRO {ieeetcad}
 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
MACRO {ipl} {"Information Processing Letters"}
MACRO {jacm} {"Journal of the ACM"}
MACRO {jcss} {"Journal of Computer and System Sciences"}
MACRO {scp} {"Science of Computer Programming"}
MACRO {sicomp} {"SIAM Journal on Computing"}
MACRO {tocs} {"ACM Transactions on Computer Systems"}
MACRO {tods} {"ACM Transactions on Database Systems"}
MACRO {tog} {"ACM Transactions on Graphics"}
MACRO {toms} {"ACM Transactions on Mathematical Software"}
MACRO {toois} {"ACM Transactions on Office Information Systems"}
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
MACRO {tcs} {"Theoretical Computer Science"}
%</bststd&!bstshort>
%<*bststd&bstshort>
MACRO {jan} {"\btxmonjanshort {.}"}
MACRO {feb} {"\btxmonfebshort {.}"}
MACRO {mar} {"\btxmonmarshort {.}"}
MACRO {apr} {"\btxmonaprshort {.}"}
MACRO {may} {"\btxmonmayshort {.}"}
MACRO {jun} {"\btxmonjunshort {.}"}
MACRO {jul} {"\btxmonjulshort {.}"}
MACRO {aug} {"\btxmonaugshort {.}"}
MACRO {sep} {"\btxmonsepshort {.}"}
MACRO {oct} {"\btxmonoctshort {.}"}
MACRO {nov} {"\btxmonnovshort {.}"}
MACRO {dec} {"\btxmondecshort {.}"}
MACRO {acmcs} {"ACM Comput.\ Surv.{}"}
MACRO {acta} {"Acta Inf.{}"}
MACRO {cacm} {"Commun. ACM"}
MACRO {ibmjrd} {"IBM J.~Res.\ Dev.{}"}
MACRO {ibmsj} {"IBM Syst.~J.{}"}
MACRO {ieeese} {"IEEE Trans.\ Softw.\ Eng.{}"}
MACRO {ieeetc} {"IEEE Trans.\ Comput.{}"}
MACRO {ieeetcad}
 {"IEEE Trans.\ Comput.-Aided Design Integrated Circuits"}
MACRO {ipl} {"Inf.\ Process.\ Lett.{}"}
MACRO {jacm} {"J.~ACM"}
MACRO {jcss} {"J.~Comput.\ Syst.\ Sci.{}"}
MACRO {scp} {"Sci.\ Comput.\ Programming"}
MACRO {sicomp} {"SIAM J.~Comput.{}"}
MACRO {tocs} {"ACM Trans.\ Comput.\ Syst.{}"}
MACRO {tods} {"ACM Trans.\ Database Syst.{}"}
MACRO {tog} {"ACM Trans.\ Gr.{}"}
MACRO {toms} {"ACM Trans.\ Math.\ Softw.{}"}
MACRO {toois} {"ACM Trans.\ Office Inf.\ Syst.{}"}
MACRO {toplas} {"ACM Trans.\ Prog.\ Lang.\ Syst.{}"}
MACRO {tcs} {"Theoretical Comput.\ Sci.{}"}
%</bststd&bstshort>
%    \end{macrocode}
% Action.
%    \begin{macrocode}
%<*bststd>

READ

%</bststd>
%    \end{macrocode}
%
% \subsubsection{Sorted bibliographies}
%
% This code is only used for sorted bibliographies.
% \changes{1.00}{2005/02/16}{Fix sorting of \BibTeX\ entries without
%   an author}%
%    \begin{macrocode}
%<*bststd&!bstunsorted>
FUNCTION {sortify}
{ purify$
  "l" change.case$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
INTEGERS { len }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

%</bststd&!bstunsorted>
%<*bststd&bstalpha>
%    \end{macrocode}
% 
%    \begin{macrocode}
INTEGERS { et.al.char.used }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {initialize.et.al.char.used}
{ #0 'et.al.char.used :=
}

%    \end{macrocode}
% 
%    \begin{macrocode}
EXECUTE {initialize.et.al.char.used}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {format.lab.names}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #4 >
  { #3 'namesleft := }
  { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
  { namesleft #0 > }
  { nameptr numnames =
      { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
    { "{\etalchar{+}}" *
      #1 'et.al.char.used :=
    }
    { s nameptr "{v{}}{l{}}" format.name$ * }
        if$
      }
      { s nameptr "{v{}}{l{}}" format.name$ * }
    if$
    nameptr #1 + 'nameptr :=
    namesleft #1 - 'namesleft :=
  }
      while$
      numnames #4 >
  { "{\etalchar{+}}" *
    #1 'et.al.char.used :=
  }
  'skip$
      if$
    }
    { s #1 "{v{}}{l{}}" format.name$
      duplicate$ text.length$ #2 <
  { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
  'skip$
      if$
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {author.key.label}
{ author empty$
    { key empty$
  { cite$ #1 #3 substring$ }
  { key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
  { key empty$
      { cite$ #1 #3 substring$ }
      { key #3 text.prefix$ }
    if$
  }
  { editor format.lab.names }
      if$
    }
    { author format.lab.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {author.key.organization.label}
{ author empty$
    { key empty$
  { organization empty$
      { cite$ #1 #3 substring$ }
      { "The " #4 organization chop.word #3 text.prefix$ }
    if$
  }
  { key #3 text.prefix$ }
      if$
    }
    { author format.lab.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {editor.key.organization.label}
{ editor empty$
    { key empty$
  { organization empty$
      { cite$ #1 #3 substring$ }
      { "The " #4 organization chop.word #3 text.prefix$ }
    if$
  }
  { key #3 text.prefix$ }
      if$
    }
    { editor format.lab.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {calc.label}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.key.label
    { type$ "proceedings" =
  'editor.key.organization.label
  { type$ "manual" =
      'author.key.organization.label
      'author.key.label
    if$
  }
      if$
    }
  if$
  duplicate$
  year field.or.null purify$ #-1 #2 substring$
  *
  'label :=
  year field.or.null purify$ #-1 #4 substring$
  *
  sortify 'sort.label :=
}

%</bststd&bstalpha>
%<*bststd&!bstunsorted>
%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
        { "   " * }
        'skip$
      if$
%</bststd&!bstunsorted>
%    \end{macrocode}
% \changes{0.41}{2003/11/03}{Corrected \texttt{babunsrt.bst}}%
%    \begin{macrocode}
%<*bststd&!bstshort&!bstunsorted>
      s nameptr "{ll{ }}{  ff{ }}{vv{ } }{  jj{ }}" format.name$ 't :=
%</bststd&!bstshort&!bstunsorted>
%<*bststd&bstshort&!bstunsorted>
      s nameptr "{ll{ }}{  f{ }}{vv{ } }{  jj{ }}" format.name$ 't :=
%</bststd&bstshort&!bstunsorted>
%<*bststd&!bstunsorted>
      nameptr numnames = t "others" = and
        { "et al" * }
        { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {author.sort}
{ author empty$
    { key empty$
        { "to sort, need author or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
        { key empty$
            { "to sort, need author, editor, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
        { key empty$
            { "to sort, need author, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
        { key empty$
            { "to sort, need editor, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {presort}
{
%</bststd&!bstunsorted>
%<*bststd&bstalpha>
  calc.label
  sort.label
  "    "
  *
%</bststd&bstalpha>
%<*bststd&!bstunsorted>
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
        'editor.organization.sort
        { type$ "manual" =
            'author.organization.sort
            'author.sort
          if$
        }
      if$
    }
  if$
%</bststd&!bstunsorted>
%<bststd&bstalpha>  *
%<*bststd&!bstunsorted>
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

%    \end{macrocode}
% 
%    \begin{macrocode}
ITERATE {presort}

%    \end{macrocode}
% 
%    \begin{macrocode}
SORT

%</bststd&!bstunsorted>
%<*bststd&!bstalpha>
%    \end{macrocode}
% 
%    \begin{macrocode}
STRINGS { longest.label }

%    \end{macrocode}
% 
%    \begin{macrocode}
INTEGERS { number.label longest.label.width }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}
%</bststd&!bstalpha>
%<*bststd&bstalpha>
%    \end{macrocode}
% 
%    \begin{macrocode}
STRINGS { longest.label last.sort.label next.extra }

%    \end{macrocode}
% 
%    \begin{macrocode}
INTEGERS { longest.label.width last.extra.num }

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #0 int.to.chr$ 'last.sort.label :=
  "" 'next.extra :=
  #0 'longest.label.width :=
  #0 'last.extra.num :=
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {forward.pass}
{ last.sort.label sort.label =
    { last.extra.num #1 + 'last.extra.num :=
      last.extra.num int.to.chr$ 'extra.label :=
    }
    { "a" chr.to.int$ 'last.extra.num :=
      "" 'extra.label :=
      sort.label 'last.sort.label :=
    }
  if$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {reverse.pass}
{ next.extra "b" =
    { "a" 'extra.label := }
    'skip$
  if$
  label extra.label * 'label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  extra.label 'next.extra :=
}
%</bststd&bstalpha>
%    \end{macrocode}
%
% \subsubsection{Generic code}
%
%    \begin{macrocode}
%<*bststd>

EXECUTE {initialize.longest.label}

%</bststd>
%<bststd&!bstalpha>ITERATE {longest.label.pass}
%<bststd&bstalpha>ITERATE {forward.pass}
%<bststd&bstalpha>REVERSE {reverse.pass}
%<*bststd>

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {begin.bib}
{
%</bststd>
%<*bststd&bstalpha>
  et.al.char.used
    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
    'skip$
  if$
%</bststd&bstalpha>
%<*bststd>
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  "  \providebibliographyfont{name}{}%" write$ newline$
  "  \providebibliographyfont{lastname}{}%" write$ newline$
  "  \providebibliographyfont{title}{\emph}%" write$ newline$
  "  \providebibliographyfont{etal}{\emph}%" write$ newline$
  "  \providebibliographyfont{journal}{}%" write$ newline$
  "  \providebibliographyfont{volume}{}%" write$ newline$
  "  \providebibliographyfont{ISBN}{\MakeUppercase}%" write$ newline$
  "  \providebibliographyfont{ISSN}{\MakeUppercase}%" write$ newline$
  "  \providebibliographyfont{url}{\url}%" write$ newline$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
EXECUTE {begin.bib}

%    \end{macrocode}
% 
%    \begin{macrocode}
EXECUTE {init.state.consts}

%    \end{macrocode}
% 
%    \begin{macrocode}
ITERATE {call.type$}

%    \end{macrocode}
% 
%    \begin{macrocode}
FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

%    \end{macrocode}
% 
%    \begin{macrocode}
EXECUTE {end.bib}
%</bststd>
%    \end{macrocode}
%
%
% \subsection{AMS styles}
%
% The following \BibTeX\ styles are derived from the AMS \BibTeX-style-files
% by the American Mathematical Society.
% For example, see `amsplain.bst' for more documentation about the
% original.
%    \begin{macrocode}
%<*bstams>
ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    isbn
    issn
    journal
    key
    language
    month
    mrnumber
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    url
    urldate
    volume
    year
  }
  {}
  { label bysame }


INTEGERS { output.state before.all mid.sentence }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
}

STRINGS { s t language.state change.temp}

FUNCTION {shows}
{ duplicate$ "::::  `" swap$ * "'" * top$
}

FUNCTION {showstack}
{"STACK================================================================"
top$
stack$
"ENDSTACK============================================================="
top$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {language.change.case}
{ 
  'change.temp :=
  't :=
  "\btxifchangecase {"
  t change.temp change.case$ *
  "}{" *
  t *
  "}" *
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

%    \end{macrocode}
% \changes{1.00}{2005/02/16}{Remove \texttt{emphasize} and
%   \texttt{smallcaps} from \BibTeX\ styles}%
%    \begin{macrocode}
FUNCTION {namefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxnamefont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% \changes{1.12}{2005/06/19}{Add extra formatting of lastnames to
%   \BibTeX\ styles}%
%    \begin{macrocode}
FUNCTION {lastnamefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxlastnamefont {" swap$ * "}" * }
  if$
}

FUNCTION {titlefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxtitlefont {" swap$ * "}" * }
  if$
}

FUNCTION {journalfont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxjournalfont {" swap$ * "}" * }
  if$
}

FUNCTION {volumefont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxvolumefont {" swap$ * "}" * }
  if$
}

FUNCTION {etalfont}
{ duplicate$ empty$
    { pop$ "" }
    { "\btxetalfont {" swap$ * "}" * }
  if$
}

%    \end{macrocode}
% \texttt{n.dashify} is used to make sure page ranges get the \TeX\ code
% (two hyphens) for en-dashes.
%    \begin{macrocode}
FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
        { t #1 #2 substring$ "--" = not
            { "--" *
              t #2 global.max$ substring$ 't :=
            }
            {   { t #1 #1 substring$ "-" = }
                { "-" *
                  t #2 global.max$ substring$ 't :=
                }
              while$
            }
          if$
        }
        { t #1 #1 substring$ *
          t #2 global.max$ substring$ 't :=
        }
      if$
    }
  while$
}

%    \end{macrocode}
% |tie.or.space.connect| connects two items with a |~| if the
% second item is less than 3 letters long, otherwise it just puts an
% ordinary space.
%    \begin{macrocode}
FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { "\ " }
  if$
  swap$ * *
}

FUNCTION {add.space.if.necessary}
{ duplicate$ "" =
    'skip$
    { "\ " * }
  if$
}

%    \end{macrocode}
% |either.or.check| gives a warning if two mutually exclusive fields
% were used in the database.
%    \begin{macrocode}
FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

%    \end{macrocode}
% |output.nonnull| is called by output.
%    \begin{macrocode}
FUNCTION {output.nonnull}
%    \end{macrocode}
% remove the top item from the stack because it's in the way.
%    \begin{macrocode}
{ 's :=
  output.state mid.sentence =
%    \end{macrocode}
% If we're in mid-sentence, add a comma to the new top item and write it
%    \begin{macrocode}
    { ", " * write$ }
%    \end{macrocode}
% Otherwise, if we're at the beginning of a bibitem,
%    \begin{macrocode}
    { output.state before.all =
%    \end{macrocode}
% just write out the top item from the stack;
%    \begin{macrocode}
      'write$
%    \end{macrocode}
% and the last alternative is that we're at the end of the current
% bibitem, so we add a period to the top stack item and write it out.
%    \begin{macrocode}
        { add.period$ " " * write$ }
      if$
      mid.sentence 'output.state :=
    }
  if$
%    \end{macrocode}
% Put the top item back on the stack that we removed earlier.
%    \begin{macrocode}
  s
}

%    \end{macrocode}
% Output checks to see if the stack top is empty; if not, it
% calls output.nonnull to write it out.
%    \begin{macrocode}
FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

%    \end{macrocode}
% Standard warning message for a missing or empty field. For the user
% we call any such field `missing' without respect to the distinction
% made by Bib\TeX\ between missing and empty.
%    \begin{macrocode}
FUNCTION {missing.warning}
{ "missing " swap$ * " in " * cite$ * warning$ }

%    \end{macrocode}
% |output.check| is like output except that it gives a warning on-screen
% if the given field in the database entry is empty.  t is the field
% name.
%    \begin{macrocode}
FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ t missing.warning }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
%    \end{macrocode}
% \changes{0.40}{2003/09/26}{Switch to a fall-back language when
%   \texttt{language} field is missing}%
% If no language is given, fall back to the language that has been
% active at \cs{begin\{document\}}.
% For \BibTeX, this language gets the name \texttt{nolanguage}.
%    \begin{macrocode}
  language empty$
    { "empty language in " cite$ * warning$
      language.state "nolanguage" =
        'skip$
        {
          "\expandafter\btxselectlanguage\expandafter {"
          "\btxfallbacklanguage}" * write$
          newline$
        }
      if$
      "nolanguage" 'language.state :=
    }
    { language.state language =
        'skip$
        { "\btxselectlanguage {" language * "}" * write$
          newline$
        }
      if$
      language 'language.state :=
    }
  if$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
%    \end{macrocode}
% This empty string is the first thing that will be written
% the next time \verb|write$| is called.  Done this way because each
% item is saved on the stack until we find out what punctuation
% should be added after it.  Therefore we need an empty first item.
%    \begin{macrocode}
  ""
  before.all 'output.state :=
}

FUNCTION {output.nonempty.mrnumber}
{ duplicate$ missing$
    { pop$ "" }
    'skip$
  if$
  duplicate$ empty$
    'pop$
    { " \MR{" swap$ * "}" * write$ }
  if$
}

FUNCTION {fin.entry}
{ add.period$
  write$
  mrnumber output.nonempty.mrnumber
  newline$
}

%    \end{macrocode}
% Removed |new.block|, |new.block.checka|, |new.block.checkb|,
% |new.sentence|, |new.sentence.checka|, and |new.sentence.checkb|
% functions here, since they don't seem to be needed in the AMS style.
% Also moved some real basic functions like `and' and 'or' earlier in
% the file.
%    \begin{macrocode}
INTEGERS { nameptr namesleft numnames }

%    \end{macrocode}
% The extra section to write out a language field was added
% for babamspl.bst.  Not present in babplain.bst.
%    \begin{macrocode}
FUNCTION {format.language}
{ language empty$
    { "" }
    { "\btxprintamslanguage{\btxlanguagename {" language * "}}" * }
  if$
}

%    \end{macrocode}
% This version of format.names puts names in the format
% ``First von Last, Jr.''
% (i.\,e., first name first, no abbreviating to initials).
%    \begin{macrocode}
FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {
      s nameptr "{ff~}{vv~}" format.name$
      s nameptr "{ll}" format.name$ lastnamefont *
      s nameptr "{, jj}" format.name$ * 't :=
      nameptr #1 >
        { namesleft #1 >
            { ", " * t namefont * }
            { numnames #2 >
                { "\btxandcomma {}" * }
                'skip$
              if$
              s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ "others" =
                { " " * "\btxetalshort {.}" etalfont * }
                { " \btxandlong {} " * t namefont * }
              if$
            }
          if$
        }
        {
          s nameptr "{ff~}{vv~}" format.name$
          s nameptr "{ll}" format.name$ lastnamefont *
          s nameptr "{, jj}" format.name$ * namefont
        }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { bysame "\bysame" =
         {"\bysame"}
         { author format.names }
     if$
    }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
        { "\ (\btxeditorsshort {.})" * }
        { "\ (\btxeditorshort {.})" * }
      if$
    }
  if$
}

FUNCTION {format.nonauthor.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
        { ", \btxeditorsshort {.}" * }
        { ", \btxeditorshort {.}" * }
      if$
    }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" language.change.case titlefont }
  if$
}

FUNCTION {format.journal.vol.year}
{ journal empty$
    { "journal name" missing.warning ""}
    { journal journalfont }
  if$
  volume empty$
    'skip$
    { " " * volume volumefont * }
  if$
  year empty$
    { "year" missing.warning }
    { " (" * year * ")" * }
  if$
}

%    \end{macrocode}
% For formatting the issue number for a journal article.
%    \begin{macrocode}
FUNCTION {format.number}
{ number empty$
    { "" }
    { "\btxnumbershort {.}~" number * }
  if$
}

%    \end{macrocode}
% For formatting miscellaneous dates
%    \begin{macrocode}
FUNCTION {format.date}
{ year empty$
    { month empty$
        { "" }
        { "there's a month but no year in " cite$ * warning$
          month
        }
      if$
    }
    { month empty$
        'year
        { month "\ " * year * }
      if$
    }
  if$
}

%    \end{macrocode}
%      The volume, series and number information is sort of tricky.
%      This code handles it as follows:
%      If the series is present, and the volume, but not the number,
%        then we do "\emph{Book title}, Series Name, vol. 000"
%      If the series is present, and the number, but not the volume,
%        then we do "\emph{Book title}, Series Name, no. 000"
%      If the series is present, and both number and volume,
%        then we do "\emph{Book title}, vol. XX, Series Name, no. 000"
%      Finally, if the series is absent,
%        then we do "\emph{Book title}, vol. XX"
%        or         "\emph{Book title}, no. 000"
%        and if both volume and number are present, give a warning message.
%    \begin{macrocode}
FUNCTION {format.bookvolume.series.number}
{ volume empty$
    { "" % Push the empty string as a placeholder in case everything else
         % is empty too.
      series empty$
        'skip$
        { pop$ series } % if series is not empty put in stack
      if$
      number empty$
        'skip$
        { duplicate$ empty$ % if no preceding material,
            'skip$          % do nothing, otherwise
            { ", " * }      % add a comma and space to separate.
          if$
          "\btxnumbershort {.}" number tie.or.space.connect * % add the number information
        }
      if$
    }
%    \end{macrocode}
% If the volume is NOT EMPTY:
%    \begin{macrocode}
    { "\btxvolumeshort {.}" volume tie.or.space.connect % vol. XX
      number empty$
        { series empty$
            'skip$
            { series ", " * swap$ *}    % Series Name, vol. XX
          if$
        }
        { series empty$
            { "can't use both volume and number if series info is missing"
              warning$
              "in BibTeX entry type `" type$ * "'" * top$
            }
            { ", " * series * ", \btxnumbershort {.}" * number tie.or.space.connect }
          if$
        }
      if$
    }
  if$

}  % end of format.bookvolume.series.number

%    \end{macrocode}
% |format.inproc.title.where.editors| is used by inproceedings entry types
%      No case changing or emphasizing for the title.  We want initial
%      caps, roman.
%      We add parentheses around the address (place where conference
%      was held).
%      Likewise we add parentheses around the editors' names.
%    \begin{macrocode}
FUNCTION {format.inproc.title.address.editors}
{ booktitle empty$
    { "" }
    { booktitle
      address empty$
        'skip$
        { add.space.if.necessary "(" * address * ")" * }
      if$
      editor empty$
        'skip$
        { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
      if$
    }
  if$
}

%    \end{macrocode}
% |format.incoll.title.editors| is similar to |format.inproc...| but
% omits the address. For collections that are not proceedings volumes.
%    \begin{macrocode}
FUNCTION {format.incoll.title.editors}
{ booktitle empty$
    { "" }
    { editor empty$
        { booktitle }
        { booktitle
          add.space.if.necessary "(" * format.nonauthor.editors * ")" *
        }
      if$
    }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
        { edition "l" language.change.case " \btxeditionshort {.}" * }
        { edition "t" language.change.case " \btxeditionshort {.}" * }
      if$
    }
  if$
}

FUNCTION {format.isbn}
{ isbn empty$
    { "" }
    { "\btxISBN~\btxISBNfont {" isbn * "}" * }
  if$
}

FUNCTION {format.issn}
{ issn empty$
    { "" }
    { "\btxISSN~\btxISSNfont {" issn * "}" * }
  if$
}

FUNCTION {format.url}
{ url empty$
    { "" }
    {
      urldate empty$
      { "\btxurlfont{" url * "}" * }
      {
        "\btxurlfont{" url *
        "}, \btxurldatecomment{} \btxkeywordlanguage {\btxurldatefont {" * 
          urldate * "}}" *
      }
      if$
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
        { #1 'multiresult := }
        { t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { pages n.dashify }
  if$
}

FUNCTION {format.book.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
        { "\btxpagesshort {.}~" pages n.dashify * }
        { "\btxpageshort {.}~" pages * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.book.pages
    { type empty$
        { "\btxchaptershort {.}~" }
        { type "l" language.change.case " " * }
      if$
      chapter *
      pages empty$
        'skip$
        { ", " * format.book.pages * }
      if$
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" language.change.case
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { "\Btxtechrepshort {.}" }
    'type
  if$
  number empty$
    { "t" language.change.case }
    { number tie.or.space.connect }
  if$
}

%    \end{macrocode}
% The |format.crossref| functions haven't been paid much attention
% at the present time (June 1990) and could probably use some
% work.  MJD
%    \begin{macrocode}
FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
        { "need key or journal for " cite$ * " to crossref " * crossref *
          warning$
          ""
        }
        { "\btxinshort {} " journal journalfont * }
      if$
    }
    { "\btxinshort {} " key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$
  #2 >
    { pop$ " \btxetalshort {.}" * }
    { #2 <
        'skip$
        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { " \btxetalshort {.}" * }
            { " \btxandlong {} " * editor #2 "{vv~}{ll}" format.name$ * }
          if$
        }
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "\btxinserieslong {} "
    }
    { "\btxvolumeshort {.}" volume tie.or.space.connect
      " \btxofserieslong {} " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { series empty$
            { "need editor, key, or series for " cite$ * " to crossref " *
              crossref * warning$
              "" *
            }
            { series * }
          if$
        }
        { key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { booktitle empty$
            { "need editor, key, or booktitle for " cite$ * " to crossref " *
              crossref * warning$
              ""
            }
            { "\btxinlong {} " * booktitle titlefont * }
          if$
        }
        { "\btxinlong {} " key * }
      if$
    }
    { "\btxinlong {} " format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

%    \end{macrocode}
% The main functions for each entry type.
%
% journal, vol and year are formatted together because they are
% not separated by commas.
%    \begin{macrocode}
FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.journal.vol.year output
      format.number output
      format.pages "pages" output.check
    }
    { format.article.crossref output.nonnull
      format.pages "pages" output.check
    }
  if$
  format.issn output
  format.url output
  format.language *
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.title "title" output.check
  format.edition output
  crossref missing$
    { format.bookvolume.series.number output
      publisher "publisher" output.check
      address output
    }
    { format.book.crossref output.nonnull
    }
  if$
  format.date "year" output.check
  format.isbn output
  format.url output
  format.language *
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  format.title "title" output.check
  howpublished output
  address output
  format.date output
  format.url output
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.title "title" output.check
  format.edition output
  crossref missing$
    { format.bookvolume.series.number output
      format.chapter.pages "chapter and pages" output.check
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      format.book.crossref output.nonnull
    }
  if$
  format.date "year" output.check
  format.isbn output
  format.url output
  format.language *
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.incoll.title.editors "booktitle" output.check
      format.bookvolume.series.number output
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  note output
  format.book.pages output
  format.isbn output
  format.url output
  format.language *
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  crossref missing$
    { format.inproc.title.address.editors "booktitle" output.check
      format.bookvolume.series.number output
      organization output
      publisher output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  note output
  format.book.pages output
  format.isbn output
  format.url output
  format.language *
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
        'skip$
        { organization output.nonnull
          address output
        }
      if$
    }
    { format.authors output.nonnull }
  if$
  format.title "title" output.check
  author empty$
    { organization empty$
        { address output }
        'skip$
      if$
    }
    { organization output
      address output
    }
  if$
  format.edition output
  format.date output
  format.isbn output
  format.url output
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  "\btxmastthesis {}" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  format.url output
  note output
  format.book.pages output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  format.title output
  howpublished output
  format.date output
  format.isbn output
  format.issn output
  format.url output
  note output
  format.book.pages output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  "\btxphdthesis {}" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  format.isbn output
  format.url output
  note output
  format.book.pages output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  format.title "title" output.check
  format.bookvolume.series.number output
  address empty$
    { editor empty$
        'skip$
        { organization output }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      editor empty$
        'skip$
        { organization output }
      if$
      publisher output
      format.date "year" output.check
    }
  if$
  format.isbn output
  format.url output
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  format.isbn output
  format.url output
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  format.url output
  note "note" output.check
  format.date output
  fin.entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"\btxmonjanlong {}"}
MACRO {feb} {"\btxmonfeblong {}"}
MACRO {mar} {"\btxmonmarlong {}"}
MACRO {apr} {"\btxmonaprlong {}"}
MACRO {may} {"\btxmonmaylong {}"}
MACRO {jun} {"\btxmonjunlong {}"}
MACRO {jul} {"\btxmonjullong {}"}
MACRO {aug} {"\btxmonauglong {}"}
MACRO {sep} {"\btxmonseplong {}"}
MACRO {oct} {"\btxmonoctlong {}"}
MACRO {nov} {"\btxmonnovlong {}"}
MACRO {dec} {"\btxmondeclong {}"}

READ

FUNCTION {sortify}
{ purify$
  "l" language.change.case
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
        { "   " * }
        'skip$
      if$
      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
        { "et al" * }
        { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
        { "to sort, need author or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
        { key empty$
            { "to sort, need author, editor, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
        { key empty$
            { "to sort, need author, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
        { key empty$
            { "to sort, need editor, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
        'editor.organization.sort
        { type$ "manual" =
            'author.organization.sort
            'author.sort
          if$
        }
      if$
    }
  if$
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT

STRINGS { longest.label prev.author this.author }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
  "abcxyz" 'prev.author :=
  "" 'this.author :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
  author empty$
    { editor empty$
      { "" }
      'editor
      if$
    }
    'author
  if$
  'this.author :=
  this.author prev.author =
    { "\bysame" 'bysame := }
    { "" 'bysame :=
      this.author "" =
        { "abcxyz" }
        'this.author
      if$
      'prev.author :=
    }
  if$
}

EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}

FUNCTION {write.lines}
{ { duplicate$ "." = NOT }
    { write$ newline$ }
  while$
  pop$
}

FUNCTION {begin.bib}
{ preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{" longest.label * "}" * write$ newline$
  "  \providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace}"
    write$ newline$
  "  \providecommand{\MR}{\relax\ifhmode\unskip\space\fi MR }"
    write$ newline$
  "  % \MRhref is called by the amsart/book/proc definition of \MR."
    write$ newline$
  "  \providecommand{\MRhref}[2]{%" write$ newline$
  "    \href{http://www.ams.org/mathscinet-getitem?mr=#1}{#2}"
    write$ newline$
  "  }" write$ newline$
  "  \providecommand{\href}[2]{#2}" write$ newline$
  "  \providebibliographyfont{name}{}%" write$ newline$
  "  \providebibliographyfont{lastname}{}%" write$ newline$
  "  \providebibliographyfont{title}{\emph}%" write$ newline$
  "  \providebibliographyfont{etal}{}%" write$ newline$
  "  \providebibliographyfont{journal}{}%" write$ newline$
  "  \providebibliographyfont{volume}{\textbf}%" write$ newline$
  "  \providebibliographyfont{ISBN}{\MakeUppercase}%" write$ newline$
  "  \providebibliographyfont{ISSN}{\MakeUppercase}%" write$ newline$
  "  \providebibliographyfont{url}{\url}%" write$ newline$
  "  \providecommand\btxprintamslanguage[1]{\ (#1)}"
    write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}
%</bstams>
%    \end{macrocode}
%
% \Finale

