diff options
author | Karl Berry <karl@freefriends.org> | 2007-07-16 16:21:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-07-16 16:21:21 +0000 |
commit | 3a9e8147ea85b33b5d40a26bd5a6a6cccd6c08d4 (patch) | |
tree | 8c65a9ace03dca300ceccc64d6d720ba6718c96c /Master/texmf-dist/tex | |
parent | acf01e2e25e739d083b243bd2d7c14853c09fa43 (diff) |
new latex package numname (6jul07)
git-svn-id: svn://tug.org/texlive/trunk@4615 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/numname/numname.sty | 591 |
1 files changed, 591 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/numname/numname.sty b/Master/texmf-dist/tex/latex/numname/numname.sty new file mode 100644 index 00000000000..f2ca80ae185 --- /dev/null +++ b/Master/texmf-dist/tex/latex/numname/numname.sty @@ -0,0 +1,591 @@ +%% +%% +%% This is file is `numname.sty'. +%% +%% This is file is the number formatting portion of `memoir.cls'. And provides +%% some simple commands to write out the english name of a number. Refer to the +%% memoir packages documentation for usage. +%% +%% Author: S Joshua Swamidass +%% +%% The header of the original source file this was generated from: +%% +%% memoir.dtx (with options: `class') +%% +%% Author: Peter Wilson (herries dot press at earthlink dot net) +%% Herries Press +%% Copyright 2001--2005 Peter R. Wilson +%% +%% 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. +%% +%% This work has the LPPL maintenance status "author-maintained". +%% +%% This work consists of the files listed in the README file. +%% +%% +%% + +%%%%%%%%%%%%%%%%%%%% number formatting + +\newif\iflowernumtoname + \lowernumtonamefalse +\newif\ifpriornum +\newif\ifminusnumber +\newif\ifnotnumtonameallcaps +\newif\ifmakeordinal + +\newcommand*{\namenumberand}{ and } +\newcommand*{\namenumbercomma}{, } +\newcommand*{\lcminusname}{minus } +\newcommand*{\ucminusname}{Minus } +\let\minusname\lcminusname +\newcommand*{\fnumbersep}{,} +\newcommand*\tensunitsep{-} +\newcommand*{\nthstring}{th} % nth +\newcommand*{\iststring}{st} % 1st +\newcommand*{\iindstring}{nd} % 2nd +\newcommand*{\iiirdstring}{rd} % 3rd +\newcommand*{\tiethstring}{tieth} % tieth +\newcommand*{\teenstring}{teen} % teen +\newcommand{\ordscript}[1]{#1} + +\chardef\m@mten=10 % shorthand for 10 + +\newcounter{ism@mctr} % units +\newcounter{xsm@mctr} % tens +\newcounter{csm@mctr} % hundreds +\newcounter{ksm@mctr} % thousands +\newcounter{xksm@mctr} % ten thousands +\newcounter{cksm@mctr} % hundred thousands +\newcounter{msm@mctr} % millions +\newcounter{xmsm@mctr} % ten millions +\newcounter{cmsm@mctr} % hundred millions +\newcounter{bsm@mctr} % billions +\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@ % negative + \minusnumbertrue + \c@workm@mctr = -\c@workm@mctr + \fi + \ifnum \c@workm@mctr > \m@ne % units + \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@ % tens + \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@ % hundreds + \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@ % thousands + \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@ % ten thousands + \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@ % hundred thousands + \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@ % millions + \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@ % ten millions + \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@ % hundred millions + \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@% billions + \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 + \ifnum \c@bsm@mctr > \z@ % billions + \priornumtrue + \thebsm@mctr\fnumbersep + \fi + \ifpriornum % hundred millions + \thecmsm@mctr + \else + \ifnum \c@cmsm@mctr > \z@ + \priornumtrue + \thecmsm@mctr + \fi + \fi + \ifpriornum % ten millions + \thexmsm@mctr + \else + \ifnum \c@xmsm@mctr > \z@ + \priornumtrue + \thexmsm@mctr + \fi + \fi + \ifpriornum % millions + \themsm@mctr\fnumbersep + \else + \ifnum \c@msm@mctr > \z@ + \priornumtrue + \themsm@mctr\fnumbersep + \fi + \fi + \ifpriornum % hundred thousands + \thecksm@mctr + \else + \ifnum \c@cksm@mctr > \z@ + \priornumtrue + \thecksm@mctr + \fi + \fi + \ifpriornum % ten thousands + \thexksm@mctr + \else + \ifnum \c@xksm@mctr > \z@ + \priornumtrue + \thexksm@mctr + \fi + \fi + \ifpriornum % thousands + \theksm@mctr\fnumbersep + \else + \ifnum \c@ksm@mctr > \z@ + \priornumtrue + \theksm@mctr\fnumbersep + \fi + \fi + \ifpriornum % hundreds + \thecsm@mctr + \else + \ifnum \c@csm@mctr > \z@ + \priornumtrue + \thecsm@mctr + \fi + \fi + \ifpriornum % tens + \thexsm@mctr + \else + \ifnum \c@xsm@mctr > \z@ + \priornumtrue + \thexsm@mctr + \fi + \fi + \theism@mctr % units +} + +\newcommand*{\cardinal}[1]{% + \begingroup + \let\fnumbersep\relax + \form@tnumber{#1}% + \endgroup} +\newcommand*{\fcardinal}[1]{% + \begingroup + \form@tnumber{#1}% + \endgroup} + +\newcommand*{\ordinal}[1]{% + \begingroup + \let\fnumbersep\relax + \form@tnumber{#1}% + \let\ordstring\nthstring + \ifnum \c@xsm@mctr=\@ne\else + \ifcase \c@ism@mctr + \or \let\ordstring\iststring% 1st + \or \let\ordstring\iindstring% 2nd + \or \let\ordstring\iiirdstring% 3rd + \fi + \fi + \ordscript{\ordstring}% + \endgroup +} +\newcommand*{\fordinal}[1]{% + \begingroup + \form@tnumber{#1}% + \let\ordstring\nthstring + \ifnum \c@xsm@mctr=\@ne\else + \ifcase \c@ism@mctr + \or \let\ordstring\iststring% 1st + \or \let\ordstring\iindstring% 2nd + \or \let\ordstring\iiirdstring% 3rd + \fi + \fi + \ordscript{\ordstring}% + \endgroup +} + +\newcommand*\nNameo{\iflowernumtoname z\else Z\fi ero} +\newcommand*\nNamec{\iflowernumtoname h\else H\fi undred} +\newcommand*\nNamem{\iflowernumtoname t\else T\fi housand} +\newcommand*\nNamemm{\iflowernumtoname m\else M\fi illion} +\newcommand*\nNamemmm{\iflowernumtoname b\else B\fi illion} + +\newcommand*\nNamei{\iflowernumtoname o\else O\fi ne} +\newcommand*\nNameii{\iflowernumtoname t\else T\fi wo} +\newcommand*\nNameiii{\iflowernumtoname t\else T\fi hree} +\newcommand*\nNameiv{\iflowernumtoname f\else F\fi our} +\newcommand*\nNamev{\iflowernumtoname f\else F\fi ive} +\newcommand*\nNamevi{\iflowernumtoname s\else S\fi ix} +\newcommand*\nNamevii{\iflowernumtoname s\else S\fi even} +\newcommand*\nNameviii{\iflowernumtoname e\else E\fi ight} +\newcommand*\nNameix{\iflowernumtoname n\else N\fi ine} +\newcommand*\nNamex{\iflowernumtoname t\else T\fi en} +\newcommand*\nNamexi{\iflowernumtoname e\else E\fi leven} +\newcommand*\nNamexii{\iflowernumtoname t\else T\fi welve} +\newcommand*\nNamexiii{\iflowernumtoname t\else T\fi hir\teenstring} +\newcommand*\nNamexiv{\iflowernumtoname f\else F\fi our\teenstring} +\newcommand*\nNamexv{\iflowernumtoname f\else F\fi if\teenstring} +\newcommand*\nNamexvi{\iflowernumtoname s\else S\fi ix\teenstring} +\newcommand*\nNamexvii{\iflowernumtoname s\else S\fi even\teenstring} +\newcommand*\nNamexviii{\iflowernumtoname e\else E\fi igh\teenstring} +\newcommand*\nNamexix{\iflowernumtoname n\else N\fi ine\teenstring} +\newcommand*\nNamexx{\iflowernumtoname t\else T\fi wenty} +\newcommand*\nNamexxx{\iflowernumtoname t\else T\fi hirty} +\newcommand*\nNamexl{\iflowernumtoname f\else F\fi orty} +\newcommand*\nNamel{\iflowernumtoname f\else F\fi ifty} +\newcommand*\nNamelx{\iflowernumtoname s\else S\fi ixty} +\newcommand*\nNamelxx{\iflowernumtoname s\else S\fi eventy} +\newcommand*\nNamelxxx{\iflowernumtoname e\else E\fi ighty} +\newcommand*\nNamexc{\iflowernumtoname n\else N\fi inety} + +\newcommand*{\unitnumbername}[1]{% + \ifcase #1 \nNameo\or + \nNamei\or + \nNameii\or + \nNameiii\or + \nNameiv\or + \nNamev\or + \nNamevi\or + \nNamevii\or + \nNameviii\or + \nNameix\fi} + +\newcommand*{\teennumbername}[1]{% + \ifcase #1 \nNamex\or + \nNamexi\or + \nNamexii\or + \nNamexiii\or + \nNamexiv\or + \nNamexv\or + \nNamexvi\or + \nNamexvii\or + \nNamexviii\or + \nNamexix\fi} + +\newcommand*{\tensnumbername}[2]{% + \ifnum #1=\@ne + \teennumbername{#2}\ifnotnumtonameallcaps\lowernumtonametrue\fi + \else + \ifcase #1 + \or + \or \nNamexx + \or \nNamexxx + \or \nNamexl + \or \nNamel + \or \nNamelx + \or \nNamelxx + \or \nNamelxxx + \or \nNamexc + \fi + \ifnotnumtonameallcaps\lowernumtonametrue\fi + \ifnum #2 > \z@ \tensunitsep\unitnumbername{#2}\fi + \fi} + +\newcommand*\nthNameo{\nNameo\nthstring} +\newcommand*\nthNamei{\iflowernumtoname f\else F\fi irst} +\newcommand*\nthNameii{\iflowernumtoname s\else S\fi econd} +\newcommand*\nthNameiii{\iflowernumtoname t\else T\fi hird} +\newcommand*\nthNameiv{\nNameiv\nthstring} +\newcommand*\nthNamev{\iflowernumtoname f\else F\fi if\nthstring} +\newcommand*\nthNamevi{\nNamevi\nthstring} +\newcommand*\nthNamevii{\nNamevii\nthstring} +\newcommand*\nthNameviii{\iflowernumtoname e\else E\fi igh\nthstring} +\newcommand*\nthNameix{\iflowernumtoname n\else N\fi in\nthstring} +\newcommand*\nthNamexii{\iflowernumtoname t\else T\fi welf\nthstring} + +\newcommand*{\unitordinalname}[1]{% + \ifcase #1 \nthNameo\or + \nthNamei\or + \nthNameii\or + \nthNameiii\or + \nthNameiv\or + \nthNamev\or + \nthNamevi\or + \nthNamevii\or + \nthNameviii\or + \nthNameix\fi} + +\newcommand*{\teenordinalname}[1]{% + \ifcase #1 \nNamex\nthstring\or + \nNamexi\nthstring\or + \nthNamexii\or + \nNamexiii\nthstring\or + \nNamexiv\nthstring\or + \nNamexv\nthstring\or + \nNamexvi\nthstring\or + \nNamexvii\nthstring\or + \nNamexviii\nthstring\or + \nNamexix\nthstring\fi} + +\newcommand*{\tensordinalname}[2]{% + \ifnum #1=\@ne + \teenordinalname{#2}\ifnotnumtonameallcaps\lowernumtonametrue\fi + \else + \ifnum #2> \z@ + \ifcase #1 + \or + \or \nNamexx + \or \nNamexxx + \or \nNamexl + \or \nNamel + \or \nNamelx + \or \nNamelxx + \or \nNamelxxx + \or \nNamexc + \fi + \ifnotnumtonameallcaps\lowernumtonametrue\fi + \tensunitsep\unitordinalname{#2} + \else + \ifcase #1 + \or + \or \nthNamexx + \or \nthNamexxx + \or \nthNamexl + \or \nthNamel + \or \nthNamelx + \or \nthNamelxx + \or \nthNamelxxx + \or \nthNamexc + \fi + \ifnotnumtonameallcaps\lowernumtonametrue\fi + \fi + \fi} + +\newcommand*\nthNamexx{\iflowernumtoname t\else T\fi wen\tiethstring} +\newcommand*\nthNamexxx{\iflowernumtoname t\else T\fi hir\tiethstring} +\newcommand*\nthNamexl{\iflowernumtoname f\else F\fi or\tiethstring} +\newcommand*\nthNamel{\iflowernumtoname f\else F\fi if\tiethstring} +\newcommand*\nthNamelx{\iflowernumtoname s\else S\fi ix\tiethstring} +\newcommand*\nthNamelxx{\iflowernumtoname s\else S\fi even\tiethstring} +\newcommand*\nthNamelxxx{\iflowernumtoname e\else E\fi igh\tiethstring} +\newcommand*\nthNamexc{\iflowernumtoname n\else N\fi ine\tiethstring} + +\newcommand*{\n@me@number}[1]{% +\begingroup + \numdigits{#1}% + \ifminusnumber\minusname\fi + \priornumfalse +%% billions + \ifnum \c@bsm@mctr > \z@ + \unitnumbername{\thebsm@mctr}\space + \ifnotnumtonameallcaps\lowernumtonametrue\fi\nNamemmm + \priornumtrue + \fi +%% hundred millions + \ifnum \c@cmsm@mctr > \z@ + \ifpriornum\namenumbercomma\fi + \unitnumbername{\thecmsm@mctr}\space + \ifnotnumtonameallcaps\lowernumtonametrue\fi\nNamec + \priornumtrue + \fi +%% tens/units millions + \ifnum \c@xmsm@mctr > \z@ + \ifpriornum + \ifnum\c@cmsm@mctr>\z@\namenumberand\else\namenumbercomma\fi + \fi + \tensnumbername{\thexmsm@mctr}{\themsm@mctr}% + \priornumtrue + \else + \ifnum \c@msm@mctr > \z@ + \ifpriornum + \ifnum\c@cmsm@mctr>\z@\namenumberand\else\namenumbercomma\fi + \fi + \unitnumbername{\themsm@mctr}% + \ifnotnumtonameallcaps\lowernumtonametrue\fi + \priornumtrue + \fi + \fi + \ifnum \c@cmsm@mctr > \z@ + \ifpriornum\space\fi + \nNamemm + \else + \ifnum \c@xmsm@mctr > \z@ + \ifpriornum\space\fi + \nNamemm + \else + \ifnum \c@msm@mctr > \z@ + \ifpriornum\space\fi + \nNamemm + \fi + \fi + \fi +%% hundred thousands + \ifnum \c@cksm@mctr > \z@ + \ifpriornum\namenumbercomma\fi + \unitnumbername{\thecksm@mctr}\space + \ifnotnumtonameallcaps\lowernumtonametrue\fi\nNamec + \priornumtrue + \fi +%% tens/units thousands + \ifnum \c@xksm@mctr > \z@ + \ifpriornum + \ifnum\c@cksm@mctr>\z@\namenumberand\else\namenumbercomma\fi + \fi + \tensnumbername{\thexksm@mctr}{\theksm@mctr}% + \priornumtrue + \else + \ifnum \c@ksm@mctr > \z@ + \ifpriornum + \ifnum\c@cksm@mctr>\z@\namenumberand\else\namenumbercomma\fi + \fi + \unitnumbername{\theksm@mctr}% + \ifnotnumtonameallcaps\lowernumtonametrue\fi + \priornumtrue + \fi + \fi + \ifnum \c@cksm@mctr > \z@ + \ifpriornum\space\fi + \nNamem + \else + \ifnum \c@xksm@mctr > \z@ + \ifpriornum\space\fi + \nNamem + \else + \ifnum \c@ksm@mctr > \z@ + \ifpriornum\space\fi + \nNamem + \fi + \fi + \fi +%% hundreds + \ifnum \c@csm@mctr > \z@ + \ifpriornum\namenumbercomma\fi + \unitnumbername{\thecsm@mctr}\space + \ifnotnumtonameallcaps\lowernumtonametrue\fi\nNamec + \priornumtrue + \fi +%% tens/units + \ifmakeordinal + \ifnum \c@xsm@mctr > \z@ + \ifpriornum\namenumberand\fi + \tensordinalname{\thexsm@mctr}{\theism@mctr}% + \else + \ifnum \c@ism@mctr > \z@ + \ifpriornum\namenumberand\fi + \unitordinalname{\theism@mctr}% + \else + \ifpriornum\nthstring\else\unitordinalname{\theism@mctr}\fi + \fi + \fi + \else % not ordinal + \ifnum \c@xsm@mctr > \z@ + \ifpriornum\namenumberand\fi + \tensnumbername{\thexsm@mctr}{\theism@mctr}% + \else + \ifnum \c@ism@mctr > \z@ + \ifpriornum\namenumberand\fi + \unitnumbername{\theism@mctr}% + \else + \ifpriornum\else\unitnumbername{\theism@mctr}\fi + \fi + \fi + \fi % end ifmakeordinal +\endgroup +} + +\newcommand*{\numtoname}[1]{% + \makeordinalfalse + \notnumtonameallcapstrue% + \lowernumtonametrue% + \n@me@number{#1}} + +\newcommand*{\numtoName}[1]{% + \makeordinalfalse + \notnumtonameallcapstrue% + \lowernumtonamefalse% + \n@me@number{#1}} + +\newcommand*{\NumToName}[1]{% + \makeordinalfalse + \notnumtonameallcapsfalse% + \lowernumtonamefalse% + \n@me@number{#1}} + +\newcommand*{\ordinaltoname}[1]{% + \makeordinaltrue + \notnumtonameallcapstrue% + \lowernumtonametrue% + \n@me@number{#1}} + +\newcommand*{\ordinaltoName}[1]{% + \makeordinaltrue + \notnumtonameallcapstrue% + \lowernumtonamefalse% + \n@me@number{#1}} + +\newcommand*{\OrdinalToName}[1]{% + \makeordinaltrue + \notnumtonameallcapsfalse% + \lowernumtonamefalse% + \n@me@number{#1}} +%% +%% End of file `numname.sty'. |