Changes

Jump to navigation Jump to search
first draft - hoping others more knowledgeable will improve
To number pages using words rather than numbers (eg 'three' or 'twentyfive' rather than 3 or 25), put the following code in your document:

<texcode>
\input numstr

\defineconversion [numstring][\numstr]
\setuppagenumbering[conversion=numstring]
</texcode>

and make the following macro file (numstr.tex) available:

<texcode>
\unprotect

\def\numstring#1{\expandafter\@numstring\csname c@#1\endcsname}

\def\@numstring#1{\ns@numstr{#1}\ns@nineteens{null}{}}

\let\numstr\@numstring%

\def\ns@numoutofrange#1#2{\number#1#2}

\def\ns@numstr#1#2#3#4%
{\ifnum\number#1<\plusone%
#3%
\else\ifnum\number#1<1000000000 %
\expandafter\ns@numstring\expandafter{\number#1}#2%
\else%
\ns@numoutofrange{#1}{#4}%
\fi\fi}

\def\ns@numstring#1#2{%
\expandafter\ns@@numstring%
\ifcase%
\ifnum#1<10 1%
\else\ifnum#1<100 2%
\else\ifnum#1<\@m 3%
\else\ifnum#1<\@M 4%
\else\ifnum#1<100000 5%
\else\ifnum#1<1000000 6%
\else\ifnum#1<10000000 7%
\else\ifnum#1<100000000 8%
\else9%
\fi\fi\fi\fi\fi\fi\fi\fi %
\or00000000#1% case 1: Add 8 leading zeros
\or0000000#1% case 2: Add 7 leading zeros
\or000000#1% case 3: Add 6 leading zeros
\or00000#1% case 4: Add 5 leading zeros
\or0000#1% case 5: Add 4 leading zeros
\or000#1% case 6: Add 3 leading zeros
\or00#1% case 7: Add 2 leading zeros
\or0#1% case 8: Add 1 leading zero
\or#1% case 9: Add no leading zeros
\or%
\@nil#2%
\fi}

\def\ns@@numstring#1#2#3#4#5#6#7\or#8\@nil#9%
{\ifnum#1#2#3>\z@
\ns@million#1#2#3%
\ifnum#4#5#6>\z@\space\fi%
\fi%
\ifnum#4#5#6>\z@%
\ns@hundred#4#5#6{#1#2#3}{#4#5}\ns@nineteen%
\ifnum#4#5#6>\z@\space\fi%
thousand%
\ifnum#7>\z@\space\fi%
\fi%
\ns@hundred#7{#4#5#6}1#9}

\def\ns@million#1#2#3%
{\ifnum#1#2#3=\plusone%
\ns@hundred#1#2#301\ns@nineteene%
\space%
million%
\else%
\ns@hundred#1#2#301\ns@nineteens%
\space%
millions%
\fi}

\def\ns@hundred#1#2#3#4#5#6%
{\ifnum#1>\z@%
\ifnum#4#1>\z@\ns@nineteen#1\space\fi%
hundred%
\ifnum#2#3>\z@\space and\space\fi%
\fi%
\ifnum#2#3<20 %
\ifnum#5#2#3>\z@#6{#2#3}\fi%
\else%
\ns@ninety#2\ifnum#3>\z@-\ns@nineteen#3\fi%
#60%
\fi}

\def\ns@nineteen#1%
{\ifcase#1\empty\or one\or two\or three\or four\or five\or six\or%
seven\or eight\or nine\or ten\or eleven\or twelve\or thirteen\or%
fourteen\or fifteen\or sixteen\or seventeen\or%
eighteen\or nineteen\fi}

\def\ns@nineteens#1{\ns@nineteen{#1}}

\def\ns@nineteene#1{\ns@nineteen{#1}}


\def\ns@ninety#1%
{\ifcase#1
\or
\or twenty%
\or thirty%
\or forty%
\or fifty%
\or sixty%
\or seventy%
\or eighty%
\or ninety%
\fi}

\protect
</texcode>

This code originated with Jonathan Sauerand (in German), and was improved and explained by Wolfgang Schuster and Zhichu Chen.
5

edits

Navigation menu