% \iffalse meta-comment
%
% Copyright 1989-2003 Johannes L. Braams and any individual authors
% listed elsewhere in this file.  All rights reserved.
% 
% This file is part of the Babel system release 3.7.
% --------------------------------------------------
% 
% It may be distributed under the terms of the LaTeX Project Public
% License, as described in lppl.txt in the base LaTeX distribution.
% Either version 1.2 or, at your option, any later version.
% \fi
% \CheckSum{1452}
%
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{russianb.dtx}
%</dtx>
%<code>\ProvidesLanguage{russianb}
        [2003/10/12 v1.1o Russian support from the babel system]
%
%% File `russianb.dtx'
%% Babel package for LaTeX version 2e
%% Copyright (C) 1989 - 2003
%%           by Johannes Braams, TeXniek
%
%% Russianb Language Definition File
%% Copyright (C) 1995 - 2003
%%           by Olga Lapko <cyrtug@mir.msk.su>
%%              Johannes Braams, TeXniek
%
%% Adapted to the new T2 and X2 Cyrillic encodings
%%           by Vladimir Volovich <TeX@vvv.vsu.ru>
%%              Werner Lemberg <wl@gnu.org>
%
%% Please report errors to: J.L. Braams
%%                          babel@braams.cistron.nl
%
%<*filedriver>
\documentclass{ltxdoc}
\newcommand\TeXhax{\TeX hax}
\newcommand\babel{\textsf{babel}}
\newcommand\langvar{$\langle \it lang \rangle$}
\newcommand\note[1]{}
\newcommand\Lopt[1]{\textsf{#1}}
\newcommand\file[1]{\texttt{#1}}
\newcommand\pkg[1]{\texttt{#1}}
\begin{document}
 \DocInput{russianb.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{russianb.dtx}
%
% \changes{russianb-1.1c}{1996/07/11}{Replaced \cs{undefined} with
%    \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
%    with \LaTeX}
% \changes{russianb-1.1d}{1996/10/10}{Moved the definition of
%    \cs{atcatcode} right to the beginning.}
% \changes{russianb-1.1k}{1999/08/19}{replaced all \cs{penalty}\cs{@M}
%    with \cs{nobreak}}
%
%  \section{The Russian language}
%
%    The file \file{\filename}\footnote{The file described in this section
%    has version number \fileversion\ and was last revised on \filedate.
%    This file was initially derived from the original version of
%    \file{german.sty}, which has some definitions for Russian. Later the
%    definitions from \file{russian.sty} version 1.0b (for \LaTeX\ 2.09),
%    \file{russian.sty} version v2.5c (for \LaTeXe) and \file{francais.sty}
%    version 4.5c and \file{germanb.sty} version 2.5c were added.} defines
%    all the language-specific macros for the Russian language. It needs the
%    file \file{cyrcod} for success documentation with Russian encodings
%    (see below).
%
%    For this language the character |"| is made active. In
%    table~\ref{tab:russian-quote} an overview is given of its purpose.
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    Added definitions of Cyrillic emdash stuff and thinspace}
%
%    \begin{table}[htb]
%      \begin{center}
%      \begin{tabular}{lp{8cm}}
%       \verb="|= & disable ligature at this position.               \\
%       |"-| & an explicit hyphen sign, allowing hyphenation
%                   in the rest of the word.                         \\
%       |"---| & Cyrillic emdash in plain text.                      \\
%       |"--~| & Cyrillic emdash in compound names (surnames).       \\
%       |"--*| & Cyrillic emdash for denoting direct speech.         \\
%       |""| & like |"-|, but producing no hyphen sign
%                   (for compund words with hyphen, e.g.\ |x-""y|
%                   or some other signs  as ``disable/enable'').     \\
%       |"~| & for a compound word mark without a breakpoint.        \\
%       |"=| & for a compound word mark with a breakpoint, allowing
%              hyphenation in the composing words.                   \\
%       |",| & thinspace for initials with a breakpoint
%               in following surname.                                \\
%       |"`| & for German left double quotes
%                   (looks like ,\kern-0.08em,).                     \\
%       |"'| & for German right double quotes (looks like ``).       \\%''
%       |"<| & for French left double quotes (looks like $<\!\!<$).  \\
%       |">| & for French right double quotes (looks like $>\!\!>$). \\
%      \end{tabular}
%      \caption{The extra definitions made
%               by \file{russianb}}\label{tab:russian-quote}
%      \end{center}
%    \end{table}
%
%    The quotes in table~\ref{tab:russian-quote} can also be typeset by
%    using the commands in table~\ref{tab:rmore-quote}.
%
%    \begin{table}[htb]
%      \begin{center}
%      \begin{tabular}{lp{8cm}}
%       |\cdash---| & Cyrillic emdash in plain text.                    \\
%       |\cdash--~| & Cyrillic emdash in compound names (surnames).     \\
%       |\cdash--*| & Cyrillic emdash for denoting direct speech.       \\
%       |\glqq| & for German left double quotes
%                    (looks like ,\kern-0.08em,).                       \\
%       |\grqq| & for German right double quotes (looks like ``).       \\%''
%       |\flqq| & for French left double quotes (looks like $<\!\!<$).  \\
%       |\frqq| & for French right double quotes (looks like $>\!\!>$). \\
%       |\dq|   & the original quotes character (|"|).                  \\
%      \end{tabular}
%      \caption{More commands which produce quotes, defined
%               by \babel}\label{tab:rmore-quote}
%      \end{center}
%    \end{table}
%
%    The French quotes are also available as ligatures `|<<|' and `|>>|' in
%    8-bit Cyrillic font encodings (\texttt{LCY}, \texttt{X2}, \texttt{T2*})
%    and as `|<|' and `|>|' characters in 7-bit Cyrillic font encodings
%    (\texttt{OT2} and \texttt{LWN}).
%
%    The quotation marks traditionally used in Russian were borrowed from
%    other languages (e.g., French and German) so they keep their original
%    names.
%
% \StopEventually{}
%
%    The macro |\LdfInit| takes care of preventing that this file is loaded
%    more than once, checking the category code of the \texttt{@} sign, etc.
%
% \changes{russianb-1.1d}{1996/11/03}{Now use \cs{LdfInit} to perform
%    initial checks}
% \changes{russianb-1.1e}{1996/12/29}{Added closing brace to second
%    argument of \cs{LdfInit}}
%    \begin{macrocode}
%<*code>
\LdfInit{russian}{captionsrussian}
%    \end{macrocode}
%
%    When this file is read as an option, i.e., by the |\usepackage|
%    command, \texttt{russianb} will be an `unknown' language, in which case
%    we have to make it known. So we check for the existence of |\l@russian|
%    to see whether we have to do something here.
%
%    \begin{macrocode}
\ifx\l@russian\@undefined
  \@nopatterns{Russian}
  \adddialect\l@russian0
\fi
%    \end{macrocode}
%
%  \begin{macro}{\latinencoding}
%
%    We need to know the encoding for text that is supposed to be which is
%    active at the end of the \babel\ package. If the \pkg{fontenc} package
%    is loaded later, then\ldots too bad!
%
%    \begin{macrocode}
\let\latinencoding\cf@encoding
%    \end{macrocode}
%
%  \end{macro}
%
%    The user may choose between different available Cyrillic
%    encodings---e.g., \texttt{X2}, \texttt{LCY}, or \texttt{LWN}.\@
%    Hopefully, \texttt{X2} will eventually replace the two latter encodings
%    (\texttt{LCY} and \texttt{LWN}).\@ If the user wants to use another
%    font encoding than the default (\texttt{T2A}), he has to load the
%    corresponding file \emph{before} \file{russianb.sty}. This may be done
%    in the following way:
%
%    \begin{verbatim}
%      % override the default X2 encoding used in Babel
%      \usepackage[LCY,OT1]{fontenc}
%      \usepackage[english,russian]{babel}
%    \end{verbatim}
%    \unskip
%
%    Note: for the Russian language, the \texttt{T2A} encoding is better than
%    \texttt{X2}, because \texttt{X2} does not contain Latin letters, and
%    users should be very careful to switch the language every time they
%    want to typeset a Latin word inside a Russian phrase or vice versa.
%
%    We parse the |\cdp@list| containing the encodings known to \LaTeX\ in
%    the order they were loaded. We set the |\cyrillicencoding| to the
%    \emph{last} loaded encoding in the list of supported Cyrillic
%    encodings: \texttt{OT2}, \texttt{LWN}, \texttt{LCY}, \texttt{X2},
%    \texttt{T2C}, \texttt{T2B}, \texttt{T2A}, if any.
%
%    \begin{macrocode}
\def\reserved@a#1#2{%
   \edef\reserved@b{#1}%
   \edef\reserved@c{#2}%
   \ifx\reserved@b\reserved@c
     \let\cyrillicencoding\reserved@c
   \fi}
\def\cdp@elt#1#2#3#4{%
   \reserved@a{#1}{OT2}%
   \reserved@a{#1}{LWN}%
   \reserved@a{#1}{LCY}%
   \reserved@a{#1}{X2}%
   \reserved@a{#1}{T2C}%
   \reserved@a{#1}{T2B}%
   \reserved@a{#1}{T2A}}
\cdp@list
%    \end{macrocode}
%
%    Now, if |\cyrillicencoding| is undefined, then the user did not load
%    any of supported encodings. So, we have to set |\cyrillicencoding| to
%    some default value. We test the presence of the encoding definition
%    files in the order from less preferable to more preferable encodings.
%    We use the lowercase names (i.e., \file{lcyenc.def} instead of
%    \file{LCYenc.def}).
%
%    \begin{macrocode}
\ifx\cyrillicencoding\undefined
  \IfFileExists{ot2enc.def}{\def\cyrillicencoding{OT2}}\relax
  \IfFileExists{lwnenc.def}{\def\cyrillicencoding{LWN}}\relax
  \IfFileExists{lcyenc.def}{\def\cyrillicencoding{LCY}}\relax
  \IfFileExists{x2enc.def}{\def\cyrillicencoding{X2}}\relax
  \IfFileExists{t2cenc.def}{\def\cyrillicencoding{T2C}}\relax
  \IfFileExists{t2benc.def}{\def\cyrillicencoding{T2B}}\relax
  \IfFileExists{t2aenc.def}{\def\cyrillicencoding{T2A}}\relax
%    \end{macrocode}
%
%    If |\cyrillicencoding| is still undefined, then the user seems not to
%    have a properly installed distribution. A fatal error.
%
%    \begin{macrocode}
  \ifx\cyrillicencoding\undefined
    \PackageError{babel}%
      {No Cyrillic encoding definition files were found}%
      {Your installation is incomplete.\MessageBreak
       You need at least one of the following files:\MessageBreak
       \space\space
       x2enc.def, t2aenc.def, t2benc.def, t2cenc.def,\MessageBreak
       \space\space
       lcyenc.def, lwnenc.def, ot2enc.def.}%
  \else
%    \end{macrocode}
%
%    We avoid |\usepackage[\cyrillicencoding]{fontenc}| because we don't
%    want to force the switch of |\encodingdefault|.
%
%    \begin{macrocode}
    \lowercase
      \expandafter{\expandafter\input\cyrillicencoding enc.def\relax}%
  \fi
\fi
%    \end{macrocode}
%
%    \begin{verbatim}
%      \PackageInfo{babel}
%        {Using `\cyrillicencoding' as a default Cyrillic encoding}%
%    \end{verbatim}
%    \unskip
%
%    \begin{macrocode}
\DeclareRobustCommand{\Russian}{%
  \fontencoding\cyrillicencoding\selectfont
  \let\encodingdefault\cyrillicencoding
  \expandafter\set@hyphenmins\russianhyphenmins
  \language\l@russian}%
\DeclareRobustCommand{\English}{%
  \fontencoding\latinencoding\selectfont
  \let\encodingdefault\latinencoding
  \expandafter\set@hyphenmins\englishhyphenmins
  \language\l@english}%
\let\Rus\Russian
\let\Eng\English
\let\cyrillictext\Russian
\let\cyr\Russian
%    \end{macrocode}
%
%    Since the \texttt{X2} encoding does not contain Latin letters, we
%    should make some redefinitions of \LaTeX\ macros which implicitly
%    produce Latin letters.
%
%    \begin{macrocode}
\expandafter\ifx\csname T@X2\endcsname\relax\else
%    \end{macrocode}
%
%    We put |\latinencoding| in braces to avoid problems with
%    |\@alph| inside minipages (e.g., footnotes inside minipages) where
%    |\@alph| is expanded and we get for example `|\fontencoding OT1|'
%    (|\fontencoding| is robust).
%
%    \begin{macrocode}
  \def\@alph#1{{\fontencoding{\latinencoding}\selectfont
    \ifcase#1\or
      a\or b\or c\or d\or e\or f\or g\or h\or
      i\or j\or k\or l\or m\or n\or o\or p\or
      q\or r\or s\or t\or u\or v\or w\or x\or
      y\or z\else\@ctrerr\fi}}%
  \def\@Alph#1{{\fontencoding{\latinencoding}\selectfont
    \ifcase#1\or
      A\or B\or C\or D\or E\or F\or G\or H\or
      I\or J\or K\or L\or M\or N\or O\or P\or
      Q\or R\or S\or T\or U\or V\or W\or X\or
      Y\or Z\else\@ctrerr\fi}}%
%    \end{macrocode}
%
%    Unfortunately, the commands |\AA| and |\aa| are not encoding dependent
%    in \LaTeX\ (unlike e.g., |\oe| or |\DH|). They are defined as |\r{A}| and
%    |\r{a}|. This leads to unpredictable results when the font encoding
%    does not contain the Latin letters `A' and `a' (like \texttt{X2}).
%
%    \begin{macrocode}
  \DeclareTextSymbolDefault{\AA}{OT1}
  \DeclareTextSymbolDefault{\aa}{OT1}
  \DeclareTextCommand{\aa}{OT1}{\r a}
  \DeclareTextCommand{\AA}{OT1}{\r A}
\fi
%    \end{macrocode}
%
%    The following block redefines the character class of uppercase Greek
%    letters and some accents, if it is equal to 7 (variable family), to
%    avoid incorrect results if the font encoding in some math family does
%    not contain these characters in places of OT1 encoding. The code was
%    taken from |amsmath.dtx|. See comments and further explanation there.
%
% \changes{russianb-1.1n}{2001/02/21}{As this code generates a
%    textfont 7 error it is commented out for now.}
%    \begin{macrocode}
% \begingroup\catcode`\"=12
% % uppercase greek letters:
% \def\@tempa#1{\expandafter\@tempb\meaning#1\relax\relax\relax\relax
%   "0000\@nil#1}
% \def\@tempb#1"#2#3#4#5#6\@nil#7{%
%   \ifnum"#2=7 \count@"1#3#4#5\relax
%     \ifnum\count@<"1000 \else \global\mathchardef#7="0#3#4#5\relax \fi
%   \fi}
% \@tempa\Gamma\@tempa\Delta\@tempa\Theta\@tempa\Lambda\@tempa\Xi
% \@tempa\Pi\@tempa\Sigma\@tempa\Upsilon\@tempa\Phi\@tempa\Psi
% \@tempa\Omega
% % some accents:
% \def\@tempa#1#2\@nil{\def\@tempc{#1}}\def\@tempb{\mathaccent}
% \expandafter\@tempa\hat\relax\relax\@nil
% \ifx\@tempb\@tempc
%   \def\@tempa#1\@nil{#1}%
%   \def\@tempb#1{\afterassignment\@tempa\mathchardef\@tempc=}%
%   \def\do#1"#2{}
%   \def\@tempd#1{\expandafter\@tempb#1\@nil
%     \ifnum\@tempc>"FFF
%       \xdef#1{\mathaccent"\expandafter\do\meaning\@tempc\space}%
%     \fi}
%   \@tempd\hat\@tempd\check\@tempd\tilde\@tempd\acute\@tempd\grave
%   \@tempd\dot\@tempd\ddot\@tempd\breve\@tempd\bar
% \fi
% \endgroup
%    \end{macrocode}
%
%    The user should use the \pkg{inputenc} package when any 8-bit Cyrillic
%    font encoding is used, selecting one of the Cyrillic input encodings.
%    We do not assume any default input encoding, so the user should
%    explicitly call the \pkg{inputenc} package by |\usepackage{inputenc}|.
%    We also removed |\AtBeginDocument|, so \pkg{inputenc} should be used
%    before \babel.
%
% \changes{russianb-1.1l}{1999/08/27}{Made not using inputenc a
%    warning instead of an error} 
%    \begin{macrocode}
\@ifpackageloaded{inputenc}{}{%
  \def\reserved@a{LWN}%
  \ifx\reserved@a\cyrillicencoding\else
    \def\reserved@a{OT2}%
    \ifx\reserved@a\cyrillicencoding\else
      \PackageWarning{babel}%
        {No input encoding specified for Russian language}
  \fi\fi}
%    \end{macrocode}
%
%    Now we define two commands that offer the possibility to switch between
%    Cyrillic and Roman encodings.
%
%  \begin{macro}{\cyrillictext}
%  \begin{macro}{\latintext}
%
%    The command |\cyrillictext| will switch from Latin font encoding to the
%    Cyrillic font encoding, the command |\latintext| switches back. This
%    assumes that the `normal' font encoding is a Latin one. These commands
%    are \emph{declarations}, for shorter peaces of text the commands
%    |\textlatin| and |\textcyrillic| can be used.
%
% \changes{russianb-1.1o}{2003/10/12}{\cs{latintext} is already
%    defined by the core of \babel}
%    \begin{macrocode}
%\DeclareRobustCommand{\latintext}{%
%  \fontencoding{\latinencoding}\selectfont
%  \def\encodingdefault{\latinencoding}}
\let\lat\latintext
%    \end{macrocode}
%
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\textcyrillic}
%  \begin{macro}{\textlatin}
%
%    These commands take an argument which is then typeset using the
%    requested font encoding.
% \changes{russianb-1.1o}{2003/10/12}{\cs{textlatin} already defined
%    by the core of \babel}
%    \begin{macrocode}
\DeclareTextFontCommand{\textcyrillic}{\cyrillictext}
%\DeclareTextFontCommand{\textlatin}{\latintext}
%    \end{macrocode}
%
%  \end{macro}
%  \end{macro}
%
%    We make the \TeX
%    \begin{macrocode}
%\ifx\ltxTeX\undefined\let\ltxTeX\TeX\fi
%\ProvideTextCommandDefault{\TeX}{\textlatin{\ltxTeX}}
%    \end{macrocode}
%    and \LaTeX\ logos encoding independent.
%    \begin{macrocode}
%\ifx\ltxLaTeX\undefined\let\ltxLaTeX\LaTeX\fi
%\ProvideTextCommandDefault{\LaTeX}{\textlatin{\ltxLaTeX}}
%    \end{macrocode}
%
%    The next step consists of defining commands to switch to (and
%    from) the Russian language.
%
% \begin{macro}{\captionsrussian}
%
%    The macro |\captionsrussian| defines all strings used in the four
%    standard document classes provided with \LaTeX. The two commands |\cyr|
%    and |\lat| activate Cyrillic resp.\ Latin encoding.
%
%    \begin{macrocode}
\addto\captionsrussian{%
%   FIXME: Where is the \prefacename used?
  \def\prefacename{%
    {\cyr\CYRP\cyrr\cyre\cyrd\cyri\cyrs\cyrl\cyro\cyrv\cyri\cyre}}%
%   {\cyr\CYRV\cyrv\cyre\cyrd\cyre\cyrn\cyri\cyre}}%
  \def\refname{%
    {\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk
      \ \cyrl\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyrery}}%
