Page numbering in words
To number pages using words rather than numbers (eg 'three' or 'twentyfive' rather than 3 or 25), put the following code in your document:
\input numstr \defineconversion [numstring][\numstr] \setuppagenumbering[conversion=numstring]
and make the following macro file (numstr.tex) available:
\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
This code originated with Jonathan Sauerand (in German), and was modified and explained by Wolfgang Schuster and Zhichu Chen.