From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/numnameru/numnameru.sty | 435 +++++++++++++++++++++++++++ 1 file changed, 435 insertions(+) create mode 100644 macros/latex/contrib/numnameru/numnameru.sty (limited to 'macros/latex/contrib/numnameru/numnameru.sty') diff --git a/macros/latex/contrib/numnameru/numnameru.sty b/macros/latex/contrib/numnameru/numnameru.sty new file mode 100644 index 0000000000..3f89027e21 --- /dev/null +++ b/macros/latex/contrib/numnameru/numnameru.sty @@ -0,0 +1,435 @@ +% -*- 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 -- cgit v1.2.3