% \def\refname{%
%   {\cyr\CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra}}%
  \def\abstractname{%
    {\cyr\CYRA\cyrn\cyrn\cyro\cyrt\cyra\cyrc\cyri\cyrya}}%
  \def\bibname{%
    {\cyr\CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra}}%
% \def\bibname{%
%   {\cyr\CYRB\cyri\cyrb\cyrl\cyri\cyro
%    \cyrg\cyrr\cyra\cyrf\cyri\cyrya}}%
% for reports according to GOST:
% \def\bibname{%
%   {\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk
%     \ \cyri\cyrs\cyrp\cyro\cyrl\cyrsftsn\cyrz\cyro\cyrv\cyra\cyrn
%     \cyrn\cyrery\cyrh\ \cyri\cyrs\cyrt\cyro\cyrch\cyrn\cyri
%     \cyrk\cyro\cyrv}}%
  \def\chaptername{{\cyr\CYRG\cyrl\cyra\cyrv\cyra}}%
% \@ifundefined{chapter}{}{%
%   \def\chaptername{{\cyr\CYRG\cyrl\cyra\cyrv\cyra}}}%
  \def\appendixname{%
    {\cyr\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}}%
%    \end{macrocode}
%
%    There are two names for the Table of Contents that are used in Russian
%    publications. For books (and reports) the second variant is
%    appropriate, but for proceedings the first variant is preferred:
%
%    \begin{macrocode}
  \@ifundefined{thechapter}%
    {\def\contentsname{%
      {\cyr\CYRS\cyro\cyrd\cyre\cyrr\cyrzh\cyra\cyrn\cyri\cyre}}}%
    {\def\contentsname{%
      {\cyr\CYRO\cyrg\cyrl\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyre}}}%
  \def\listfigurename{%
    {\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk
      \ \cyri\cyrl\cyrl\cyryu\cyrs\cyrt\cyrr\cyra\cyrc\cyri\cyrishrt}}%
