%% %% %% 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'.