% 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