% \def\listfigurename{%
%   {\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk
%     \ \cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyro\cyrv}}%
  \def\listtablename{%
    {\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk
      \ \cyrt\cyra\cyrb\cyrl\cyri\cyrc}}%
  \def\indexname{%
    {\cyr\CYRP\cyrr\cyre\cyrd\cyrm\cyre\cyrt\cyrn\cyrery\cyrishrt
      \ \cyru\cyrk\cyra\cyrz\cyra\cyrt\cyre\cyrl\cyrsftsn}}%
  \def\authorname{%
    {\cyr\CYRI\cyrm\cyre\cyrn\cyrn\cyro\cyrishrt
      \ \cyru\cyrk\cyra\cyrz\cyra\cyrt\cyre\cyrl\cyrsftsn}}%
  \def\figurename{{\cyr\CYRR\cyri\cyrs.}}%
  \def\tablename{{\cyr\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}}%
  \def\partname{{\cyr\CYRCH\cyra\cyrs\cyrt\cyrsftsn}}%
  \def\enclname{{\cyr\cyrv\cyrk\cyrl.}}%
  \def\ccname{{\cyr\cyri\cyrs\cyrh.}}%
% \def\ccname{{\cyr\cyri\cyrz}}%
  \def\headtoname{{\cyr\cyrv\cyrh.}}%
