diff options
author | Karl Berry <karl@freefriends.org> | 2008-02-19 17:05:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-02-19 17:05:28 +0000 |
commit | cf4d2164c6ed64dccbe7d8abdd8b0c95f8509a1c (patch) | |
tree | adbb0d174b4ab3c017b085367d946ad7ba3b417b /Master/texmf-dist/tex/latex/shipunov/numerus.sty | |
parent | f95f16133feaac8dd66077e38d247937f819c815 (diff) |
new latex collection shipunov (18feb08)
git-svn-id: svn://tug.org/texlive/trunk@6680 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/shipunov/numerus.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/shipunov/numerus.sty | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/shipunov/numerus.sty b/Master/texmf-dist/tex/latex/shipunov/numerus.sty new file mode 100644 index 00000000000..038ef56ba0f --- /dev/null +++ b/Master/texmf-dist/tex/latex/shipunov/numerus.sty @@ -0,0 +1,207 @@ +% Author: Alexey B. Shipunov (plantago@herba.msu.ru) + +\ProvidesPackage{numerus}% + [2008/02/07 v1.2 Spell numbers in Russian words] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Синтаксис: \propis[необязательный_аргумент]{<число>} % +% \Propis[необязательный_аргумент]{<число>} % +% \PROpis[необязательный_аргумент]{<число>} % +% % +% Необязательный_аргумент: k (по умолчанию, количественное % +% числительное) % +% z (порядковое числительное женского рода % +% в именительном падеже) % +% m (порядковое числительное мужского рода % +% в именительном падеже) % +% % +% <Число>: цифра < 999 для порядковых числительных и < 999999 для % +% количественных, или счетчик, принимающий аналогичные % +% значения % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Простой пример: \propis{99} дает `девяносто девять' % +% % +% Сложный пример: сначала % +% \renewcommand*{\thechapter}{\PROpis[z]{\c@chapter}}, % +% потом (если \c@chapter=99) \textsl{\uppercase{Глава} \thechapter} % +% дает текст `ГЛАВА ДЕВЯНОСТО ДЕВЯТАЯ' наклонным шрифтом % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newif\ifKol@ +\newif\ifPor@Zen +\newcount\Vrem@A + +% Все буквы маленькие (`девяносто девять') +\newcommand*{\propis}[2][k]{% + \let\V@\relax + \Delat@Propis{#1}{#2}} + +% Первая буква большая (`Девяносто девять') +\newcommand*{\Propis}[2][k]{% + \let\V@\Perv@B + \let\B@=B% + \Delat@Propis{#1}{#2}} + +\def\Verh@#1{\uppercase{#1}} +\def\Perv@B#1{\if B\B@ \Verh@ #1\else + #1\fi + \let\B@\relax} + +% Все буквы большие (`ДЕВЯНОСТО ДЕВЯТЬ') --- +% \uppercase{\propis{...}} не работает +\newcommand*{\PROpis}[2][k]{% + \let\V@\uppercase + \Delat@Propis{#1}{#2}} + +% Основная команда +\def\Delat@Propis#1#2{{% + \if k#1\Kol@true\else + \if z#1\Por@Zentrue\else + \if m#1\relax\else + \Oshibka@Arg +\fi\fi\fi\Test@Propis{#2}}} + +% Проверка ошибок и разветвление +\def\Test@Propis#1{% + \ifnum #1<0\Oshibka@Otr\else + \ifnum #1<10\Delat@Ed#1\else + \ifnum #1<20\expandafter\expandafter\expandafter + \Nadz@\expandafter\number#1\else + \ifnum #1<100\expandafter\expandafter\expandafter + \Delat@Des\expandafter\number#1\else + \ifnum #1<1000\expandafter\expandafter\expandafter + \Delat@Sot\expandafter\number#1\else + \ifnum #1<1000000\ifKol@\Vrem@A#1\advance\Vrem@A1000000 + \expandafter\expandafter\expandafter + \Delat@Tys\expandafter\number\Vrem@A\else + \Oshibka@Tys\fi\else + \Oshibka@Mill +\fi\fi\fi\fi\fi\fi} + +% Ошибки +\def\Oshibka@Arg{\PackageWarning{numeral}{% +`propis' got wrong mandatory argument!^^J% +Command did not executed}} + +\def\Oshibka@Otr{\PackageWarning{numeral}{% +`propis' got argument < 0!^^J% +Command did not executed}} + +\def\Oshibka@Tys{\PackageWarning{numeral}{% +Ordinal numerals > 999 not supported :(^^J% +Command did not executed}} + +\def\Ошибка@Mill{\PackageWarning{numeral}{% +`propis' got argument > 999 999!^^J% +Command did not executed}} + +% Единицы (0...10) +\def\Delat@Ed#1{\ifKol@\Kol@Ed#1\else + \Por@Ed#1\fi} + +\def\Kol@Ed#1{\ifcase#1\V@{ноль}\or\V@{один}\or\V@{два}\or +\V@{три}\or\V@{четыре}\or\V@{пять}\or\V@{шесть}\or\V@{семь}\or +\V@{восемь}\or\V@{девять}\or\V@{десять}\fi} + +\def\Por@Ed#1{\ifcase#1\V@{нулев}\or\V@{перв}\or\V@{втор}\or +\V@{трет}\or\V@{четверт}\or\V@{пят}\or\V@{шест}\or\V@{седьм}\or +\V@{восьм}\or\V@{девят}\or\V@{десят}\fi\Ok@Ed#1} + +\def\Ok@Ed#1{\ifKol@\relax\else + \ifPor@Zen\ifcase#1\V@{ая}\or\V@{ая}\or\V@{ая}\or + \V@{ья}\else\V@{ая}\fi\else + \ifcase#1\V@{ой}\or\V@{ый}\or\V@{ой}\or + \V@{ий}\or\V@{ый}% + \or\V@{ый}\or\V@{ой}\or\V@{ой}\or + \V@{ой}\or\V@{ый}% +\fi\fi\fi} + +% От 10 до 19 +\def\Nadz@#1#2{\ifcase#2\V@{десят}\or\V@{одиннадцат}\or +\V@{двенадцат}\or\V@{тринадцат}\or\V@{четырнадцат}\or +\V@{пятнадцат}\or\V@{шестнадцат}\or\V@{семнадцат}\or +\V@{восемнадцат}\or\V@{девятнадцат}\fi\Ok@Nadz} + +\def\Ok@Nadz{\ifKol@\V@{ь}\else + \ifPor@Zen\V@{ая}\else\V@{ый}% +\fi\fi} + +% 20--99 +\def\Delat@Des#1#2{\ifKol@\Kol@Des#1% + \ifnum #2=0\relax\else + \ \Kol@Ed#2\fi\else + \ifnum #2=0\Por@Des#1\else + \Kol@Des#1\ \Por@Ed#2% +\fi\fi} + +\def\Kol@Des#1{\ifcase#1\or\or\V@{двадцать}\or\V@{тридцать}\or +\V@{сорок}\or\V@{пятьдесят}\or\V@{шестьдесят}\or +\V@{семьдесят}\or\V@{восемьдесят}\or\V@{девяносто}\fi} + +\def\Por@Des#1{\ifcase#1\or\or\V@{двадцат}\or\V@{тридцат}\or +\V@{сороков}\or\V@{пятидесят}\or\V@{шестидесят}\or +\V@{семидесят}\or\V@{восьмидесят}\or\V@{девяност}\fi\Ok@Des#1} + +\def\Ok@Des#1{\ifKol@\relax\else + \ifPor@Zen\V@{ая}\else + \ifcase#1\or\or\V@{ый}\or\V@{ый}\or\V@{ой}\else + \V@{ый}\fi +\fi\fi} + +% 100--999 +\def\Delat@Sot#1#2#3{% +\ifnum #2=0% + \ifnum #3=0% + \ifKol@\Kol@Sot#1\else\Por@Sot#1\fi\else + \Kol@Sot#1\ \Delat@Ed#3\fi\else +\Delat@Ост@Sot#1#2#3\fi} + +\def\Delat@Ост@Sot#1#2#3{\Kol@Sot#1\ \ifnum#2=1\Nadz@#2#3\else + \Delat@Des#2#3\fi} + +\def\Kol@Sot#1{\ifcase#1\or\V@{сто}\or\V@{двести}\or +\V@{триста}\or\V@{четыреста}\or\V@{пятьсот}\or\V@{шестьсот}\or +\V@{семьсот}\or\V@{восемьсот}\or\V@{девятьсот}\fi} + +\def\Por@Sot#1{\ifcase#1\or\V@{сот}\or\V@{двухсот}\or +\V@{трехсот}\or\V@{четырехсот}\or\V@{пятисот}\or\V@{шестисот}\or +\V@{семисот}\or\V@{восьмисот}\or\V@{девятисот}\fi\Ok@Nadz} + +% 1000--999999 (только для количественных числительных) +\def\Delat@Tys1#1#2#3#4#5#6{% + \Delat@P@Tys{#1}{#2}{#3}% +\Delat@V@Tys{#4}{#5}{#6}} + +% Первые три цифры +\def\Delat@P@Tys#1#2#3{% +\ifnum #1=0% + \ifnum #2=0% + \ifnum #3=1\V@{тысяча}\else + \ifnum #3=2\V@{две тысячи}\else + \Delat@Ed#3\ \V@{тысяч}% +\ifcase#3\or\or\or\V@{и}\or\V@{и}\else\relax\fi\fi\fi\else + \ifnum #2=1\Nadz@#2#3\ \V@{тысяч}\else + \ifnum #3=1\Delat@Des{#2}{0}\V@{одна тысяча}\else + \ifnum #3=2\Delat@Des{#2}{0}\V@{две тысячи}\else + \Delat@Des#2#3\ \V@{тысяч}% +\ifcase#3\or\or\or\V@{и}\or\V@{и}\else\relax\fi\fi\fi\fi\fi\else + \ifnum #3=1\Delat@Sot{#1}{#2}{0}\V@{одна тысяча}\else + \ifnum #3=2\Delat@Sot{#1}{#2}{0}\V@{две тысячи}\else +\Delat@Sot#1#2#3\ \V@{тысяч}\ifnum #2=1\relax\else +\ifcase#3\or\or\or\V@{и}\or\V@{и}\else\relax\fi\fi\fi\fi\fi} + +% Вторые три цифры +\def\Delat@V@Tys#1#2#3{% +\ifnum #1=0% + \ifnum #2=0% + \ifnum #3=0\relax\else + \ \Delat@Ed#3\fi\else + \ifnum #2=1\ \Nadz@#2#3\else + \ \Delat@Des#2#3\fi\fi\else +\ \Delat@Sot#1#2#3\fi} + +\endinput |