ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Wolfgang Schuster <schuster.wolfgang@googlemail.com>
To: ntg-context@ntg.nl
Subject: Re: page numbering in words?
Date: Mon, 26 Mar 2007 20:40:33 +0200	[thread overview]
Message-ID: <20070326204033.44b77989.schuster.wolfgang@googlemail.com> (raw)
In-Reply-To: <39FF4EA0-9392-4D97-B347-BB50F6593F80@mac.com>

[-- Attachment #1: Type: text/plain, Size: 399 bytes --]

On Mon, 26 Mar 2007 17:39:38 +0100
cormullion@mac.com wrote:

> is it possible to adjust options so as to get page numbering done in  
> words? Eg
> 
> "one" "two" ..... "eighty-nine" ... "three hundred and sixty seven" ?
> 
> Or does this require some more work/code?

I converted the macro to the plain TeX format. The only thing you need
to do now is to change the german text you own.

Wolfgang

[-- Attachment #2: zahl2string.tex --]
[-- Type: text/x-tex, Size: 3593 bytes --]

\catcode`\@=11

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

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

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

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

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

\def\@Numstring#1{\expandafter\@@Numstring\expandafter{\number#1}}

\def\@@Numstring#1%
  {\edef\@tempa{\@numstring{#1}}%
   \expandafter\MakeUppercase\@tempa}

\def\@ordstring#1{\ns@numstr{#1}\ns@neunzehnord{null\-te}{te}}

\def\@Ordstring#1{\expandafter\@@Ordstring\expandafter{\number#1}}

\def\@@Ordstring#1%
  {\edef\@tempa{\@ordstring{#1}}%
   \expandafter\MakeUppercase\@tempa}

\let\numstr\@numstring%
\let\Numstr\@Numstring%
\let\ordstr\@ordstring%
\let\Ordstr\@Ordstring%

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

\def\ns@numstr#1#2#3#4%
  {\ifnum\number#1<\@ne%
     #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@neunzehn%
   \ifnum#4#5#6>\@ne\-\fi%
   tau\-send%
   \ifnum#7>\z@\-\fi%
   \fi%
   \ns@hundred#7{#4#5#6}1#9}

\def\ns@million#1#2#3%
  {\ifnum#1#2#3=\@ne%
   \ns@hundred#1#2#301\ns@neunzehne%
   \space%
   Mil\-lion%
   \else%
   \ns@hundred#1#2#301\ns@neunzehns%
   \space%
   Mil\-lio\-nen%
   \fi}

\def\ns@hundred#1#2#3#4#5#6%
  {\ifnum#1>\z@%
   \ifnum#4#1>\@ne\ns@neunzehn#1\-\fi%
   hun\-dert%
   \ifnum#2#3>\z@\-\fi%
   \fi%
   \ifnum#2#3<20 %
   \ifnum#5#2#3>\@ne#6{#2#3}\fi%
   \else%
   \ifnum#3>\z@\ns@neunzehn#3\-und\-\fi%
   \ns@neunzig#2%
   #60%
   \fi}

\def\ns@neunzehn#1%
  {\ifcase#1\empty\or ein\or zwei\or drei\or vier\or f\"unf\or sechs\or%
   sie\-ben\or acht\or neun\or zehn\or elf\or zw\"olf\or drei\-zehn\or%
   vier\-zehn\or f\"unf\-zehn\or sech\-zehn\or sieb\-zehn\or%
   acht\-zehn\or neun\-zehn\fi}

\def\ns@neunzehns#1{\ifcase#1\empty\or eins\else\ns@neunzehn{#1}\fi}

\def\ns@neunzehne#1{\ifcase#1\empty\or ei\-ne\else\ns@neunzehn{#1}\fi}

\def\ns@neunzehnord#1%
  {\ifcase#1\-ste%
   \or er\-ste%
   \or zwei\-te%
   \or drit\-te%
   \or vier\-te%
   \or f\"unf\-te%
   \or sech\-ste%
   \or sieb\-te%
   \or ach\-te%
   \or neun\-te%
   \or zehn\-te%
   \or elf\-te%
   \or zw\"olf\-te%
   \or drei\-zehn\-te%
   \or vier\-zehn\-te%
   \or f\"unf\-zehn\-te%
   \or sech\-zehn\-te%
   \or sieb\-zehn\-te%
   \or acht\-zehn\-te%
   \or neun\-zehn\-te%
   \fi}

\def\ns@neunzig#1%
  {\ifcase#1
   \or
   \or zwan\-zig%
   \or drei\ss ig%
   \or vier\-zig%
   \or f\"unf\-zig%
   \or sech\-zig%
   \or sieb\-zig%
   \or acht\-zig%
   \or neun\-zig%
   \fi}

\catcode`\@=12

\endinput

[-- Attachment #3: zahltest.tex --]
[-- Type: text/x-tex, Size: 1058 bytes --]

\input zahl2string

\long\def\zahlexamples#1
  {0 $\Longrightarrow$ #1{0}\endgraf
   7 $\Longrightarrow$ #1{7}\endgraf
   13 $\Longrightarrow$ #1{13}\endgraf
   23 $\Longrightarrow$ #1{23}\endgraf
   42 $\Longrightarrow$ #1{42}\endgraf
   99 $\Longrightarrow$ #1{99}\endgraf
   127 $\Longrightarrow$ #1{127}\endgraf
   999 $\Longrightarrow$ #1{999}\endgraf
   1000 $\Longrightarrow$ #1{1000}\endgraf
   1001 $\Longrightarrow$ #1{1001}\endgraf
   2004 $\Longrightarrow$ #1{2004}\endgraf
   2017 $\Longrightarrow$ #1{2017}\endgraf
   2029 $\Longrightarrow$ #1{2029}\endgraf
   9999 $\Longrightarrow$ #1{9999}\endgraf
   10000 $\Longrightarrow$ #1{10000}\endgraf
   101101 $\Longrightarrow$ #1{101101}\endgraf
   999999 $\Longrightarrow$ #1{999999}\endgraf
   1000000 $\Longrightarrow$ #1{1000000}\endgraf
   1234567 $\Longrightarrow$ #1{1234567}\endgraf
   123456789 $\Longrightarrow$ #1{123456789}\endgraf
   101101101 $\Longrightarrow$ #1{101101101}\endgraf
   999999999 $\Longrightarrow$ #1{999999999}}

\zahlexamples{\numstr}

\zahlexamples{\ordstr}

\bye

[-- Attachment #4: Type: text/plain, Size: 139 bytes --]

_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

  parent reply	other threads:[~2007-03-26 18:40 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-26 16:39 cormullion
2007-03-26 18:16 ` Wolfgang Schuster
2007-03-26 18:44   ` cormullion
2007-03-26 18:40 ` Wolfgang Schuster [this message]
2007-03-26 21:31   ` cormullion
2007-03-28 11:03 ` cormullion
2007-03-28 11:59   ` Zhichu Chen
2007-03-28 12:09   ` Wolfgang Schuster
2007-03-28 15:09     ` cormullion
2007-03-28 15:49       ` Zhichu Chen
2007-03-28 22:15         ` cormullion
2007-03-29  7:39           ` Taco Hoekwater
2007-04-17 11:09             ` Mojca Miklavec
2007-04-16 12:52 Robin Kirkham

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070326204033.44b77989.schuster.wolfgang@googlemail.com \
    --to=schuster.wolfgang@googlemail.com \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).