% \def\headtoname{{\cyr\cyrv}}%
  \def\pagename{{\cyr\cyrs.}}%
% \def\pagename{{\cyr\cyrs\cyrt\cyrr.}}%
  \def\seename{{\cyr\cyrs\cyrm.}}%
  \def\alsoname{{\cyr\cyrs\cyrm.\ \cyrt\cyra\cyrk\cyrzh\cyre}}%
%    \end{macrocode}
% \changes{russianb-1.1m}{2000/09/20}{Added \cs{glossaryname}}
%    \begin{macrocode}
  \def\proofname{{\cyr\CYRD\cyro\cyrk\cyra\cyrz\cyra\cyrt
      \cyre\cyrl\cyrsftsn\cyrs\cyrt\cyrv\cyro}}%
  \def\glossaryname{Glossary}% <-- Needs translation
  }
%    \end{macrocode}
%
% \end{macro}
%
% \begin{macro}{\daterussian}
%
%    The macro |\daterussian| redefines the command |\today| to produce
%    Russian dates.
%
%    \begin{macrocode}
\def\daterussian{%
  \def\today{\number\day~\ifcase\month\or
    \cyrya\cyrn\cyrv\cyra\cyrr\cyrya\or
    \cyrf\cyre\cyrv\cyrr\cyra\cyrl\cyrya\or
    \cyrm\cyra\cyrr\cyrt\cyra\or
    \cyra\cyrp\cyrr\cyre\cyrl\cyrya\or
    \cyrm\cyra\cyrya\or
    \cyri\cyryu\cyrn\cyrya\or
    \cyri\cyryu\cyrl\cyrya\or
    \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra\or
    \cyrs\cyre\cyrn\cyrt\cyrya\cyrb\cyrr\cyrya\or
    \cyro\cyrk\cyrt\cyrya\cyrb\cyrr\cyrya\or
    \cyrn\cyro\cyrya\cyrb\cyrr\cyrya\or
    \cyrd\cyre\cyrk\cyra\cyrb\cyrr\cyrya\fi
    \ \number\year~\cyrg.}}
