% -*- mode: latex; coding: utf-8 -*- %% %% This is file is `numnameru.sty' by Vit. 2012--2017 %% %% This file based on `numname.sty' %% Authors of `numname.sty': %% Peter Wilson (herries dot press at earthlink dot net) %% Herries Press %% Copyright 2001--2005 Peter R. Wilson %% and %% S Joshua Swamidass %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either %% version 1.3 of this license or (at your option) any %% later version. %% The latest version of the license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of %% LaTeX version 2003/06/01 or later. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Warning! %% max number to convert - 2'147'483'647 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesPackage{numnameru} % Логические переменные \newif\ifpriornum \newif\ifminusnumber % \newcommand*{\minusname}{минус } % Единицы \newcommand*{\rNamenumberO}{ноль} \newcommand*{\rNamenumberI}{один} \newcommand*{\rNamenumberII}{два} \newcommand*{\rNamenumberIII}{три} \newcommand*{\rNamenumberIV}{четыре} \newcommand*{\rNamenumberV}{пять} \newcommand*{\rNamenumberVI}{шесть} \newcommand*{\rNamenumberVII}{семь} \newcommand*{\rNamenumberVIII}{восемь} \newcommand*{\rNamenumberIX}{девять} % \newcommand*{\rNamenumberX}{десять} % первый десяток \newcommand*{\rNamenumberXI}{одиннадцать} \newcommand*{\rNamenumberXII}{двенадцать} \newcommand*{\rNamenumberXIII}{тринадцать} \newcommand*{\rNamenumberXIV}{четырнадцать} \newcommand*{\rNamenumberXV}{пятнадцать} \newcommand*{\rNamenumberXVI}{шестнадцать} \newcommand*{\rNamenumberXVII}{семнадцать} \newcommand*{\rNamenumberXVIII}{восемнадцать} \newcommand*{\rNamenumberXIX}{девятнадцать} % Десятки \newcommand*{\rNamenumberIID}{двадцать} \newcommand*{\rNamenumberIIID}{тридцать} \newcommand*{\rNamenumberIVD}{сорок} \newcommand*{\rNamenumberVD}{пятьдесят} \newcommand*{\rNamenumberVID}{шестьдесят} \newcommand*{\rNamenumberVIID}{семьдесят} \newcommand*{\rNamenumberVIIID}{восемьдесят} \newcommand*{\rNamenumberIXD}{девяносто} % Сотни \newcommand*{\rNamenumberC}{сто} \newcommand*{\rNamenumberIIC}{двести} \newcommand*{\rNamenumberIIIC}{триста} \newcommand*{\rNamenumberIVC}{четыреста} \newcommand*{\rNamenumberVC}{пятьсот} \newcommand*{\rNamenumberVIC}{шестьсот} \newcommand*{\rNamenumberVIIC}{семьсот} \newcommand*{\rNamenumberVIIIC}{восемьсот} \newcommand*{\rNamenumberIXC}{девятьсот} % \chardef\m@mten=10 % shorthand for 10 % Определение счетчиков \newcounter{ism@mctr} % Единицы \newcounter{xsm@mctr} % Десятки \newcounter{csm@mctr} % Сотни \newcounter{ksm@mctr} % Тысячи \newcounter{xksm@mctr} % Десятки тысяч \newcounter{cksm@mctr} % Сотни тысяч \newcounter{msm@mctr} % Миллионы \newcounter{xmsm@mctr} % Десятки миллионов \newcounter{cmsm@mctr} % Сотни миллионов \newcounter{bsm@mctr} % Миллиарды \newcounter{workm@mctr} % % Установка счетчиков \newcommand*{\numdigits}[1]{% \setcounter{ism@mctr}{0}% \setcounter{xsm@mctr}{0}% \setcounter{csm@mctr}{0}% \setcounter{ksm@mctr}{0}% \setcounter{xksm@mctr}{0}% \setcounter{cksm@mctr}{0}% \setcounter{msm@mctr}{0}% \setcounter{xmsm@mctr}{0}% \setcounter{cmsm@mctr}{0}% \setcounter{bsm@mctr}{0}% \setcounter{workm@mctr}{#1}% \minusnumberfalse \ifnum \c@workm@mctr < \z@ % Отрицательное число? \minusnumbertrue \c@workm@mctr = -\c@workm@mctr \fi \ifnum \c@workm@mctr > \m@ne % единицы \c@ism@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@ism@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Десятки \c@xsm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@xsm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Сотни \c@csm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@csm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Тысячи \c@ksm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@ksm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Десятки тысяч \c@xksm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@xksm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Сотни тысяч \c@cksm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@cksm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Миллионы \c@msm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@msm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Десятки миллионов \c@xmsm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@xmsm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Сотни миллионов \c@cmsm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@cmsm@mctr by -\c@workm@mctr \divide \c@workm@mctr by \m@mten \fi \ifnum \c@workm@mctr > \z@ % Миллиарды \c@bsm@mctr = \c@workm@mctr \divide \c@workm@mctr by \m@mten \multiply \c@workm@mctr by \m@mten \advance \c@bsm@mctr by -\c@workm@mctr \fi } % % Формирование строки \newcommand*{\form@tnumber}[1]{% \numdigits{#1}% \ifminusnumber -\fi \priornumfalse \ifpriornum % Миллиарды (max-2) \thebsm@mctr \else \ifnum \c@bsm@mctr > \z@ \priornumtrue \thebsm@mctr \fi \fi \ifpriornum % Сотни миллионов \thecmsm@mctr \else \ifnum \c@cmsm@mctr > \z@ \priornumtrue \thecmsm@mctr \fi \fi \ifpriornum % Десятки миллионов \thexmsm@mctr \else \ifnum \c@xmsm@mctr > \z@ \priornumtrue \thexmsm@mctr \fi \fi \ifpriornum % Миллионы \themsm@mctr \else \ifnum \c@msm@mctr > \z@ \priornumtrue \themsm@mctr \fi \fi \ifpriornum % Сотни тысяч \thecksm@mctr \else \ifnum \c@cksm@mctr > \z@ \priornumtrue \thecksm@mctr \fi \fi \ifpriornum % Десятки тысяч \thexksm@mctr \else \ifnum \c@xksm@mctr > \z@ \priornumtrue \thexksm@mctr \fi \fi \ifpriornum % Тысячи \theksm@mctr \else \ifnum \c@ksm@mctr > \z@ \priornumtrue \theksm@mctr \fi \fi \ifpriornum % Сотни \thecsm@mctr \else \ifnum \c@csm@mctr > \z@ \priornumtrue \thecsm@mctr \fi \fi \ifpriornum % Десятки \thexsm@mctr \else \ifnum \c@xsm@mctr > \z@ \priornumtrue \thexsm@mctr \fi \fi \theism@mctr % Единицы } % \newcommand*{\unitnumbername}[2]{% \ifcase #1% {\rNamenumberO}% \or{\ifnum #2=\@ne одна\else\rNamenumberI\fi}% Для тысяч \or{\ifnum #2=\@ne две\else\rNamenumberII\fi}% Для тысяч \or{\rNamenumberIII}% \or{\rNamenumberIV}% \or{\rNamenumberV}% \or{\rNamenumberVI}% \or{\rNamenumberVII}% \or{\rNamenumberVIII}% \or{\rNamenumberIX}% \fi } % \newcommand*{\teennumbername}[1]{% \ifcase #1 \rNamenumberX% \or\rNamenumberXI% \or\rNamenumberXII% \or\rNamenumberXIII% \or\rNamenumberXIV% \or\rNamenumberXV% \or\rNamenumberXVI% \or\rNamenumberXVII% \or\rNamenumberXVIII% \or\rNamenumberXIX% \fi }% % \newcommand*{\tensnumbername}[3]{% \ifnum #1=\@ne% \teennumbername{#2}% \else% \ifcase #1 \or \or\rNamenumberIID% \or\rNamenumberIIID% \or\rNamenumberIVD% \or\rNamenumberVD% \or\rNamenumberVID% \or\rNamenumberVIID% \or\rNamenumberVIIID% \or\rNamenumberIXD% \fi \ifnum #2 > \z@% \space\unitnumbername{#2}{#3}% \fi \fi }% % \newcommand*{\centnumbername}[1]{% \ifnum #1 > \z@ \ifcase #1 \or\rNamenumberC% \or\rNamenumberIIC% \or\rNamenumberIIIC% \or\rNamenumberIVC% \or\rNamenumberVC% \or\rNamenumberVIC% \or\rNamenumberVIIC% \or\rNamenumberVIIIC% \or\rNamenumberIXC% \fi \fi }% %% %% Подготовка строки \newcommand*{\n@me@number}[1]{% \numdigits{#1}% \ifminusnumber\minusname\fi \priornumfalse %% Миллиарды \ifnum \c@bsm@mctr > \z@ \unitnumbername{\thebsm@mctr}{0} миллиард% \ifnum\c@bsm@mctr=1% \else\ifnum\c@bsm@mctr=2 а% \else\ifnum\c@bsm@mctr=3 а% \else\ifnum\c@bsm@mctr=4 а% \else ов% \fi\fi\fi\fi \priornumtrue \fi %% Сотни миллионов \ifnum \c@cmsm@mctr > \z@ \ifpriornum\protect\space\fi \centnumbername{\thecmsm@mctr}% \ifnum\c@msm@mctr=0% \ifnum\c@xmsm@mctr=0% \protect\space миллионов\fi\fi \priornumtrue \fi %% Десятки и единицы миллионов \ifnum \c@xmsm@mctr > \z@ \ifpriornum\protect\space\fi % \tensnumbername{\thexmsm@mctr}{\themsm@mctr}{0} миллион% \ifnum\c@xmsm@mctr=1 ов% \else\ifnum\c@msm@mctr=1% \else\ifnum\c@msm@mctr=2 а% \else\ifnum\c@msm@mctr=3 а% \else\ifnum\c@msm@mctr=4 а% \else ов% \fi\fi\fi\fi\fi \priornumtrue \else \ifnum \c@msm@mctr > \z@ \ifpriornum\protect\space\fi % \unitnumbername{\themsm@mctr}{0} миллион% \ifnum\c@msm@mctr=1% \else\ifnum\c@msm@mctr=2 а% \else\ifnum\c@msm@mctr=3 а% \else\ifnum\c@msm@mctr=4 а% \else ов% \fi\fi\fi\fi \priornumtrue \fi \fi %% Сотни тысяч \ifnum \c@cksm@mctr > \z@% \ifpriornum\protect\space\fi \centnumbername{\thecksm@mctr}% \ifnum\c@ksm@mctr=0% \ifnum\c@xksm@mctr=0 \protect\space тысяч% \fi\fi \priornumtrue \fi %% Десятки и единицы тысяч \ifnum \c@xksm@mctr > \z@% % \ifpriornum\protect\space\fi \tensnumbername{\thexksm@mctr}{\theksm@mctr}{1} тысяч% \priornumtrue \else \ifnum \c@ksm@mctr > \z@ \ifpriornum\protect\space\fi% % \unitnumbername{\theksm@mctr}{1} тысяч% \priornumtrue \fi\fi \ifnum\c@xksm@mctr=1\else% \ifnum\c@ksm@mctr=1 а% \else\ifnum\c@ksm@mctr=2 и% \else\ifnum\c@ksm@mctr=3 и% \else\ifnum\c@ksm@mctr=4 и% \else\fi\fi\fi\fi\fi %% Сотни \ifnum \c@csm@mctr > \z@% \ifpriornum\protect\space\fi \centnumbername{\thecsm@mctr}% \priornumtrue \fi %% Десятки/единицы \ifnum \c@xsm@mctr > \z@% \ifpriornum\protect\space\fi % \tensnumbername{\thexsm@mctr}{\theism@mctr}{0}% \else \ifnum \c@ism@mctr > \z@ \ifpriornum\protect\space\fi% % \unitnumbername{\theism@mctr}{0}% \else \ifpriornum\else\unitnumbername{\theism@mctr}{0}\fi \fi \fi }% % % Warning! % max number to convert - 2'147'483'647 % \newcommand*{\numnameru}[1]{% \n@me@number{#1}% } %% End of file `numnameru.sty'. \endinput