%    \end{macrocode}
%
% \end{macro}
%
% \begin{macro}{\extrasrussian}
%
%    The macro |\extrasrussian| will perform all the extra definitions
%    needed for the Russian language. The macro |\noextrasrussian| is used
%    to cancel the actions of |\extrasrussian|.
%
% \changes{russianb-1.1b}{1996/02/20}{Added switch to \texttt{LWN}
%    encoding}
%
%    The first action we define is to switch on the selected Cyrillic
%    encoding whenever we enter `russian'.
%
%    \begin{macrocode}
\addto\extrasrussian{\cyrillictext}
%    \end{macrocode}
%
%    When the encoding definition file was processed by \LaTeX\ the current
%    font encoding is stored in |\latinencoding|, assuming that \LaTeX\ uses
%    \texttt{T1} or \texttt{OT1} as default. Therefore we switch back to
%    |\latinencoding| whenever the Russian language is no longer `active'.
%
%    \begin{macrocode}
\addto\noextrasrussian{\latintext}
%    \end{macrocode}
%
%  \begin{macro}{\verbatim@font}
%
% \changes{russianb-1.1b}{1996/02/20}{Added changing of
%    \cs{verbatim@font}}
%
%    In order to get both Latin and Cyrillic letters in verbatim text we
%    need to change the definition of an internal \LaTeX\ command somewhat:
%
%    \begin{macrocode}
%\def\verbatim@font{%
%  \let\encodingdefault\latinencoding
%  \normalfont\ttfamily
%  \expandafter\def\csname\cyrillicencoding-cmd\endcsname##1##2{%
%    \ifx\protect\@typeset@protect
%      \begingroup\UseTextSymbol\cyrillicencoding##1\endgroup
%    \else\noexpand##1\fi}}
%    \end{macrocode}
%
%  \end{macro}
%
%    The category code of the characters `\texttt{:}', `\texttt{;}',
%    `\texttt{!}', and `\texttt{?}' is made |\active| to insert a little
%    white space.
%
%    For Russian (as well as for German) the \texttt{"} character also is
%    made active.
%
%    Note: It is \emph{very} questionable whether the Russian typesetting
%    tradition requires additional spacing before those punctuation signs.
%    Therefore, we make the corresponding code optional. If you need it,
%    then define the \texttt{frenchpunct} docstrip option in
%    \file{babel.ins}.
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    Added a hook to insert space
%    or not before `double punctuation' (from frenchb).}
%
%    Borrowed from french.
%    Some users dislike automatic insertion of a space before
%    `double punctuation', and prefer to decide themselves whether a
%    space should be added or not; so a hook |\NoAutoSpaceBeforeFDP|
%    is provided: if this command is added (in file |russianb.cfg|, or
%    anywhere in a document) |russianb| will respect your typing, and
%    introduce a suitable space before `double punctuation' \emph{if
%    and only if} a space is typed in the source file before those
%    signs.
%
%    The command |\AutoSpaceBeforeFDP| switches back to the
%    default behavior of |russianb|.
%
% \changes{russianb-1.1a}{1995/03/07}{Use the new mechanism for dealing
%    with active characters}
%
%    \begin{macrocode}
%<*frenchpunct>
\initiate@active@char{:}
\initiate@active@char{;}
%</frenchpunct>
%<*frenchpunct|spanishligs>
\initiate@active@char{!}
\initiate@active@char{?}
%</frenchpunct|spanishligs>
\initiate@active@char{"}
%    \end{macrocode}
%
%    The code above is necessary because we need extra active characters.
%    The character |"| is used as indicated in
%    table~\ref{tab:russian-quote}.
%
%    We specify that the Russian group of shorthands should be used.
%
%    \begin{macrocode}
\addto\extrasrussian{\languageshorthands{russian}}
%    \end{macrocode}
%
%    These characters are `turned on' once, later their definition may
%    vary.
%
%    \begin{macrocode}
\addto\extrasrussian{%
%<frenchpunct>  \bbl@activate{:}\bbl@activate{;}%
%<frenchpunct|spanishligs>  \bbl@activate{!}\bbl@activate{?}%
  \bbl@activate{"}}
\addto\noextrasrussian{%
%<frenchpunct>  \bbl@deactivate{:}\bbl@deactivate{;}%
%<frenchpunct|spanishligs>  \bbl@deactivate{!}\bbl@deactivate{?}%
  \bbl@deactivate{"}}
%    \end{macrocode}
%
%   The \texttt{X2} and \texttt{T2*} encodings do not contain
%   |spanish_shriek| and |spanish_query| symbols; as a consequence, the
%   ligatures `|?`|' and `|!`|' do not work with them (these characters are
%   useless for Cyrillic texts anyway). But we define the shorthands to
%   emulate these ligatures (optionally).
%
%   We do not use |\latinencoding| here (but instead explicitly use
%   \texttt{OT1}) because the user may choose \texttt{T2A} to be the primary
%   encoding, but it does not contain these characters.
%
%    \begin{macrocode}
%<*spanishligs>
\declare@shorthand{russian}{?`}{\UseTextSymbol{OT1}\textquestiondown}
\declare@shorthand{russian}{!`}{\UseTextSymbol{OT1}\textexclamdown}
%</spanishligs>
%    \end{macrocode}
%
% \begin{macro}{\russian@sh@;@}
% \begin{macro}{\russian@sh@:@}
% \begin{macro}{\russian@sh@!@}
% \begin{macro}{\russian@sh@?@}
%
%    We have to reduce the amount of white space before \texttt{;},
%    \texttt{:} and \texttt{!}. This should only happen in horizontal mode,
%    hence the test with |\ifhmode|.
%
% \changes{russianb-1.1a}{1995/07/04}{Use new \cs{DefineActiveNoArg}}
% \changes{russianb-1.1a}{1995/07/04}{Use the more general mechanism of
%    \cs{declare@shorthand}}
% \changes{russianb-1.1b}{1996/02/08}{Updated to reflect the latest
%    french definitions}
%
%    \begin{macrocode}
%<*frenchpunct>
\declare@shorthand{russian}{;}{%
  \ifhmode
%    \end{macrocode}
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    \thinspace changed to kern.1em (space bit thinner)}
% \changes{russianb-1.1f}{1998/06/26}{%
%    Added a hook to insert space
%    or not before `double punctuation' (from frenchb).}
%
%    In horizontal mode we check for the presence of a `space', `unskip' if
%    it exists and place a |0.1em| kerning.
%
%    \begin{macrocode}
    \ifdim\lastskip>\z@
      \unskip\nobreak\kern.1em
    \else
%    \end{macrocode}
%    If no space has been typed, we add |\FDP@thinspace|
%    which will be
%    defined, up to the user's wishes, as an automatic added
%    thinspace, or as |\@empty|.
%
%    \begin{macrocode}
        \FDP@thinspace
    \fi
  \fi
%    \end{macrocode}
%
%    Now we can insert a `|;|' character.
%
%    \begin{macrocode}
  \string;}
%    \end{macrocode}
%
%    The other definitions are very similar.
%
%    \begin{macrocode}
\declare@shorthand{russian}{:}{%
  \ifhmode
    \ifdim\lastskip>\z@
      \unskip\nobreak\kern.1em
    \else
        \FDP@thinspace
    \fi
  \fi
  \string:}
%    \end{macrocode}
%
%    \begin{macrocode}
\declare@shorthand{russian}{!}{%
  \ifhmode
    \ifdim\lastskip>\z@
      \unskip\nobreak\kern.1em
    \else
        \FDP@thinspace
    \fi
  \fi
  \string!}
%    \end{macrocode}
%
%    \begin{macrocode}
\declare@shorthand{russian}{?}{%
  \ifhmode
    \ifdim\lastskip>\z@
      \unskip\nobreak\kern.1em
    \else
        \FDP@thinspace
    \fi
  \fi
  \string?}
%    \end{macrocode}
%
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    Added a hook to insert space
%    or not before `double punctuation' (from frenchb).}
%  \begin{macro}{\AutoSpaceBeforeFDP}
%  \begin{macro}{\NoAutoSpaceBeforeFDP}
%  \begin{macro}{\FDP@thinspace}
%    |\FDP@thinspace| is defined as unbreakable
%    spaces if |\AutoSpaceBeforeFDP| is activated or as |\@empty| if
%    |\NoAutoSpaceBeforeFDP| is in use.
%    The default is |\AutoSpaceBeforeFDP|.
%    \begin{macrocode}
\def\AutoSpaceBeforeFDP{%
      \def\FDP@thinspace{\nobreak\kern.1em}}
\def\NoAutoSpaceBeforeFDP{\let\FDP@thinspace\@empty}
\AutoSpaceBeforeFDP
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\FDPon}
%  \begin{macro}{\FDPoff}
% \changes{russianb-1.1f}{1998/06/26}{One more chance to avoid
%       spaces before double punctuation}
%
%     The next macros allow to switch on/off activeness of double
%     punctuation signs.
%
%    \begin{macrocode}
\def\FDPon{\bbl@activate{:}%
        \bbl@activate{;}%
        \bbl@activate{?}%
        \bbl@activate{!}}
\def\FDPoff{\bbl@deactivate{:}%
        \bbl@deactivate{;}%
        \bbl@deactivate{?}%
        \bbl@deactivate{!}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\system@sh@:@}
%  \begin{macro}{\system@sh@!@}
%  \begin{macro}{\system@sh@?@}
%  \begin{macro}{\system@sh@;@}
%
% \changes{russianb-1.1a}{1995/07/04}{Added system level shorthands}
%
%    When the active characters appear in an environment where their
%    Russian behaviour is not wanted they should give an `expected'
%    result. Therefore we define shorthands at system level as well.
%
%    \begin{macrocode}
\declare@shorthand{system}{:}{\string:}
\declare@shorthand{system}{;}{\string;}
%</frenchpunct>
%<*frenchpunct&!spanishligs>
\declare@shorthand{system}{!}{\string!}
\declare@shorthand{system}{?}{\string?}
%</frenchpunct&!spanishligs>
%    \end{macrocode}
%
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%    To be able to define the function of `|"|', we first define a couple of
%    `support' macros.
%
%  \begin{macro}{\dq}
%
%    We save the original double quote character in |\dq| to keep it
%    available, the math accent |\"| can now be typed as `|"|'.
%
%    \begin{macrocode}
\begingroup \catcode`\"12
\def\reserved@a{\endgroup
  \def\@SS{\mathchar"7019 }
  \def\dq{"}}
\reserved@a
%    \end{macrocode}
%
%  \end{macro}
%
% \changes{russianb-1.1a}{1995/07/04}{Use \cs{ddot} instead of
%    \cs{@MATHUMLAUT}}
%
%    Now we can define the doublequote macros: german and french quotes.
%    We use definitions of these quotes made in babel.sty.
%    The french quotes are contained in the \texttt{T2*} encodings.
%
%    \begin{macrocode}
\declare@shorthand{russian}{"`}{\glqq}
\declare@shorthand{russian}{"'}{\grqq}
\declare@shorthand{russian}{"<}{\flqq}
\declare@shorthand{russian}{">}{\frqq}
%    \end{macrocode}
%
%    Some additional commands:
%
%    \begin{macrocode}
\declare@shorthand{russian}{""}{\hskip\z@skip}
\declare@shorthand{russian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
\declare@shorthand{russian}{"=}{\nobreak-\hskip\z@skip}
\declare@shorthand{russian}{"|}{%
  \textormath{\nobreak\discretionary{-}{}{\kern.03em}%
              \allowhyphens}{}}
%    \end{macrocode}
%
%    The next two macros for |"-| and |"---| are somewhat different.
%    We must check whether the second token is a hyphen character:
%
%    \begin{macrocode}
\declare@shorthand{russian}{"-}{%
%    \end{macrocode}
%
%    If the next token is `|-|', we typeset an emdash, otherwise a hyphen
%    sign:
%
%    \begin{macrocode}
  \def\russian@sh@tmp{%
    \if\russian@sh@next-\expandafter\russian@sh@emdash
    \else\expandafter\russian@sh@hyphen\fi
  }%
%    \end{macrocode}
%
%    \TeX\ looks for the next token after the first `|-|': the meaning of
%    this token is written to |\russian@sh@next| and |\russian@sh@tmp| is
%    called.
%
%    \begin{macrocode}
  \futurelet\russian@sh@next\russian@sh@tmp}
%    \end{macrocode}
%
%    Here are the definitions of hyphen and emdash. First the hyphen:
%
%    \begin{macrocode}
\def\russian@sh@hyphen{%
  \nobreak\-\bbl@allowhyphens}
%    \end{macrocode}
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    Rearranging of cyrillic emdash stuff}
%
%    For the emdash definition, there are the two parameters: we must `eat'
%    two last hyphen signs of our emdash\dots :
%    \begin{macrocode}
\def\russian@sh@emdash#1#2{\cdash-#1#2}
%    \end{macrocode}
%  \begin{macro}{\cdash}
%    \dots\ these two parameters are useful for another macro:
%    |\cdash|:
%    \begin{macrocode}
%\ifx\cdash\undefined % should be defined earlier
\def\cdash#1#2#3{\def\tempx@{#3}%
\def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
 \ifx\tempx@\tempa@\@Acdash\else
  \ifx\tempx@\tempb@\@Bcdash\else
   \ifx\tempx@\tempc@\@Ccdash\else
    \errmessage{Wrong usage of cdash}\fi\fi\fi}
%    \end{macrocode}
%   second parameter (or third for |\cdash|) shows what kind of emdash
%   to create in next step
%      \begin{center}
%      \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}}
%       |"---| & ordinary (plain) Cyrillic emdash inside text:
%       an unbreakable thinspace will be inserted before only in case of
%       a \textit{space} before the dash (it is necessary for dashes after
%       display maths formulae: there could be lists, enumerations etc.\
%       started with ``--- where $a$ is ...'' i.e., the dash starts a line).
%       (Firstly there were planned rather soft rules for user: he may put
%       a space before the dash or not.  But it is difficult to place this
%       thinspace automatically, i.e., by checking modes because after
%       display formulae \TeX{} uses horizontal mode.  Maybe there is a
%       misunderstanding?  Maybe there is another way?)  After a dash
%       a breakable thinspace is always placed; \\
%   \end{tabular}
%   \end{center}
%    \begin{macrocode}
% What is more grammatically: .2em or .2\fontdimen6\font ?
\def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
  \cyrdash\hskip.2em\ignorespaces}%
%    \end{macrocode}
%      \begin{center}
%      \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}}
%       |"--~| & emdash in compound names or surnames
%       (like Mendeleev--Klapeiron); this dash has no space characters
%       around; after the dash some space is added
%       |\exhyphenalty| \\
%   \end{tabular}
%   \end{center}
%    \begin{macrocode}
\def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
 \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
%    \end{macrocode}
%      \begin{center}
%      \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}}
%       |"--*| & for denoting direct speech (a space like |\enskip|
%       must follow the emdash); \\
%   \end{tabular}
%   \end{center}
%    \begin{macrocode}
\def\@Ccdash{\leavevmode
 \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
%\fi
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\cyrdash}
%   Finally the macro for ``body'' of the Cyrillic emdash.
%   The |\cyrdash| macro will be defined in case this macro hasn't been
%   defined in a fontenc file.  For T2* fonts, cyrdash will be placed in
%   the code of the English emdash thus it uses ligature |---|.
%    \begin{macrocode}
% Is there an IF necessary?
\ifx\cyrdash\undefined
  \def\cyrdash{\hbox to.8em{--\hss--}}
\fi
%    \end{macrocode}
%  \end{macro}
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    Add macro for thinspace between initials}
%
%    Here a really new macro---to place thinspace between initials.
%    This macro used instead of |\,| allows hyphenation in the following
%    surname.
%
%    \begin{macrocode}
%\declare@shorthand{russian}{",}{\nobreak\hskip.2em\ignorespaces}
%    \end{macrocode}
%
% \changes{russianb-1.1f}{1998/06/26}{%
%    Add commands for switch on/off
%    doublequote activeness.  Borrowed from german.}
%
%  \begin{macro}{\mdqon}
%  \begin{macro}{\mdqoff}
%    All that's left to do now is to  define a couple of commands
%    for |"|.
%    \begin{macrocode}
\def\mdqon{\bbl@activate{"}}
\def\mdqoff{\bbl@deactivate{"}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    The Russian hyphenation patterns can be used with |\lefthyphenmin|
%    and |\righthyphenmin| set to~2.
%
% \changes{russianb-1.1a}{1995/07/04}{use \cs{russianhyphenmins} to
%    store the correct values}
% \changes{russianb-1.1m}{2000/09/22}{Now use \cs{providehyphenmins} to
%    provide a default value}
%    \begin{macrocode}
\providehyphenmins{\CurrentOption}{\tw@\tw@}
% temporary hack:
\ifx\englishhyphenmins\undefined
  \def\englishhyphenmins{\tw@\thr@@}
\fi
%    \end{macrocode}
%
%    Now the action |\extrasrussian| has to execute is to make sure that the
%    command |\frenchspacing| is in effect. If this is not the case the
%    execution of |\noextrasrussian| will switch it off again.
%
%    \begin{macrocode}
\addto\extrasrussian{\bbl@frenchspacing}
\addto\noextrasrussian{\bbl@nonfrenchspacing}
%    \end{macrocode}
%
% \end{macro}
%
%    Next we add a new enumeration style for Russian manuscripts with
%    Cyrillic letters, and later on we define some math operator names in
%    accordance with Russian typesetting traditions.
%
%  \begin{macro}{\Asbuk}
%
%    We begin by defining |\Asbuk| which works like |\Alph|, but produces
%    (uppercase) Cyrillic letters intead of Latin ones. The letters YO,
%    ISHRT, HRDSN, ERY, and SFTSN are skipped, as usual for such
%    enumeration.
%
%    \begin{macrocode}
\def\Asbuk#1{\expandafter\@Asbuk\csname c@#1\endcsname}
\def\@Asbuk#1{\ifcase#1\or
  \CYRA\or\CYRB\or\CYRV\or\CYRG\or\CYRD\or\CYRE\or\CYRZH\or
  \CYRZ\or\CYRI\or\CYRK\or\CYRL\or\CYRM\or\CYRN\or\CYRO\or
  \CYRP\or\CYRR\or\CYRS\or\CYRT\or\CYRU\or\CYRF\or\CYRH\or
  \CYRC\or\CYRCH\or\CYRSH\or\CYRSHCH\or\CYREREV\or\CYRYU\or
  \CYRYA\else\@ctrerr\fi}
%    \end{macrocode}
%
%  \end{macro}
%
%  \begin{macro}{\asbuk}
%
%    The macro |\asbuk| is similar to |\alph|; it produces lowercase
%    Russian letters.
%
%    \begin{macrocode}
\def\asbuk#1{\expandafter\@asbuk\csname c@#1\endcsname}
\def\@asbuk#1{\ifcase#1\or
  \cyra\or\cyrb\or\cyrv\or\cyrg\or\cyrd\or\cyre\or\cyrzh\or
  \cyrz\or\cyri\or\cyrk\or\cyrl\or\cyrm\or\cyrn\or\cyro\or
  \cyrp\or\cyrr\or\cyrs\or\cyrt\or\cyru\or\cyrf\or\cyrh\or
  \cyrc\or\cyrch\or\cyrsh\or\cyrshch\or\cyrerev\or\cyryu\or
  \cyrya\else\@ctrerr\fi}
%    \end{macrocode}
%
%  \end{macro}
%
% Set up default Cyrillic math alphabets. To use Cyrillic letters in
% math mode user should load the |textmath| package \emph{before}
% loading fontenc package (or \babel).  Note, that by default Cyrillic
% letters are taken from upright font in math mode (unlike Latin
% letters).
%    \begin{macrocode}
%\RequirePackage{textmath}
\@ifundefined{sym\cyrillicencoding letters}{}{%
\SetSymbolFont{\cyrillicencoding letters}{bold}\cyrillicencoding
  \rmdefault\bfdefault\updefault
\DeclareSymbolFontAlphabet\cyrmathrm{\cyrillicencoding letters}
%    \end{macrocode}
%    And we need a few commands to be able to switch to different variants.
%    \begin{macrocode}
\DeclareMathAlphabet\cyrmathbf\cyrillicencoding
  \rmdefault\bfdefault\updefault
\DeclareMathAlphabet\cyrmathsf\cyrillicencoding
  \sfdefault\mddefault\updefault
\DeclareMathAlphabet\cyrmathit\cyrillicencoding
  \rmdefault\mddefault\itdefault
\DeclareMathAlphabet\cyrmathtt\cyrillicencoding
  \ttdefault\mddefault\updefault
%
\SetMathAlphabet\cyrmathsf{bold}\cyrillicencoding
  \sfdefault\bfdefault\updefault
\SetMathAlphabet\cyrmathit{bold}\cyrillicencoding
  \rmdefault\bfdefault\itdefault
}
%    \end{macrocode}
%
%    Some math functions in Russian math books have other names: e.g.,
%    \texttt{sinh} in Russian is written as \texttt{sh} etc. So we define a
%    number of new math operators.
%
%    |\sinh|:
%    \begin{macrocode}
\def\sh{\mathop{\operator@font sh}\nolimits}
%    \end{macrocode}
%    |\cosh|:
%    \begin{macrocode}
\def\ch{\mathop{\operator@font ch}\nolimits}
%    \end{macrocode}
%    |\tan|:
%    \begin{macrocode}
\def\tg{\mathop{\operator@font tg}\nolimits}
%    \end{macrocode}
%    |\arctan|:
%    \begin{macrocode}
\def\arctg{\mathop{\operator@font arctg}\nolimits}
%    \end{macrocode}
%    arcctg:
%    \begin{macrocode}
\def\arcctg{\mathop{\operator@font arcctg}\nolimits}
%    \end{macrocode}
%    The following macro conflicts with |\th| defined in Latin~1 encoding:
%
%    |\tanh|:
%    \begin{macrocode}
\def\th{\mathop{\operator@font th}\nolimits}
%    \end{macrocode}
%    |\cot|:
%    \begin{macrocode}
\def\ctg{\mathop{\operator@font ctg}\nolimits}
%    \end{macrocode}
%    |\coth|:
%    \begin{macrocode}
\def\cth{\mathop{\operator@font cth}\nolimits}
%    \end{macrocode}
%    |\csc|:
%    \begin{macrocode}
\def\cosec{\mathop{\operator@font cosec}\nolimits}
%    \end{macrocode}
%
%    And finally some other Russian mathematical symbols:
%    \begin{macrocode}
\def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits}
\def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
\def\nod{\mathop{\cyrmathrm{\cyrn.\cyro.\cyrd.}}\nolimits}
\def\nok{\mathop{\cyrmathrm{\cyrn.\cyro.\cyrk.}}\nolimits}
\def\NOD{\mathop{\cyrmathrm{\CYRN\CYRO\CYRD}}\nolimits}
\def\NOK{\mathop{\cyrmathrm{\CYRN\CYRO\CYRK}}\nolimits}
\def\Proj{\mathop{\cyrmathrm{\CYRP\cyrr}}\nolimits}
%    \end{macrocode}
%
% This is for compatibility with older Russian packages.
%    \begin{macrocode}
\DeclareRobustCommand{\No}{%
   \ifmmode{\nfss@text{\textnumero}}\else\textnumero\fi}
%    \end{macrocode}
%
%    The macro |\ldf@finish| takes care of looking for a configuration file,
%    setting the main language to be switched on at |\begin{document}| and
%    resetting the category code of \texttt{@} to its original value.
%
% \changes{russianb-1.1d}{1996/11/03}{Now use \cs{ldf@finish} to wrap
%    up}
%
%    \begin{macrocode}
\ldf@finish{russian}
%</code>
%    \end{macrocode}
%
% \Finale
%%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
\endinput
