From b7edbe05e19bc98b914e35d67cc6ac17c6490bbd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 24 Aug 2007 18:37:22 +0000 Subject: fmtcount 1.3 (21aug07) git-svn-id: svn://tug.org/texlive/trunk@4800 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/fmtcount/README | 4 +- Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES | 11 + .../doc/latex/fmtcount/doc/fmtcount-manual.html | 700 +++ .../texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf | Bin 277606 -> 147903 bytes .../texmf-dist/doc/latex/fmtcount/doc/manual.html | 567 -- Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl | 2670 ++++++++++ .../doc/latex/fmtcount/latex2html/fmtcount.perl | 485 +- .../doc/latex/fmtcount/source/fmtcount.dtx | 5491 -------------------- .../doc/latex/fmtcount/source/fmtcount.ins | 35 - 9 files changed, 3625 insertions(+), 6338 deletions(-) create mode 100644 Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount-manual.html delete mode 100644 Master/texmf-dist/doc/latex/fmtcount/doc/manual.html create mode 100644 Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl delete mode 100644 Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.dtx delete mode 100644 Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.ins (limited to 'Master/texmf-dist/doc/latex') diff --git a/Master/texmf-dist/doc/latex/fmtcount/README b/Master/texmf-dist/doc/latex/fmtcount/README index f6d1dbb18cd..9efe57f814a 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/README +++ b/Master/texmf-dist/doc/latex/fmtcount/README @@ -1,6 +1,6 @@ -LaTeX Package : fmtcount v 1.1 +LaTeX Package : fmtcount v 1.3 -Last Modified : 14 June 2007 +Last Modified : 20 Aug 2007 Author : Nicola Talbot diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES b/Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES index 6b302dcb615..ea92a56993a 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES +++ b/Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES @@ -1,5 +1,16 @@ fmtcount package versions: +Version 1.3: + + * no longer loads xspace package (was causing extraneous + spaces when the optional argument to \ordinalstring etc + was omitted.) + * Made some long commands short. + * Changes licence text in fmtcount.ins to conform with LPPL. + +Version 1.2: fmtcount now loads xspace package, and uses \xspace +after \numberstring etc. + Version 1.1: Added German support. Added check for USenglish and UKenglish babel settings. diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount-manual.html b/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount-manual.html new file mode 100644 index 00000000000..2d7fd1c0d6e --- /dev/null +++ b/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount-manual.html @@ -0,0 +1,700 @@ + + + + + +fmtcount.sty v1.3: Displaying the Values of LaTeX Counters + + + + + + + + + + + + + + +

+ +

fmtcount.sty v1.3: Displaying the Values of +LaTeX Counters

+

Nicola L.C. Talbot +
+
+School of Computing Sciences +
+University of East Anglia +
+Norwich. NR4 7TJ. +
+United Kingdom. +
http://theoval.cmp.uea.ac.uk/~nlct/

+

20 Aug 2007

+
+ +

+Contents +

+ + + + +

+Introduction +

+The fmtcount package provides commands to display +the values of LaTeX counters in a variety of formats. It also +provides equivalent commands for actual numbers rather than +counter names. Limited multilingual support is available. +Currently, there is only support for English, French (including +Belgian and Swiss variations), Spanish, Portuguese and German. + +

+ +

+Installation +

+ +

+This package is distributed with the files fmtcount.dtx +and fmtcount.ins. To extract the code do: +

+latex fmtcount.ins
+
+This will create the files fmtcount.sty and +fmtcount.perl, along with several .def files. +Place fmtcount.sty and the .def files somewhere +where LaTeX will find them (e.g. +texmf/tex/latex/fmtcount/) and place fmtcount.perl +somewhere where LaTeX2HTML +will find it (e.g. latex2html/styles). Remember to refresh +the TeX database (using texhash or mktexlsr +under Linux, for +other operating systems check the manual.) + +

+ +

+Available Commands +

+ +

+The commands can be divided into two categories: those that +take the name of a counter as the argument, and those +that take a number as the argument. + +

+ +

+\ordinal{counter}[gender] +

+This will print the value of a LaTeX counter counter as an +ordinal, where the macro + +

+\fmtord{text} +

+is used to format the st, nd, rd, th bit. By default the ordinal is +formatted as a superscript, if the package option level is +used, it is level with the text. For example, if the current section +is 3, then \ordinal{section} will produce the output: +3rd. Note that the optional argument gender +occurs at the end. This argument may only take one of +the following values: m (masculine), f +(feminine) or n (neuter.) If gender is omitted, +or if the given gender has no meaning in the current language, +m is assumed. + +

+Notes: + +

    +
  1. the memoir class also defines a command called +\ordinal which takes a number as an argument instead of a +counter. In order to overcome this incompatiblity, if you want +to use the fmtcount package with the memoir class +you should use \FCordinal to access +fmtcount's version of \ordinal, and use +\ordinal to use memoir's version of that command. + +

    +

  2. +
  3. As with all commands which have an optional argument as the +last argument, if the optional argument is omitted, any spaces +following the final argument will be ignored. Whereas, if the +optional argument is present, any spaces following the optional +argument won't be ignored. so \ordinal{section} ! +will produce: 3rd! whereas + \ordinal{section}[m] ! will produce: +3rd ! +
  4. +
+ +

+ +

+\ordinalnum{n}[gender] +

+This is like \ordinal but takes an actual number rather than a +counter as the argument. For example: \ordinalnum{3} will +produce: 3rd. + +

+ +

+\numberstring{counter}[gender] +

+This will print the value of counter as text. E.g. \numberstring{section} will produce: three. The optional +argument is the same as that for \ordinal. + +

+ +

+\Numberstring{counter}[gender] +

+This does the same as \numberstring, but with initial letters in +uppercase. For example, \Numberstring{section} will produce: +Three. + +

+ +

+\NUMBERstring{counter}[gender] +

+This does the same as \numberstring, but converts the string to +upper case. Note that +\MakeUppercase{\NUMBERstring{counter}} doesn't +work, due to the way that \MakeUppercase expands its +argument1. + +

+ +

+\numberstringnum{n}[gender] +

+ +

+\Numberstringnum{n}[gender] +

+ +

+\NUMBERstringnum{n}[gender] +

+Theses macros work like +\numberstring, \Numberstring and \NUMBERstring, +respectively, but take an actual number +rather than a counter as the argument. For example: +\Numberstringnum{105} will produce: One Hundred and Five. + +

+ +

+\ordinalstring{counter}[gender] +

+This will print the value of counter as a textual ordinal. +E.g. \ordinalstring{section} will produce: third. The +optional argument is the same as that for \ordinal. + +

+ +

+\Ordinalstring{counter}[gender] +

+This does the same as \ordinalstring, but with initial letters in +uppercase. For example, \Ordinalstring{section} will produce: +Third. + +

+ +

+\ORDINALstring{counter}[gender] +

+This does the same as \ordinalstring, but with all words in upper +case (see previous note about \MakeUppercase). + +

+ +

+\ordinalstringnum{n}[gender] +

+ +

+\Ordinalstringnum{n}[gender] +

+ +

+\ORDINALstringnum{n}[gender] +

+These macros work like \ordinalstring, \Ordinalstring and +\ORDINALstring, respectively, but take an actual number rather +than a counter as the argument. For example, +\ordinalstringnum{3} will produce: third. + +

+As from version 1.09, textual representations can be stored for +later use. This overcomes the problems encountered when you +attempt to use one of the above commands in \edef. + +

+Each of the following commands takes a label as the first argument, +the other arguments are as the analogous commands above. These +commands do not display anything, but store the textual +representation. This can later be retrieved using + +

+\FMCuse{label} +

+Note: with \storeordinal and \storeordinalnum, the +only bit that doesn't get expanded is \fmtord. So, for +example, \storeordinalnum{mylabel}{3} will be stored as +3\relax \fmtord{rd}. + +

+ +

+\storeordinal{label}{counter}[gender] +

+ +

+\storeordinalstring{label}{counter}[gender] +

+ +

+\storeOrdinalstring{label}{counter}[gender] +

+ +

+ +

+\storeORDINALstring{label}{counter}[gender] +

+ +

+\storenumberstring{label}{counter}[gender] +

+ +

+\storeNumberstring{label}{counter}[gender] +

+ +

+\storeNUMBERstring{label}{counter}[gender] +

+ +

+\storeordinalnum{label}{number}[gender] +

+ +

+\storeordinalstring{label}{number}[gender] +

+ +

+\storeOrdinalstringnum{label}{number}[gender] +

+ +

+\storeORDINALstringnum{label}{number}[gender] +

+ +

+\storenumberstring{label}{number}[gender] +

+ +

+\storeNumberstring{label}{number}[gender] +

+ +

+\storeNUMBERstring{label}{number}[gender] +

+ +

+ +

+\binary{counter} +

+This will print the +value of counter as a binary number. +E.g. \binary{section} will produce: 11. The declaration + +

+\padzeroes[n] +

+will ensure numbers are written to n digits, padding with +zeroes if necessary. E.g. \padzeroes[8]\binary{section} +will produce: 00000011. The default value for n is 17. + +

+ +

+\binary{n} +

+This is like \binary but takes an actual number rather than a +counter as the argument. For example: \binarynum{5} will +produce: 101. + +

+ +

+\octal{counter} +

+This will print the value of counter as an octal number. For +example, if you have a counter called, say mycounter, and +you set the value to 125, then \octal{mycounter} will produce: +177. Again, the number will be padded with zeroes if necessary, +depending on whether \padzeroes has been used. + +

+ +

+\octalnum{n} +

+This is like \octal but takes an actual number rather than a +counter as the argument. For example: \octalnum{125} will +produce: 177. + +

+ +

+\hexadecimal{counter} +

+This will print the value of counter as a hexadecimal number. +Going back to the counter used in the previous example, +\hexadecimal{mycounter} will produce: 7d. Again, the number +will be padded with zeroes if necessary, depending on whether +\padzeroes has been used. + +

+ +

+\Hexadecimal{counter} +

+This does the same thing, but uses uppercase characters, e.g. \Hexadecimal{mycounter} will produce: 7D. + +

+ +

+\hexadecimalnum{n} +

+ +

+\Hexadecimalnum{n} +

+These are like \hexadecimal and \Hexadecimal +but take an actual number rather than a counter as the +argument. For example: \hexadecimalnum{125} will +produce: 7d, and \Hexadecimalnum{125} will +produce: 7D. + +

+ +

+\decimal{counter} +

+This is similar to \arabic but the number can be padded with +zeroes depending on whether \padzeroes has been used. For +example: \padzeroes[8]\decimal{section} will produce: +00000005. + +

+ +

+\decimalnum{n} +

+This is like \decimal but takes an actual number rather than a +counter as the argument. For example: +\padzeroes[8]\decimalnum{5} will produce: 00000005. + +

+ +

+\aaalph{counter} +

+This will print the value of counter as: a b ... z aa bb +... zz etc. For example, \aaalpha{mycounter} will +produce: uuuuu if mycounter is set to 125. + +

+ +

+\AAAlph{counter} +

+This does the same thing, but uses uppercase characters, e.g. \AAAlph{mycounter} will produce: UUUUU. + +

+ +

+\aaalphnum{n} +

+ +

+\AAAlphnum{n} +

+These macros are like \aaalph and \AAAlph +but take an actual number rather than a counter as the +argument. For example: \aaalphnum{125} will +produce: uuuuu, and \AAAlphnum{125} will +produce: UUUUU. + +

+ +

+\abalph{counter} +

+This will print the value of counter as: a b ... z aa ab +... az etc. For example, \abalpha{mycounter} will +produce: du if mycounter is set to 125. + +

+ +

+\ABAlph{counter} +

+This does the same thing, but uses uppercase characters, e.g. \ABAlph{mycounter} will produce: DU. + +

+ +

+\abalphnum{n} +

+ +

+\ABAlphnum{n} +

+These macros are like \abalph and \ABAlph +but take an actual number rather than a counter as the +argument. For example: \abalphnum{125} will +produce: du, and \ABAlphnum{125} will +produce: DU. + +

+ +

+Package Options +

+ +

+The following options can be passed to this package: + +

+ + + + + + + +
raisemake ordinal st,nd,rd,th appear as superscript
levelmake ordinal st,nd,rd,th appear level with rest of +text
+ +

+These can also be set using the command: + +

+ +

+\fmtcountsetoptions{fmtord=type} +

+where type is either level or +raise. + +

+ +

+Multilingual Support +

+ +

+Version 1.02 of the fmtcount package now has +limited multilingual support. The following languages are +implemented: English, Spanish, Portuguese, French, French (Swiss) +and French (Belgian). German support was added in version +1.12. + +

+The package checks to see if the command \l@language is +defined3, +and will load the code for those languages. The commands +\ordinal, \ordinalstring and \numberstring (and their +variants) will then be formatted in the currently selected language. + +

+If the French language is selected, the French (France) version +will be used by default (e.g. soxiante-dix for 70). To +select the Swiss or Belgian variants (e.g. septente for 70) use: +\fmtcountsetoptions{french=dialect} +where dialect is either swiss or belgian. +You can also use this command to change the action of +\ordinal. +\fmtcountsetoptions{abbrv=true} to produce ordinals +of the form 2e or +\fmtcountsetoptions{abbrv=false} to produce ordinals +of the form 2eme (default). + +

+The french and abbrv settings only have an +effect if the French language has been defined. + +

+The male gender for all languages is used by default, however the +feminine or neuter forms can be obtained by passing f or +n as an optional argument to \ordinal, +\ordinalnum etc. For example: +\numberstring{section}[f]. Note that the optional argument +comes after the compulsory argument. If a gender is +not defined in a given language, the masculine version will +be used instead. + +

+Let me know if you find any spelling mistakes (has been known +to happen in English, let alone other languages with which I'm not so +familiar.) If you want to add support for another language, +you will need to let me know how to form the numbers and ordinals +from 0 to 99999 in that language for each gender. + +

+ +

+Configuration File fmtcount.cfg +

+ +

+You can save your preferred default settings to a file called +fmtcount.cfg, and place it on the TeX path. These +settings will then be loaded by the fmtcount +package. + +

+Note that if you are using the datetime package, +the datetime.cfg configuration file will override +the fmtcount.cfg configuration file. +For example, if datetime.cfg has the line: +

+\renewcommand{\fmtord}[1]{\textsuperscript{\underline{#1}}}
+
+and if fmtcount.cfg has the line: +
+\fmtcountsetoptions{fmtord=level}
+
+then the former definition of \fmtord will take +precedence. + +

+ +

+LaTeX2HTML style +

+ +

+The LaTeX2HTML style file fmtcount.perl is provided. +The following limitations apply: + +

+ +

+ +

+ +

+Acknowledgements +

+ +

+I would like to thank my mother for the French and Portuguese +support and my Spanish dictionary for the Spanish support. +Thank you to K. H. Fricke for providing me with the German +translations. + +

+ +

+Troubleshooting +

+ +

+There is a FAQ available at: +http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/. + +

+


Footnotes

+
+
... +argument1
+
See all the various postings to +comp.text.tex about \MakeUppercase + +
+
... +1.12
+
Thanks to K. H. Fricke for supplying the information + +
+
... +defined3
+
this will be true if you have loaded babel + +
+
+

+
+Nicola L. C. Talbot. +School of Computing Sciences. +University of East Anglia. +Last Modified: 2007-08-20 +
+ + diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf b/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf index fe3cccc2ab0..84132f07fb4 100644 Binary files a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf and b/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf differ diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/manual.html b/Master/texmf-dist/doc/latex/fmtcount/doc/manual.html deleted file mode 100644 index be8c0b2c915..00000000000 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/manual.html +++ /dev/null @@ -1,567 +0,0 @@ - - - - - -fmtcount.sty v1.1: Displaying the Values of LaTeX Counters - - - - - - - - - - - - - -Dr Nicola Talbot -| -School of Computing Sciences -| -University of East Anglia - -

- -

fmtcount.sty v1.1: Displaying the Values of -LaTeX Counters

-

Nicola L.C. Talbot

-

26th May 2007

-
- -

-Contents -

- - - - -

-Introduction -

-The fmtcount package provides commands to display -the values of LaTeX counters in a variety of formats. It also -provides equivalent commands for actual numbers rather than -counter names. Limited multilingual support is available. - -

- -

-Installation -

- -

-This package is distributed with the files fmtcount.dtx -and fmtcount.ins. To extract the code do: -

-latex fmtcount.ins
-
-This will create the files fmtcount.sty and -fmtcount.perl, along with several .def files. -Place fmtcount.sty and the .def files somewhere -where LaTeX will find them (e.g. texmf/tex/latex/fmtcount/) and place fmtcount.perl somewhere where LaTeX2HTML -will find it (e.g. latex2html/styles). Remember to refresh -the TeX database (using texhash under Linux, for -other operating systems check the manual.) - -

- -

-Available Commands -

- -

-The commands can be divided into two categories: those that -take the name of a counter as the argument, and those -that take a number as the argument. - -

-The macro \ordinal{counter} will - print the value of a LaTeX counter counter as an ordinal, - - where the macro \fmtord{text} is used to format the st,nd,rd,th bit. - By default the ordinal is formatted as a superscript, if the package option level - is used, it is level with the text. - For example, if the current section is 3, then \ordinal{section} will produce - the output: 3rd. - -

-Note: the memoir class also defines a command called -\ordinal which takes a number as an argument instead of a -counter. In order to overcome this incompatiblity, if you want -to use the fmtcount package with the memoir class -you should use \FCordinal to access fmtcount's -version of \ordinal, and use \ordinal to use -memoir's version of that command. - -

-The macro \ordinalnum is like \ordinal -but takes an actual number rather than a counter as the -argument. For example: \ordinalnum{3} will -produce: 3rd. - -

-The macro \numberstring{counter} will print the value - of counter as text. E.g. \numberstring{section} will produce: - three. - - The macro \Numberstring{counter} does the same as - \numberstring, but with initial letters in uppercase. For - example, \Numberstring{section} will produce: Three. - -The macro \NUMBERstring{counter} does the same -as \numberstring, but converted to upper case. Note that -\MakeUppercase{\NUMBERstring{counter}} doesn't -work, due to the way that \MakeUppercase expands its -argument1. - -

-The macros \numberstringnum, -\Numberstringnum and -\NUMBERstringnum work like -\numberstring, -\Numberstring and -\NUMBERstring, respectively, but take an actual number -rather than a counter as the argument. For example: -\Numberstringnum{105} will produce: One Hundred and Five. - -

-The macro \ordinalstring{counter} will print the - value of counter as a textual ordinal. E.g. \ordinalstring{section} will produce: third. - - The macro \Ordinalstring{counter} does the same as - \ordinalstring, but with initial letters in uppercase. For example, - \Ordinalstring{section} will produce: Third. - - The macro \ORDINALstring{counter} does the same as -\ordinalstring, but with all words in upper case (see previous -note about \MakeUppercase). - -

-The macros \ordinalstringnum, -\Ordinalstringnum and \ORDINALstringnum work like -\ordinalstring, -\Ordinalstring and \ORDINALstring, respectively, but take an actual number -rather than a counter as the argument. For example, -\ordinalstringnum{3} will produce: third. - -

-As from version 1.09, textual representations can be stored for -later use. This overcomes the problems encountered when you -attempt to use one of the above commands in \edef. - -

-Each of the following commands takes a label as the first argument, -the other arguments are as the analogous commands above. These -commands do not display anything, but store the textual -representation. This can later be retrieved using -\FMCuse{label}. -Note: with \storeordinal and \storeordinalnum, the -only bit that doesn't get expanded is \fmtord. So, for -example, \storeordinalnum{mylabel}{3} will be stored as -3\relax \fmtord{rd}. - -

- -\storeordinal{label}{counter}[gender] - -

- -\storeordinalstring{label}{counter}[gender] - -

- -\storeOrdinalstring{label}{counter}[gender] - -

- -\storeORDINALstring{label}{counter}[gender] - -

- -\storenumberstring{label}{counter}[gender] - -

- -\storeNumberstring{label}{counter}[gender] - -

- -\storeNUMBERstring{label}{counter}[gender] - -

- -\storeordinalnum{label}{number}[gender] - -

- -\storeordinalstring{label}{number}[gender] - -

- -\storeOrdinalstringnum{label}{number}[gender] - -

- -\storeORDINALstringnum{label}{number}[gender] - -

- -\storenumberstring{label}{number}[gender] - -

- -\storeNumberstring{label}{number}[gender] - -

- -\storeNUMBERstring{label}{number}[gender] - -

-The macro \binary{counter} will print the -value of counter as a binary number. -E.g. \binary{section} will produce: 11. The declaration -\padzeroes[n] -will ensure numbers are written to n digits, padding with -zeroes if necessary. E.g. \padzeroes[8]\binary{section} -will produce: 00000011. - The default value for n is 17. - -

-The macro \binarynum is like \binary -but takes an actual number rather than a counter as the -argument. For example: \binarynum{5} will -produce: 101. - -

-The macro \octal{counter} will print the -value of counter as an octal number. For example, if you -have a counter called, say mycounter, and you set the -value to 125, then \octal{mycounter} will produce: 177. - Again, the number will be padded with zeroes if necessary, -depending on whether \padzeroes has been used. - -

-The macro \octalnum is like \octal -but takes an actual number rather than a counter as the -argument. For example: \octalnum{125} will -produce: 177. - -

-The macro \hexadecimal{counter} will print -the value of counter as a hexadecimal number. Going back -to the previous example, \hexadecimal{mycounter} will - produce: 7d. Again, the number will be padded with zeroes if -necessary, depending on whether \padzeroes has been used. - - \Hexadecimal{counter} does the same thing, -but uses uppercase characters, e.g. - \Hexadecimal{mycounter} will produce: 7D. - -

-The macros \hexadecimalnum and -\Hexadecimalnum are like -\hexadecimal and \Hexadecimal -but take an actual number rather than a counter as the -argument. For example: \hexadecimalnum{125} will -produce: 7d, and \Hexadecimalnum{125} will -produce: 7D. - -

-The macro \decimal{counter} is similar to -\arabic but the number can be padded with zeroes - depending on whether \padzeroes has been used. -For example: \padzeroes[8]\decimal{section} will - produce: 00000005. - -

-The macro \decimalnum is like \decimal -but takes an actual number rather than a counter as the -argument. For example: \padzeroes[8]\decimalnum{5} will -produce: 00000005. - -

-The macro \aaalph{counter} will print the -value of counter as: a b ... z aa bb ... zz etc. - For example, \aaalpha{mycounter} will produce: uuuuu if -mycounter is set to 125. - - \AAAlph{counter} does the same thing, but -uses uppercase characters, e.g. - \AAAlph{mycounter} will produce: UUUUU. - -

-The macros \aaalphnum and -\AAAlphnum are like -\aaalph and \AAAlph -but take an actual number rather than a counter as the -argument. For example: \aaalphnum{125} will -produce: uuuuu, and \AAAlphnum{125} will -produce: UUUUU. - -

-The macro \abalph{counter} will print the -value of counter as: a b ... z aa ab ... az etc. - For example, \abalpha{mycounter} will produce: du if -mycounter is set to 125. - - \ABAlph{counter} does the same thing, but -uses uppercase characters, e.g. - \ABAlph{mycounter} will produce: DU. - -

-The macros \abalphnum and -\ABAlphnum are like -\abalph and \ABAlph -but take an actual number rather than a counter as the -argument. For example: \abalphnum{125} will -produce: du, and \ABAlphnum{125} will -produce: DU. - -

- -

-Package Options -

- -

-The following options can be passed to this package: - -

- - - - - - - -
raisemake ordinal st,nd,rd,th appear as superscript
levelmake ordinal st,nd,rd,th appear level with rest of -text
- -

-These can also be set using the command: - -

- -\fmtcountsetoptions{fmtord=type} - -

-where type is either level or -raise. - -

- -

-Multilingual Support -

- -

-Version 1.02 of the fmtcount package now has -limited multilingual support. The following languages are -implemented: English, Spanish, Portuguese, French, French (Swiss) -and French (Belgian). German support was added in version -1.12. - -

-The package checks to see if the -command \datelanguage is defined3, and will -load the code for those languages. The commands \ordinal, -\ordinalstring and \numberstring (and their -variants) will then be formatted in the currently -selected language. - -

-If the French language is selected, the French (France) version -will be used by default (e.g. soxiante-dix for 70). To -select the Swiss or Belgian variants (e.g. septente for 70) use: -\fmtcountsetoptions{french=dialect} -where dialect is either swiss or belgian. -You can also use this command to change the action of -\ordinal. -\fmtcountsetoptions{abbrv=true} to produce ordinals -of the form 2e or -\fmtcountsetoptions{abbrv=false} to produce ordinals -of the form 2eme (default). - -

-The french and abbrv settings only have an -effect if the French language has been defined. - -

-The male gender for all languages is used by default, however the -feminine or neuter forms can be obtained by passing f or -n as an optional argument to \ordinal, -\ordinalnum etc. For example: -\numberstring{section}[f]. Note that the optional argument -comes after the compulsory argument. If a gender is -not defined in a given language, the masculine version will -be used instead. - -

-Let me know if you find any spelling mistakes (has been known -to happen in English, let alone other languages I'm not so -familiar with.) If you want to add support for another language, -you will need to let me know how to form the numbers and ordinals -from 0 to 99999 in that language for each gender. - -

- -

-Configuration File fmtcount.cfg -

- -

-You can save your preferred default settings to a file called -fmtcount.cfg, and place it on the TeX path. These -settings will then be loaded by the fmtcount -package. - -

-Note that if you are using the datetime package, -the datetime.cfg configuration file will override -the fmtcount.cfg configuration file. -For example, if datetime.cfg has the line: -

-\renewcommand{\fmtord}[1]{\textsuperscript{\underline{#1}}}
-
-and if fmtcount.cfg has the line: -
-\fmtcountsetoptions{fmtord=level}
-
-then the former definition of \fmtord will take -precedence. - -

- -

-LaTeX2HTML style -

- -

-The LaTeX2HTML style file fmtcount.perl is provided. -The following limitations apply: - -

- -

- -

- -

-Acknowledgements -

- -

-I would like to thank my mother for the French and Portuguese -support and my Spanish dictionary for the Spanish support. -Thank you to K. H. Fricke for providing me with the German -translations. - -

- -

-Troubleshooting -

- -

-There is a FAQ available at: http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/. - -

- -

-Contact Details -

- Dr Nicola Talbot -
-School of Computing Sciences -
-University of East Anglia -
-Norwich. NR4 7TJ. -
-United Kingdom. -
http://theoval.cmp.uea.ac.uk/~nlct/ -

Footnotes

-
-
... -argument1
-
See all the various postings to -comp.text.tex about \MakeUppercase - -
-
... -1.12
-
Thanks to K. H. Fricke for supplying the information - -
-
... defined3
-
this -will be true if you have loaded babel - -
-
-

-
-Nicola L. C. Talbot. -School of Computing Sciences. -University of East Anglia. -Last Modified: 2007-06-14 -
- - diff --git a/Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl b/Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl new file mode 100644 index 00000000000..bc7d3b9fb4e --- /dev/null +++ b/Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl @@ -0,0 +1,2670 @@ +# File : fmtcount.perl +# Author : Nicola Talbot +# Date : 26 May 2007 +# Version : 1.05 +# Description : LaTeX2HTML implementation of fmtcount package + +package main; + +sub do_fmtcount_raise{ + local($tmp)=""; + + $tmp .= 'sub do_cmd_fmtord{'; + $tmp .= 'local($_) = @_;'; + $tmp .= 'local($suffix) = &missing_braces unless (s/$next_pair_pr_rx/$suffix=$2;\'\'/eo);'; + $tmp .= 'join("", "",$suffix,"",$_);'; + $tmp .='}'; + + eval($tmp); +} + +sub do_fmtcount_level{ + local($tmp)=""; + + $tmp .= 'sub do_cmd_fmtord{'; + $tmp .= 'local($_) = @_;'; + $tmp .= 'local($suffix) = &missing_braces unless (s/$next_pair_pr_rx/$suffix=$2;\'\'/eo);'; + $tmp .= 'join("", $suffix,$_);'; + $tmp .='}'; + + eval($tmp); +} + +if (not defined &do_cmd_fmtord) +{ + &do_fmtcount_raise(@_); +} + +$frenchdialect = 'france'; +$ordinalabbrv = 0; + +sub get_ordinal_suffix_english{ + local($num,$gender) = @_; + local($suffix); + + if ((($num % 10) == 1) && ($num%100 != 11)) + { + $suffix = 'st'; + } + elsif ((($num % 10) == 2) && ($num%100 != 12)) + { + $suffix = 'nd'; + } + elsif ((($num % 10) == 3) && ($num%100 != 13)) + { + $suffix = 'rd'; + } + else + { + $suffix = 'th'; + } + + $suffix; +} + +sub get_ordinal_suffix_french{ + local($num,$gender) = @_; + local($_); + + if ($ordinalabbrv > 0) + { + $_ = 'e'; + } + else + { + if ($num == 1) + { + $_ = ($gender eq 'f' ? 'ere' : 'er'); + } + else + { + $_ = 'eme'; + } + } +} + +sub get_ordinal_suffix_spanish{ + local($num,$gender) = @_; + + ($gender eq 'f' ? 'a' : 'o'); +} + +sub get_ordinal_suffix_portuges{ + local($num,$gender) = @_; + + ($gender eq 'f' ? 'a' : 'o'); +} + +sub get_ordinal_suffix_german{ + local($num,$gender) = @_; + + ''; +} + +sub get_ordinal_suffix_ngerman{ + local($num,$gender) = @_; + + ''; +} + +sub get_ordinal_suffix{ + local($num,$gender) = @_; + local($suffix,$suffixsub); + + $suffixsub = "get_ordinal_suffix_$default_language"; + + if (defined ($suffixsub)) + { + $suffix = &$suffixsub($num,$gender); + } + else + { + $suffix = &get_ordinal_suffix_english($num,$gender); + } + + $suffix; +} + +sub getordinal{ + local($num,$gender) = @_; + local($suffix) = &get_ordinal_suffix($num,$gender); + local($text)=''; + + if ($suffix eq '') + { + $text = $num; + } + else + { + local($br_id) = ++$global{'max_id'}; + $text = $num . "\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}"; + } + + $text; +} + +sub do_cmd_ordinalnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + my($gender)='m'; + local($suffix)=''; + + if (s/\[([mfn])\]//) + { + $gender = $1; + } + + $suffix = &get_ordinal_suffix($num,$gender); + + local($br_id) = ++$global{'max_id'}; + join('', $num, "\\fmtord${OP}$br_id${CP}$suffix${OP}$br_id${CP}", $_); +} + +sub do_cmd_FCordinal{ + &do_cmd_ordinal; +} + +sub do_cmd_ordinal{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $str eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{ORDINAL{', $ctr, '}}', $_[0]); + } + else + { + join('', &getordinal($val, $gender), $_[0]); + } +} + +sub do_cmd_storeordinal{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{ORDINAL{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = &getordinal($val, $gender); + } + + $_; +} + +sub do_cmd_storeordinalnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[([mfn])\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = &getordinal($val, $gender); + + $_; +} + +@unitthstring = ('zeroth', + 'first', + 'second', + 'third', + 'fourth', + 'fifth', + 'sixth', + 'seventh', + 'eighth', + 'ninth'); + +@tenthstring = ('', + 'tenth', + 'twentieth', + 'thirtieth', + 'fortieth', + 'fiftieth', + 'sixtieth', + 'seventieth', + 'eightieth', + 'ninetieth'); + +@teenthstring = ('tenth', + 'eleventh', + 'twelfth', + 'thirteenth', + 'fourteenth', + 'fifteenth', + 'sixteenth', + 'seventeenth', + 'eighteenth', + 'nineteenth'); + +@unitstring = ('zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine'); + +@teenstring = ('ten', + 'eleven', + 'twelve', + 'thirteen', + 'fourteen', + 'fifteen', + 'sixteen', + 'seventeen', + 'eighteen', + 'nineteen'); +@tenstring = ('', + 'ten', + 'twenty', + 'thirty', + 'forty', + 'fifty', + 'sixty', + 'seventy', + 'eighty', + 'ninety'); + +$hundredname = "hundred"; +$hundredthname = "hundredth"; +$thousandname = "thousand"; +$thousandthname = "thousandth"; + +sub get_numberstringenglish{ + local($num) = @_; + local($name)=""; + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + local($thousands) = &get_numberstringenglish($num/1000); + $name .= $thousands . " $thousandname"; + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = &get_numberstringenglish($num/100); + $name .= $hundreds . " $hundredname"; + $num = $num%100; + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " and "; } + + if ($num >= 20) + { + $name .= $tenstring[$num/10]; + + if ($num%10 > 0) { $name .= '-'; } + } + + if (($num >= 10) && ($num < 20)) + { + $name .= $teenstring[$num%10]; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $name .= $unitstring[$num%10]; + } + } + + $name; +} + +@unitthstringfrench = ('zeroi\`eme', + 'uni\`eme', + 'deuxi\`eme', + 'troisi\`eme', + 'quatri\`eme', + 'cinqui\`eme', + 'sixi\`eme', + 'septi\`eme', + 'huiti\`eme', + 'neuvi\`eme'); + +@tenthstringfrench = ('', + 'dixi\`eme', + 'vingti\`eme', + 'trentri\`eme', + 'quaranti\`eme', + 'cinquanti\`eme', + 'soixanti\`eme', + 'septenti\`eme', + 'huitanti\`eme', + 'nonenti\`eme'); + +@teenthstringfrench = ('dixi\`eme', + 'onzi\`eme', + 'douzi\`eme', + 'treizi\`eme', + 'quatorzi\`eme', + 'quinzi\`eme', + 'seizi\`eme', + 'dix-septi\`eme', + 'dix-huiti\`eme', + 'dix-neuvi\`eme'); + +@unitstringfrench = ('zero', + 'un', + 'deux', + 'trois', + 'quatre', + 'cinq', + 'six', + 'sept', + 'huit', + 'neuf'); + +@teenstringfrench = ('dix', + 'onze', + 'douze', + 'treize', + 'quatorze', + 'quinze', + 'seize', + 'dix-sept', + 'dix-huit', + 'dix-neuf'); + +@tenstringfrench = ('', + 'dix', + 'vingt', + 'trente', + 'quarante', + 'cinquante', + 'soixante', + 'septente', + 'huitante', + 'nonente'); + +$hundrednamefrench = "cent"; +$hundredthnamefrench = "centi\\`eme"; +$thousandnamefrench = "mille"; +$thousandthnamefrench = "mili\\`eme"; + +@unitthstringspanish = ('cero', + 'primero', + 'segundo', + 'tercero', + 'cuarto', + 'quinto', + 'sexto', + 's\\\'eptimo', + 'octavo', + 'noveno'); + +@tenthstringspanish = ('', + 'd\\\'ecimo', + 'vig\\\'esimo', + 'trig\\\'esimo', + 'cuadrag\\\'esimo', + 'quincuag\\\'esimo', + 'sexag\\\'esimo', + 'septuag\\\'esimo', + 'octog\\\'esimo', + 'nonag\\\'esimo'); + +@teenthstringspanish = ('d\\\'ecimo', + 'und\\\'ecimo', + 'duod\\\'ecimo', + 'decimotercero', + 'decimocuarto', + 'decimoquinto', + 'decimosexto', + 'decimos\\\'eptimo', + 'decimoctavo', + 'decimonoveno'); + +@hundredthstringspanish = ('', + 'cent\\\'esimo', + 'ducent\\\'esimo', + 'tricent\\\'esimo', + 'cuadringent\\\'esimo', + 'quingent\\\'esimo', + 'sexcent\\\'esimo', + 'septing\\\'esimo', + 'octingent\\\'esimo', + 'noningent\\\'esimo'); + +@unitstringspanish = ('cero', + 'uno', + 'dos', + 'tres', + 'cuatro', + 'cinco', + 'seis', + 'siete', + 'ocho', + 'nueve'); + +@teenstringspanish = ('diez', + 'once', + 'doce', + 'trece', + 'catorce', + 'quince', + 'diecis\\\'eis', + 'diecisiete', + 'dieciocho', + 'diecinueve'); + +@twentystringspanish = ('viente', + 'vientiuno', + 'vientid\\\'os', + 'vientitr\\\'es', + 'vienticuatro', + 'vienticinco', + 'vientis\\\'eis', + 'vientisiete', + 'vientiocho', + 'vientinueve'); + +@tenstringspanish = ('', + 'diez', + 'viente', + 'treinta', + 'cuarenta', + 'cincuenta', + 'sesenta', + 'setenta', + 'ochenta', + 'noventa'); + +@hundredstringspanish = ('', + 'ciento', + 'doscientos', + 'trescientos', + 'cuatrocientos', + 'quinientos', + 'seiscientos', + 'setecientos', + 'ochocientos', + 'novecientos'); + +$hundrednamespanish = "cien"; +$hundredthnamespanish = "centi\\`eme"; +$thousandnamespanish = "mil"; +$thousandthnamespanish = "mil\\'esimo"; + +@unitthstringportuges = ('zero', + 'primeiro', + 'segundo', + 'terceiro', + 'quatro', + 'quinto', + 'sexto', + 's\\\'etimo', + 'oitavo', + 'nono'); + +@tenthstringportuges = ('', + 'd\\\'ecimo', + 'vig\\\'esimo', + 'trig\\\'esimo', + 'quadrag\\\'esimo', + 'q\"uinquag\\\'esimo', + 'sexag\\\'esimo', + 'setuag\\\'esimo', + 'octog\\\'esimo', + 'nonag\\\'esimo'); + +@hundredthstringportuges = ('', + 'cent\\\'esimo', + 'ducent\\\'esimo', + 'trecent\\\'esimo', + 'quadringent\\\'esimo', + 'q\"uingent\\\'esimo', + 'seiscent\\\'esimo', + 'setingent\\\'esimo', + 'octingent\\\'esimo', + 'nongent\\\'esimo'); + +@unitstringportuges = ('zero', + 'um', + 'dois', + 'tr\^es', + 'quatro', + 'cinco', + 'seis', + 'sete', + 'oito', + 'nove'); + +@teenstringportuges = ('dez', + 'onze', + 'doze', + 'treze', + 'quatorze', + 'quinze', + 'dezesseis', + 'dezessete', + 'dezoito', + 'dezenove'); + +@tenstringportuges = ('', + 'dez', + 'vinte', + 'trinta', + 'quaranta', + 'cinq\"uenta', + 'sessenta', + 'setenta', + 'oitenta', + 'noventa'); + +@hundredstringportuges = ('', + 'cento', + 'duzentos', + 'trezentos', + 'quatrocentos', + 'quinhentos', + 'seiscentos', + 'setecentos', + 'oitocentos', + 'novecentos'); + +$hundrednameportuges = "cem"; +$thousandnameportuges = "mil"; +$thousandthnameportuges = "mil\\'esimo"; + +sub get_numberstringfrench{ + local($num,$gender) = @_; + local($name)=""; + + if ($gender eq 'f') + { + $unitstringfrench[1] = 'une'; + } + else + { + $unitstringfrench[1] = 'un'; + } + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + local($thousands) = ''; + + if ($num >= 2000) + { + $thousands = &get_numberstringfrench($num/1000,$gender).' '; + } + + $name .= $thousands . $thousandnamefrench; + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = ''; + + if ($num >= 200) + { + $hundreds = &get_numberstringfrench($num/100,$gender).' '; + } + + $name .= $hundreds . $hundrednamefrench; + $num = $num%100; + + if (($_[0]%100 == 0) && ($_[0]/100 > 1)) + { + $name .= 's'; + } + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " "; } + + if ($num >= 20) + { + if ($frenchdialect eq 'france' and $num >= 70) + { + if ($num < 80) + { + $name .= $tenstringfrench[6]; + + if ($num%10 == 1) + { + $name .= ' et '; + } + else + { + $name .= '-'; + } + + $num = 10+($num%10); + } + else + { + $name .= 'quatre-vingt' . ($num==80?'s':'-'); + + if ($num >= 90) + { + $num = 10+($num%10); + } + } + } + elsif ($frenchdialect eq 'belgian' + && ($num >= 80) && ($num < 90)) + { + $name .= 'quatre-vingt' . ($num==80?'s':'-'); + } + else + { + $name .= $tenstringfrench[$num/10]; + + if ($num%10 == 1) { $name .= ' et ';} + elsif ($num%10 > 0) { $name .= '-'; } + } + } + + if (($num >= 10) && ($num < 20)) + { + $name .= $teenstringfrench[$num%10]; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $name .= $unitstringfrench[$num%10]; + } + } + + $name; +} + +sub get_numberstringspanish{ + local($num,$gender) = @_; + local($name)=""; + + if ($gender eq 'f') + { + $unitstringspanish[1] = 'una'; + } + else + { + $unitstringspanish[1] = 'uno'; + } + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + local($thousands) = ''; + + if ($num >= 2000) + { + $thousands = &get_numberstringspanish($num/1000,$gender).' '; + } + + $name .= $thousands . $thousandnamespanish; + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = ''; + + if ($num > 100) + { + $hundreds = $hundredstringspanish[$num/100]; + } + else + { + $hundreds = 'cien'; + } + + $name .= $hundreds; + $num = $num%100; + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " y "; } + + if ($num >= 30) + { + $name .= $tenstringspanish[$num/10]; + + if ($num%10 > 0) { $name .= ' y '; } + } + + if (($num >=20) && ($num < 30)) + { + $name .= $twentystringspanish[$num%10]; + } + elsif (($num >= 10) && ($num < 20)) + { + $name .= $teenstringspanish[$num%10]; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $name .= $unitstringspanish[$num%10]; + } + } + + $name; +} + +sub get_numberstringportuges{ + local($num,$gender) = @_; + local($name)=""; + + if ($gender eq 'f') + { + $unitstringportuges[0] = 'zera'; + $unitstringportuges[1] = 'uma'; + $unitstringportuges[2] = 'duas'; + } + else + { + $unitstringportuges[0] = 'zero'; + $unitstringportuges[1] = 'um'; + $unitstringportuges[2] = 'dois'; + } + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + local($thousands) = ''; + + if ($num >= 2000) + { + $thousands = &get_numberstringportuges($num/1000,$gender).' '; + } + + $name .= $thousands . $thousandnameportuges; + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = ''; + + if ($num > 100) + { + $hundreds = $hundredstringportuges[$num/100]; + + if ($gender eq 'f' and $num >= 200) + { + $hundreds =~s/o(s?)$/a\1/; + } + } + else + { + $hundreds = $hundrednameportuges; + } + + $name .= $hundreds; + $num = $num%100; + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " e "; } + + if ($num >= 20) + { + $name .= $tenstringportuges[$num/10]; + + if ($num%10 == 1) { $name .= ' e ';} + elsif ($num%10 > 0) { $name .= ' '; } + } + + if (($num >= 10) && ($num < 20)) + { + $name .= $teenstringportuges[$num%10]; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $name .= $unitstringportuges[$num%10]; + } + } + + $name; +} + +@unitthstringMgerman = ('nullter', + 'erster', + 'zweiter', + 'dritter', + 'vierter', + 'f\\"unter', + 'sechster', + 'siebter', + 'achter', + 'neunter'); + +@tenthstringMgerman = ('', + 'zehnter', + 'zwanzigster', + 'drei\\ss igster', + 'vierzigster', + 'f\\"unfzigster', + 'sechzigster', + 'siebzigster', + 'achtzigster', + 'neunzigster'); + +@teenthstringMgerman = ('zehnter', + 'elfter', + 'zw\\"olfter', + 'dreizehnter', + 'vierzehnter', + 'f\\"unfzehnter', + 'sechzehnter', + 'siebzehnter', + 'achtzehnter', + 'neunzehnter'); + +@unitthstringFgerman = ('nullte', + 'erste', + 'zweite', + 'dritte', + 'vierte', + 'f\\"unfte', + 'sechste', + 'siebte', + 'achte', + 'neunte'); + +@tenthstringFgerman = ('', + 'zehnte', + 'zwanzigste', + 'drei\\ss igste', + 'vierzigste', + 'f\\"unfzigste', + 'sechzigste', + 'siebzigste', + 'achtzigste', + 'neunzigste'); + +@teenthstringFgerman = ('zehnte', + 'elfte', + 'zw\\"olfte', + 'dreizehnte', + 'vierzehnte', + 'f\\"unfzehnte', + 'sechzehnte', + 'siebzehnte', + 'achtzehnte', + 'neunzehnte'); + +@unitthstringNgerman = ('nulltes', + 'erstes', + 'zweites', + 'drittes', + 'viertes', + 'f\\"unte', + 'sechstes', + 'siebtes', + 'achtes', + 'neuntes'); + +@tenthstringNgerman = ('', + 'zehntes', + 'zwanzigstes', + 'drei\\ss igstes', + 'vierzigstes', + 'f\\"unfzigstes', + 'sechzigstes', + 'siebzigstes', + 'achtzigstes', + 'neunzigstes'); + +@teenthstringNgerman = ('zehntes', + 'elftes', + 'zw\\"olftes', + 'dreizehntes', + 'vierzehntes', + 'f\\"unfzehntes', + 'sechzehntes', + 'siebzehntes', + 'achtzehntes', + 'neunzehntes'); + +@unitstringgerman = ('null', + 'ein', # eins dealt with separately (this is for prefixes) + 'zwei', + 'drei', + 'vier', + 'f\\"unf', + 'sechs', + 'sieben', + 'acht', + 'neun'); + +@teenstringgerman = ('zehn', + 'elf', + 'zw\\"olf', + 'dreizehn', + 'vierzehn', + 'f\\"unfzehn', + 'sechzehn', + 'siebzehn', + 'achtzehn', + 'neunzehn'); + +@tenstringgerman = ('', + 'zehn', + 'zwanzig', + 'drei\\ss ig', + 'vierzig', + 'f\\"unfzig', + 'sechzig', + 'siebzig', + 'achtzig', + 'neunzig'); + +sub do_cmd_einhundert{ + local($_) = @_; + + "einhundert$_"; +} + +sub do_cmd_eintausend{ + local($_) = @_; + + "eintausend$_"; +} + +sub get_numberunderhundredgerman{ + local($num)=@_; + local($name)=''; + + if ($num == 1) + { + $name = 'eins'; + } + elsif ($num < 10) + { + $name = $unitstringgerman[$num]; + } + elsif ($num%10 == 0) + { + $name = $tenstringgerman[$num/10]; + } + else + { + $name = join('und', $unitstringgerman[$num%10], + $tenstringgerman[$num/10]); + } + + $name; +} + +sub get_numberstringgerman{ + local($orgnum,$gender) = @_; + local($name)=""; + + local($num) = $orgnum; + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000 and $num < 2000) + { + $name = &translate_commands("\\eintausend "); + } + elsif ($num >= 2000) + { + $name = &get_numberunderhundredgerman($num/1000) + . "tausend"; + } + + $num = $orgnum%1000; + + if ($num >= 100 and $num < 200) + { + if ($orgnum > 1000) + { + $name .= "einhundert"; + } + else + { + $name = &translate_commands("\\einhundert "); + } + } + elsif ($num >= 200) + { + $name .= $unitstringgerman[$num/100]."hundert"; + } + + $num = $num%100; + + if ($orgnum == 0) + { + $name = 'null'; + } + elsif ($num > 0) + { + $name .= &get_numberunderhundredgerman($num); + } + } + + $name; +} + +sub get_numberstring{ + local($val,$gender) = @_; + + if ($default_language eq 'french') + { + &get_numberstringfrench($val,$gender); + } + elsif ($default_language eq 'spanish') + { + &get_numberstringspanish($val,$gender); + } + elsif ($default_language eq 'portuges') + { + &get_numberstringportuges($val,$gender); + } + elsif ($default_language eq 'german' + or $default_language eq 'ngerman') + { + &get_numberstringgerman($val,$gender); + } + else + { + &get_numberstringenglish($val); + } +} + +sub do_cmd_numberstringnum{ + local($_) = @_; + local($num,$gender); + $num = &missing_braces unless + s/$next_pair_pr_rx/$num=$2;''/eo; + + if (s/\[(m|f|n)\]//) + { + $gender = $1; + } + else + { + $gender = 'm'; + } + + join('', &get_numberstring($num,$gender), $_); +} + +sub do_cmd_numberstring{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{NUMBERSTRING{', $ctr, '}}', $_[0]); + } + else + { + join('', &get_numberstring($val, $gender), $_[0]); + } +} + +sub do_cmd_storenumberstring{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{NUMBERSTRING{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = join('', &get_numberstring($val, $gender)); + } + + $_; +} + +sub do_cmd_storenumberstringnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[([mfn])\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = join('', &get_numberstring($val, $gender)); + + $_; +} + +sub get_Numberstring{ + local($val,$gender) = @_; + local($string) = &get_numberstring($val,$gender); + + if ($default_language=~m/german/) + { + $string =~ s/([a-z])([^\s\-]+)/\u\1\2/; + } + else + { + $string =~ s/([a-z])([^\s\-]+)/\u\1\2/g; + + if ($default_language eq 'french') + { + $string =~ s/ Et / et /g; + } + elsif ($default_language eq 'spanish') + { + $string =~ s/ Y / y /g; + } + elsif ($default_language eq 'portuges') + { + $string =~ s/ E / e /g; + } + else + { + $string =~ s/ And / and /g; + } + } + + $string; +} + +sub do_cmd_Numberstringnum{ + local($_) = @_; + local($num,$gender); + $num = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + if (s/\[(m|f|n)\]//) + { + $gender = $1; + } + else + { + $gender = 'm'; + } + + join('', &get_Numberstring($num,$gender), $_); +} + +sub do_cmd_Numberstring{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{NNUMBERSTRING{', $ctr, '}}', $_[0]); + } + else + { + join('', &get_Numberstring($val, $gender), $_[0]); + } +} + +sub do_cmd_storeNumberstring{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[([mfn])\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{NNUMBERSTRING{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = join('', &get_Numberstring($val, $gender)); + } + + $_; +} + +sub do_cmd_storeNumberstringnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[([mfn])\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = join('', &get_Numberstring($val, $gender)); + + $_; +} + +sub do_cmd_NUMBERstringnum{ + local($_) = @_; + local($num,$gender); + $num = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + if (s/\[(m|f|n)\]//) + { + $gender = $1; + } + else + { + $gender = 'm'; + } + + join('', uc(&get_numberstring($num,$gender)), $_); +} + +sub do_cmd_NUMBERstring{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{CAPNUMBERSTRING{', $ctr, '}}', $_); + } + else + { + join('', uc(&get_numberstring($val, $gender)), $_); + } +} + +sub do_cmd_storeNUMBERstring{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{CAPNUMBERSTRING{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = uc(&get_numberstring($val, $gender)); + } + + $_; +} + +sub do_cmd_storeNUMBERstringnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[([mfn])\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = uc(&get_numberstring($val, $gender)); + + $_; +} + +sub get_ordinalstringenglish{ + local($num) = @_; + local($name)=""; + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + local($thousands) = &get_numberstring($num/1000); + $name .= $thousands; + + if ($num%1000 > 0) + { + $name .= " $thousandname"; + } + else + { + $name .= " $thousandthname"; + } + + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = &get_numberstring($num/100); + $name .= $hundreds; + + if ($num%100 > 0) + { + $name .= " $hundredname"; + } + else + { + $name .= " $hundredthname"; + } + + $num = $num%100; + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " and "; } + + if ($num >= 20) + { + if ($num%10 > 0) + { + $name .= $tenstring[$num/10] . '-'; + } + else + { + $name .= $tenthstring[$num/10]; + } + } + + if (($num >= 10) && ($num < 20)) + { + $name .= $teenthstring[$num%10]; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $name .= $unitthstring[$num%10]; + } + } + + $name; +} + +sub get_ordinalstringfrench{ + local($num,$gender) = @_; + local($name)=""; + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + local($thousands) = ''; + + if ($num >= 2000) + { + $thousands = &get_numberstringfrench($num/1000,$gender).' '; + } + + $num = $num%1000; + + if ($num > 0) + { + $name .= $thousands . $thousandnamefrench; + } + else + { + $name .= $thousands . $thousandthnamefrench; + } + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = ''; + + if ($num >= 200) + { + $hundreds = &get_numberstringfrench($num/100,$gender).' '; + } + + $num = $num%100; + + if ($num > 0) + { + $name .= $hundreds . $hundrednamefrench; + } + else + { + $name .= $hundreds . $hundredthnamefrench; + } + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " "; } + + if ($num >= 20) + { + if ($frenchdialect eq 'france' and $num >= 70) + { + if ($num < 80) + { + if ($num%10 > 0) + { + $name .= $tenstringfrench[6]; + } + else + { + $name .= $tenthstringfrench[6]; + } + + if ($num%10 == 1) + { + $name .= ' et '; + } + else + { + $name .= '-'; + } + + $num = 10+($num%10); + } + else + { + $name .= 'quatre-vingt' . ($num==80?'i\`eme':'-'); + + if ($num >= 90) + { + $num = 10+($num%10); + } + } + } + elsif ($frenchdialect eq 'belgian' and $num >= 80) + { + $name .= 'quatre-vingt' . ($num==80?'i\`eme':'-'); + + if ($num >= 90) + { + $num = 10+($num%10); + } + } + else + { + if ($num%10 > 0) + { + $name .= $tenstringfrench[$num/10]; + } + else + { + $name .= $tenthstringfrench[$num/10]; + } + + if ($num%10 == 1) { $name .= ' et ';} + elsif ($num%10 > 0) { $name .= '-'; } + } + } + + if (($num >= 10) && ($num < 20)) + { + $name .= $teenthstringfrench[$num%10]; + } + elsif ($_[0] == 1) + { + $name = 'premi\`ere'; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $name .= $unitthstringfrench[$num%10]; + } + } + + $name; +} + +sub get_ordinalstringspanish{ + local($num,$gender) = @_; + local($name)=""; + local($str); + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + if ($num >= 2000) + { + local($thousands) = &get_ordinalstringspanish($num/1000); + + if ($gender eq 'f') + { + $thousands =~s/o(s?)$/a\1/; + } + + $name .= $thousands. " "; + } + else + { + $name = ""; + } + + $name .= "$thousandthnamespanish"; + + if ($gender eq 'f') + { + $name =~s/o$/a/; + } + + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = $hundredthstringspanish[$num/100]; + + if ($gender eq 'f') + { + $hundreds =~s/o$/a/; + } + + $name .= $hundreds; + + $num = $num%100; + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " "; } + + local($lastbit)=""; + + if ($num >= 20) + { + $lastbit = $tenthstringspanish[$num/10]; + + if ($num%10 > 0) + { + $lastbit .= ' '; + } + + if ($gender eq 'f') + { + $lastbit =~s/o([ s]*)$/a\1/; + } + + $name .= $lastbit; + + $lastbit = ""; + } + + if (($num >= 10) && ($num < 20)) + { + $lastbit = $teenthstringspanish[$num%10]; + } + elsif (($num%10 > 0) || ($_[0] == 0)) + { + $lastbit = $unitthstringspanish[$num%10]; + } + + if ($gender eq 'f') + { + $lastbit =~s/o([ s]*)$/a\1/; + } + + $name .= $lastbit; + } + + $name; +} + +sub get_ordinalstringportuges{ + local($num,$gender) = @_; + local($name)=""; + local($str); + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000) + { + if ($num >= 2000) + { + local($thousands) = &get_ordinalstringportuges($num/1000); + + if ($gender eq 'f') + { + $thousands =~s/o(s?)$/a\1/; + } + + $name .= $thousands. " "; + } + else + { + $name = ""; + } + + $name .= "$thousandthnameportuges"; + + if ($gender eq 'f') + { + $name =~s/o$/a/; + } + + $num = $num%1000; + } + + if ($num >= 100) + { + if ($_[0] >= 1000) { $name .= " "; } + + local($hundreds) = $hundredthstringportuges[$num/100]; + + if ($gender eq 'f') + { + $hundreds =~s/o$/a/; + } + + $name .= $hundreds; + + $num = $num%100; + } + + if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= "-"; } + + local($lastbit)=""; + + if ($num >= 10) + { + $lastbit = $tenthstringportuges[$num/10]; + + if ($num%10 > 0) + { + $lastbit .= '-'; + } + + if ($gender eq 'f') + { + $lastbit =~s/o([ s]*)$/a\1/; + } + + $name .= $lastbit; + + $lastbit = ""; + } + + if (($num%10 > 0) || ($_[0] == 0)) + { + $lastbit = $unitthstringportuges[$num%10]; + } + + if ($gender eq 'f') + { + $lastbit =~s/o([ s]*)$/a\1/; + } + + $name .= $lastbit; + } + + $name; +} + +sub get_numberunderhundredthgerman{ + local($num,$gender)=@_; + local($name)=''; + + if ($num < 10) + { + if ($gender eq 'F') + { + $name = $unitthstringFgerman[$num]; + } + elsif ($gender eq 'N') + { + $name = $unitthstringNgerman[$num]; + } + else + { + $name = $unitthstringMgerman[$num]; + } + } + elsif ($num%10 == 0) + { + if ($gender eq 'F') + { + $name = $tenthstringFgerman[$num/10]; + } + elsif ($gender eq 'N') + { + $name = $tenthstringNgerman[$num/10]; + } + else + { + $name = $tenthstringMgerman[$num/10]; + } + } + else + { + local($tenth); + if ($gender eq 'F') + { + $tenth = $tenthstringFgerman[$num/10]; + } + elsif ($gender eq 'N') + { + $tenth = $tenthstringNgerman[$num/10]; + } + else + { + $tenth = $tenthstringMgerman[$num/10]; + } + + $name = join('und', $unitstringgerman[$num%10], $tenth); + } + + $name; +} + +sub get_ordinalstringgerman{ + local($orgnum,$gender) = @_; + local($name)=""; + local($suffix)=''; + + $gender = uc($gender); + + if ($gender eq 'F') + { + $suffix = 'ste'; + } + elsif ($gender eq 'N') + { + $suffix = 'stes'; + } + else + { + $suffix = 'ster'; + $gender = 'M'; + } + + local($num) = $orgnum; + + unless (($num >= 1000000) || ($num < 0)) + { + if ($num >= 1000 and $num < 2000) + { + $name = &translate_commands("\\eintausend "); + } + elsif ($num >= 2000) + { + $name = &get_numberunderhundredgerman($num/1000) + . "tausend"; + } + + $num = $orgnum%1000; + + # is that it or is there more? + if ($orgnum >= 1000 and $num == 0) + { + $name .= $suffix; + return $name; + } + + if ($num >= 100 and $num < 200) + { + if ($orgnum > 1000) + { + $name .= "einhundert"; + } + else + { + $name = &translate_commands("\\einhundert "); + } + } + elsif ($num >= 200) + { + $name .= $unitstringgerman[$num/100]."hundert"; + } + + $num = $num%100; + + # is that it or is there more? + if ($orgnum >= 100 and $num == 0) + { + $name .= $suffix; + return $name; + } + + if ($orgnum == 0) + { + if ($gender eq 'F') + { + $name = $unitthstringFgerman[0]; + } + elsif ($gender eq 'N') + { + $name = $unitthstringNgerman[0]; + } + else + { + $name = $unitthstringMgerman[0]; + } + } + elsif ($num > 0) + { + $name .= &get_numberunderhundredthgerman($num,$gender); + } + } + + $name; +} + +sub get_ordinalstring{ + local($val,$gender) = @_; + + if ($default_language eq 'french') + { + &get_ordinalstringfrench($val,$gender); + } + elsif ($default_language eq 'spanish') + { + &get_ordinalstringspanish($val,$gender); + } + elsif ($default_language eq 'portuges') + { + &get_ordinalstringportuges($val,$gender); + } + elsif ($default_language eq 'german' + or $default_language eq 'ngerman') + { + &get_ordinalstringgerman($val,$gender); + } + else + { + &get_ordinalstringenglish($val); + } +} + +sub do_cmd_ordinalstringnum{ + local($_) = @_; + local($num,$gender); + $num = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + if (s/\[(m|f|n)\]//) + { + $gender = $1; + } + else + { + $gender = 'm'; + } + + join('', &get_ordinalstring($num,$gender), $_); +} + +sub do_cmd_ordinalstring{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{ORDINALSTRING{', $ctr, '}}', $_); + } + else + { + join('', &get_ordinalstring($val, $gender), $_); + } +} + + %fmtcntvar = (); + +sub do_cmd_FMCuse{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $fmtcntvar{$key}.$_; +} + +sub do_cmd_storeordinalstring{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{ORDINALSTRING{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = join('', &get_ordinalstring($val, $gender)); + } + + $_; +} + +sub do_cmd_storeordinalstringnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = join('', &get_ordinalstring($val, $gender)); + + $_; +} + +sub get_Ordinalstring{ + local($val,$gender) = @_; + local($string) = &get_ordinalstring($val,$gender); + + if ($default_language=~m/german/) + { + $string =~ s/\b([a-z])([^\s\-]+)/\u\1\2/; + } + else + { + $string =~ s/\b([a-z])([^\s\-]+)/\u\1\2/g; + + if ($default_language eq 'french') + { + $string =~ s/ Et / et /g; + } + else + { + $string =~ s/ And / and /g; + } + } + + $string; +} + +sub do_cmd_Ordinalstringnum{ + local($_) = @_; + local($num,$gender); + $num = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + if (s/\[(m|f|n)\]//) + { + $gender = $1; + } + else + { + $gender = 'm'; + } + + join('', &get_Ordinalstring($num,$gender), $_); +} + +sub do_cmd_Ordinalstring{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{OORDINALSTRING{', $ctr, '}}', $_[0]); + } + else + { + join('', &get_Ordinalstring($val, $gender), $_[0]); + } +} + +sub do_cmd_storeOrdinalstring{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{OORDINALSTRING{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = join('', &get_Ordinalstring($val, $gender)); + } + + $_; +} + +sub do_cmd_storeOrdinalstringnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = join('', &get_Ordinalstring($val, $gender)); + + $_; +} + +sub do_cmd_ORDINALstringnum{ + local($_) = @_; + local($num,$gender); + $num = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + if (s/\[(m|f|n)\]//) + { + $gender = $1; + } + else + { + $gender = 'm'; + } + + join('', uc(&get_ordinalstring($num,$gender)), $_); +} + +sub do_cmd_ORDINALstring{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + my($gender)='m'; + + $_[0] =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_[0]=~s/\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + join('', '{CAPORDINALSTRING{', $ctr, '}}', $_); + } + else + { + join('', uc(&get_ordinalstring($val, $gender)), $_); + } +} + +sub do_cmd_storeORDINALstring{ + local($_) = @_; + local($key); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + local($ctr, $val, $id, $_) = &read_counter_value($_); + my($gender)='m'; + + $_ =~ s/${OP}$id${CP}$ctr${OP}$id${CP}//; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + if ($ctr eq 'DAY' or $ctr eq 'MONTH' or $ctr eq 'YEAR') + { + # this is a cludge to make it work with newdateformat + $fmtcntvar{$key} = join('', '{CAPORDINALSTRING{', $ctr, '}}'); + } + else + { + $fmtcntvar{$key} = uc(&get_ordinalstring($val, $gender)); + } + + $_; +} + +sub do_cmd_storeORDINALstringnum{ + local($_) = @_; + local($key, $val); + + $key = &missing_braces + unless ((s/$next_pair_pr_rx//o)&&($key=$2)); + + $val = &missing_braces + unless (s/$next_pair_pr_rx/$val=$2;''/eo); + + my($gender)='m'; + + if ($_ =~s/\s*\[(.)\]//) + { + $gender = $1; + } + + $fmtcntvar{$key} = uc(&get_ordinalstring($val, $gender)); + + $_; +} + +sub do_cmd_fmtcountsetoptions{ + local($_) = @_; + local($options) = &missing_braces unless ($_[0]=~(s/$next_pair_pr_rx//o)&&($options=$2)); + + if ($options =~ m/french=?(\w*)(,|$)/) + { + if ($1 eq 'france' or $1 eq 'swiss' or $1 eq 'belgian') + { + $frenchdialect = $1; + + print "Using French dialect: $1" if ($VERBOSITY > 0) ; + } + elsif ($1 eq '') + { + $frenchdialect = 'france'; + + print "Using French dialect: france" if ($VERBOSITY > 0); + } + else + { + &write_warnings("unknown french dialect '$1'"); + } + } + + if ($options =~ m/abbrv=?(\w*)(,|$)/) + { + if ($1 eq 'true' or $1 eq '') + { + $ordinalabbrv = 1; + + print "Setting abbrv=true" if ($VERBOSITY > 0); + } + elsif ($1 eq 'false') + { + $ordinalabbrv = 0; + + print "Setting abbrv=false" if ($VERBOSITY > 0); + } + else + { + &write_warnings("fmtcountsetoptions key abbrv: unknown value '$1'."); + } + } + + if ($options =~ m/fmtord=(\w*)(,|$)/) + { + if ($1 eq 'raise') + { + &do_fmtcount_raise(); + + print "Using raised ordinals" if ($VERBOSITY > 0); + } + elsif ($1 eq 'level') + { + &do_fmtcount_level(); + + print "Using level ordinals" if ($VERBOSITY > 0); + } + elsif ($1 eq 'user') + { + # do nothing + + print "Using user defined fmtord" if ($VERBOSITY > 0); + } + else + { + &write_warnings("unknown fmtcount option fmtord=$1"); + } + } + + $_[0]; +} + +$padzeroes = 0; + +sub do_cmd_padzeroes{ + local($_) = @_; + local($val,$pat) = &get_next_optional_argument; + + if ($val eq '') + { + $padzeroes = 17; + } + else + { + $padzeroes = $val; + } + + $_; +} + +sub get_binary{ + local($num) = @_; + local($val) = ""; + + for (my $i=17; $i>=0; $i--) + { + if (($i < $padzeroes) || ($num & (1 << $i)) || !($val eq "")) + { + $val .= ($num & (1 << $i) ? 1 : 0); + } + } + + $val; +} + +sub do_cmd_binary{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_binary($val), $_); +} + +sub do_cmd_binarynum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', &get_binary($num), $_); +} + +sub get_decimal{ + local($num) = @_; + + sprintf "%0${padzeroes}d", $num; +} + +sub do_cmd_decimal{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_decimal($val), $_); +} + +sub do_cmd_decimalnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', &get_decimal($num), $_); +} + +sub get_hexadecimal{ + local($num) = @_; + + sprintf "%0${padzeroes}lx", $num; +} + +sub do_cmd_hexadecimal{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_hexadecimal($val), $_); +} + +sub do_cmd_hexadecimalnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', &get_hexadecimal($num), $_); +} + +sub get_Hexadecimal{ + local($num) = @_; + + sprintf "%0${padzeroes}lX", $num; +} + +sub do_cmd_Hexadecimal{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_Hexadecimal($val), $_); +} + +sub do_cmd_Hexadecimalnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', &get_Hexadecimal($num), $_); +} + +sub get_octal{ + local($num) = @_; + + sprintf "%0${padzeroes}lo", $num; +} + +sub do_cmd_octal{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_octal($val), $_); +} + +sub do_cmd_octalnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', &get_octal($num), $_); +} + +sub get_aaalph{ + local($num) = @_; + local($rep) = int($num/26) + 1; + local($c) = chr(ord('a')-1+$num%26); + + local($_) = $c x $rep; +} + +sub do_cmd_aaalph{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_aaalph($val), $_); +} + +sub get_AAAlph{ + local($num) = @_; + local($rep) = int($num/26) + 1; + local($c) = chr(ord('A')-1+$num%26); + + local($_) = $c x $rep; +} + +sub do_cmd_AAAlph{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', &get_AAAlph($val), $_); +} + +sub do_cmd_aaalphnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', (sprintf "%${padzeroes}s", &get_aaalph($num)), $_); +} + +sub do_cmd_AAAlphnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', uc(sprintf "%${padzeroes}s", &get_aaalph($num)), $_); +} + +sub get_abalph{ + local($num) = @_; + local($str); + + if ($num == 0) + { + $str = ''; + } + elsif ($num > 0 && $num <= 26) + { + $str = chr(ord('a')-1+$num); + } + else + { + $str = &get_abalph(int($num/26)) . chr(ord('a')-1+($num%26)); + } + + $str; +} + +sub do_cmd_abalph{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', (sprintf "%${padzeroes}s", &get_abalph($val)), $_); +} + +sub do_cmd_abalphnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', (sprintf "%${padzeroes}s", &get_abalph($num)), $_); +} + +sub do_cmd_ABAlph{ + local($ctr, $val, $id, $_) = &read_counter_value($_[0]); + + join('', uc(sprintf "%${padzeroes}s", &get_abalph($val)), $_); +} + +sub do_cmd_ABAlphnum{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + join('', uc(sprintf "%${padzeroes}s", &get_abalph($num)), $_); +} + +sub get_twodigit{ + local($num) = @_; + + sprintf "%02d", $num; +} + +sub do_cmd_twodigit{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + # this is a cludge + if ($num eq "THEDAY" or $num eq "THEYEAR" or $num eq "THEMONTH") + { + join('', 'TWODIGIT{', $num, '}', $_); + } + else + { + join('', &get_twodigit($num), $_); + } +} + +# this was put here to help with the definition of \datelatin + +sub do_cmd_romannumeral{ + local($_) = @_; + local($num) = &missing_braces + unless (s/$next_pair_pr_rx/$num=$2;''/eo); + + # this is a cludge + if ($num eq "THEDAY" or $num eq "THEYEAR" or $num eq "THEMONTH") + { + join('', 'ROMANNUMERAL{', $num, '}', $_); + } + else + { + join('', &froman($num), $_); + } +} + +# load configuration file if it exists +# Note: The configuration file should be loaded before +# the package options are executed. + +# why doesn't this work? If I call this subroutine it +# causes an infinite loop. + +sub load_fmtcount_cfg{ + local($file,$found); + + $file = &fulltexpath('fmtcount.cfg'); + + $found = (-f $file); + + if (!$found) + { + foreach $texpath (split /$envkey/, $TEXINPUTS) + { + $file = "$texpath${dd}fmtcount.cfg"; + + last if ($found = (-f $file)); + } + } + + if ($found) + { + print "\nusing configuration file $file\n"; + + &slurp_input($file); + &pre_process; + &substitute_meta_cmds if (%new_command || %new_environment); + &wrap_shorthand_environments; + $_ = &translate_commands(&translate_environments($_)); + + print "\n processed size: ".length($_)."\n" if ($VERBOSITY>1) + } + else + { + print "\nNo configuation file fmtcount.cfg found\n" if ($VERBOSITY>1) + } +} + +1; diff --git a/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl b/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl index a0460f733b1..bc7d3b9fb4e 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl +++ b/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl @@ -191,7 +191,7 @@ sub do_cmd_storeordinal{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -221,10 +221,10 @@ sub do_cmd_storeordinalnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -239,37 +239,37 @@ sub do_cmd_storeordinalnum{ $_; } -@unitthstring = ('zeroth', - 'first', - 'second', - 'third', - 'fourth', - 'fifth', - 'sixth', - 'seventh', - 'eighth', +@unitthstring = ('zeroth', + 'first', + 'second', + 'third', + 'fourth', + 'fifth', + 'sixth', + 'seventh', + 'eighth', 'ninth'); -@tenthstring = ('', - 'tenth', - 'twentieth', - 'thirtieth', - 'fortieth', - 'fiftieth', - 'sixtieth', - 'seventieth', - 'eightieth', +@tenthstring = ('', + 'tenth', + 'twentieth', + 'thirtieth', + 'fortieth', + 'fiftieth', + 'sixtieth', + 'seventieth', + 'eightieth', 'ninetieth'); -@teenthstring = ('tenth', - 'eleventh', - 'twelfth', - 'thirteenth', - 'fourteenth', - 'fifteenth', - 'sixteenth', - 'seventeenth', - 'eighteenth', +@teenthstring = ('tenth', + 'eleventh', + 'twelfth', + 'thirteenth', + 'fourteenth', + 'fifteenth', + 'sixteenth', + 'seventeenth', + 'eighteenth', 'nineteenth'); @unitstring = ('zero', @@ -348,42 +348,42 @@ sub get_numberstringenglish{ { $name .= $unitstring[$num%10]; } - } + } $name; } -@unitthstringfrench = ('zeroi\`eme', - 'uni\`eme', - 'deuxi\`eme', - 'troisi\`eme', - 'quatri\`eme', - 'cinqui\`eme', - 'sixi\`eme', - 'septi\`eme', - 'huiti\`eme', +@unitthstringfrench = ('zeroi\`eme', + 'uni\`eme', + 'deuxi\`eme', + 'troisi\`eme', + 'quatri\`eme', + 'cinqui\`eme', + 'sixi\`eme', + 'septi\`eme', + 'huiti\`eme', 'neuvi\`eme'); -@tenthstringfrench = ('', - 'dixi\`eme', - 'vingti\`eme', - 'trentri\`eme', - 'quaranti\`eme', - 'cinquanti\`eme', - 'soixanti\`eme', - 'septenti\`eme', - 'huitanti\`eme', +@tenthstringfrench = ('', + 'dixi\`eme', + 'vingti\`eme', + 'trentri\`eme', + 'quaranti\`eme', + 'cinquanti\`eme', + 'soixanti\`eme', + 'septenti\`eme', + 'huitanti\`eme', 'nonenti\`eme'); -@teenthstringfrench = ('dixi\`eme', - 'onzi\`eme', - 'douzi\`eme', - 'treizi\`eme', - 'quatorzi\`eme', - 'quinzi\`eme', - 'seizi\`eme', - 'dix-septi\`eme', - 'dix-huiti\`eme', +@teenthstringfrench = ('dixi\`eme', + 'onzi\`eme', + 'douzi\`eme', + 'treizi\`eme', + 'quatorzi\`eme', + 'quinzi\`eme', + 'seizi\`eme', + 'dix-septi\`eme', + 'dix-huiti\`eme', 'dix-neuvi\`eme'); @unitstringfrench = ('zero', @@ -424,37 +424,37 @@ $hundredthnamefrench = "centi\\`eme"; $thousandnamefrench = "mille"; $thousandthnamefrench = "mili\\`eme"; -@unitthstringspanish = ('cero', - 'primero', - 'segundo', - 'tercero', - 'cuarto', - 'quinto', - 'sexto', - 's\\\'eptimo', - 'octavo', +@unitthstringspanish = ('cero', + 'primero', + 'segundo', + 'tercero', + 'cuarto', + 'quinto', + 'sexto', + 's\\\'eptimo', + 'octavo', 'noveno'); -@tenthstringspanish = ('', - 'd\\\'ecimo', - 'vig\\\'esimo', - 'trig\\\'esimo', - 'cuadrag\\\'esimo', - 'quincuag\\\'esimo', - 'sexag\\\'esimo', - 'septuag\\\'esimo', - 'octog\\\'esimo', +@tenthstringspanish = ('', + 'd\\\'ecimo', + 'vig\\\'esimo', + 'trig\\\'esimo', + 'cuadrag\\\'esimo', + 'quincuag\\\'esimo', + 'sexag\\\'esimo', + 'septuag\\\'esimo', + 'octog\\\'esimo', 'nonag\\\'esimo'); -@teenthstringspanish = ('d\\\'ecimo', - 'und\\\'ecimo', - 'duod\\\'ecimo', - 'decimotercero', - 'decimocuarto', - 'decimoquinto', - 'decimosexto', - 'decimos\\\'eptimo', - 'decimoctavo', +@teenthstringspanish = ('d\\\'ecimo', + 'und\\\'ecimo', + 'duod\\\'ecimo', + 'decimotercero', + 'decimocuarto', + 'decimoquinto', + 'decimosexto', + 'decimos\\\'eptimo', + 'decimoctavo', 'decimonoveno'); @hundredthstringspanish = ('', @@ -528,26 +528,26 @@ $hundredthnamespanish = "centi\\`eme"; $thousandnamespanish = "mil"; $thousandthnamespanish = "mil\\'esimo"; -@unitthstringportuges = ('zero', - 'primeiro', - 'segundo', - 'terceiro', - 'quatro', - 'quinto', - 'sexto', - 's\\\'etimo', - 'oitavo', +@unitthstringportuges = ('zero', + 'primeiro', + 'segundo', + 'terceiro', + 'quatro', + 'quinto', + 'sexto', + 's\\\'etimo', + 'oitavo', 'nono'); -@tenthstringportuges = ('', - 'd\\\'ecimo', - 'vig\\\'esimo', - 'trig\\\'esimo', - 'quadrag\\\'esimo', - 'q\"uinquag\\\'esimo', - 'sexag\\\'esimo', - 'setuag\\\'esimo', - 'octog\\\'esimo', +@tenthstringportuges = ('', + 'd\\\'ecimo', + 'vig\\\'esimo', + 'trig\\\'esimo', + 'quadrag\\\'esimo', + 'q\"uinquag\\\'esimo', + 'sexag\\\'esimo', + 'setuag\\\'esimo', + 'octog\\\'esimo', 'nonag\\\'esimo'); @hundredthstringportuges = ('', @@ -615,11 +615,11 @@ sub get_numberstringfrench{ if ($gender eq 'f') { - $unitstringfrench[1] = 'une'; + $unitstringfrench[1] = 'une'; } else { - $unitstringfrench[1] = 'un'; + $unitstringfrench[1] = 'un'; } unless (($num >= 1000000) || ($num < 0)) @@ -688,7 +688,7 @@ sub get_numberstringfrench{ } } } - elsif ($frenchdialect eq 'belgian' + elsif ($frenchdialect eq 'belgian' && ($num >= 80) && ($num < 90)) { $name .= 'quatre-vingt' . ($num==80?'s':'-'); @@ -710,7 +710,7 @@ sub get_numberstringfrench{ { $name .= $unitstringfrench[$num%10]; } - } + } $name; } @@ -721,11 +721,11 @@ sub get_numberstringspanish{ if ($gender eq 'f') { - $unitstringspanish[1] = 'una'; + $unitstringspanish[1] = 'una'; } else { - $unitstringspanish[1] = 'uno'; + $unitstringspanish[1] = 'uno'; } unless (($num >= 1000000) || ($num < 0)) @@ -764,7 +764,6 @@ sub get_numberstringspanish{ if (($_[0] > 100) && ($_[0]%100 > 0)) { $name .= " y "; } - if ($num >= 30) { $name .= $tenstringspanish[$num/10]; @@ -784,7 +783,7 @@ sub get_numberstringspanish{ { $name .= $unitstringspanish[$num%10]; } - } + } $name; } @@ -863,108 +862,108 @@ sub get_numberstringportuges{ { $name .= $unitstringportuges[$num%10]; } - } + } $name; } -@unitthstringMgerman = ('nullter', - 'erster', - 'zweiter', - 'dritter', - 'vierter', - 'f\\"unter', - 'sechster', - 'siebter', - 'achter', +@unitthstringMgerman = ('nullter', + 'erster', + 'zweiter', + 'dritter', + 'vierter', + 'f\\"unter', + 'sechster', + 'siebter', + 'achter', 'neunter'); -@tenthstringMgerman = ('', - 'zehnter', - 'zwanzigster', - 'drei\\ss igster', - 'vierzigster', - 'f\\"unfzigster', - 'sechzigster', - 'siebzigster', - 'achtzigster', +@tenthstringMgerman = ('', + 'zehnter', + 'zwanzigster', + 'drei\\ss igster', + 'vierzigster', + 'f\\"unfzigster', + 'sechzigster', + 'siebzigster', + 'achtzigster', 'neunzigster'); -@teenthstringMgerman = ('zehnter', - 'elfter', - 'zw\\"olfter', - 'dreizehnter', - 'vierzehnter', - 'f\\"unfzehnter', - 'sechzehnter', - 'siebzehnter', - 'achtzehnter', +@teenthstringMgerman = ('zehnter', + 'elfter', + 'zw\\"olfter', + 'dreizehnter', + 'vierzehnter', + 'f\\"unfzehnter', + 'sechzehnter', + 'siebzehnter', + 'achtzehnter', 'neunzehnter'); -@unitthstringFgerman = ('nullte', - 'erste', - 'zweite', - 'dritte', - 'vierte', - 'f\\"unfte', - 'sechste', - 'siebte', - 'achte', +@unitthstringFgerman = ('nullte', + 'erste', + 'zweite', + 'dritte', + 'vierte', + 'f\\"unfte', + 'sechste', + 'siebte', + 'achte', 'neunte'); -@tenthstringFgerman = ('', - 'zehnte', - 'zwanzigste', - 'drei\\ss igste', - 'vierzigste', - 'f\\"unfzigste', - 'sechzigste', - 'siebzigste', - 'achtzigste', +@tenthstringFgerman = ('', + 'zehnte', + 'zwanzigste', + 'drei\\ss igste', + 'vierzigste', + 'f\\"unfzigste', + 'sechzigste', + 'siebzigste', + 'achtzigste', 'neunzigste'); -@teenthstringFgerman = ('zehnte', - 'elfte', - 'zw\\"olfte', - 'dreizehnte', - 'vierzehnte', - 'f\\"unfzehnte', - 'sechzehnte', - 'siebzehnte', - 'achtzehnte', +@teenthstringFgerman = ('zehnte', + 'elfte', + 'zw\\"olfte', + 'dreizehnte', + 'vierzehnte', + 'f\\"unfzehnte', + 'sechzehnte', + 'siebzehnte', + 'achtzehnte', 'neunzehnte'); -@unitthstringNgerman = ('nulltes', - 'erstes', - 'zweites', - 'drittes', - 'viertes', - 'f\\"unte', - 'sechstes', - 'siebtes', - 'achtes', +@unitthstringNgerman = ('nulltes', + 'erstes', + 'zweites', + 'drittes', + 'viertes', + 'f\\"unte', + 'sechstes', + 'siebtes', + 'achtes', 'neuntes'); -@tenthstringNgerman = ('', - 'zehntes', - 'zwanzigstes', - 'drei\\ss igstes', - 'vierzigstes', - 'f\\"unfzigstes', - 'sechzigstes', - 'siebzigstes', - 'achtzigstes', +@tenthstringNgerman = ('', + 'zehntes', + 'zwanzigstes', + 'drei\\ss igstes', + 'vierzigstes', + 'f\\"unfzigstes', + 'sechzigstes', + 'siebzigstes', + 'achtzigstes', 'neunzigstes'); -@teenthstringNgerman = ('zehntes', - 'elftes', - 'zw\\"olftes', - 'dreizehntes', - 'vierzehntes', - 'f\\"unfzehntes', - 'sechzehntes', - 'siebzehntes', - 'achtzehntes', +@teenthstringNgerman = ('zehntes', + 'elftes', + 'zw\\"olftes', + 'dreizehntes', + 'vierzehntes', + 'f\\"unfzehntes', + 'sechzehntes', + 'siebzehntes', + 'achtzehntes', 'neunzehntes'); @unitstringgerman = ('null', @@ -1083,7 +1082,7 @@ sub get_numberstringgerman{ { $name .= &get_numberunderhundredgerman($num); } - } + } $name; } @@ -1103,7 +1102,7 @@ sub get_numberstring{ { &get_numberstringportuges($val,$gender); } - elsif ($default_language eq 'german' + elsif ($default_language eq 'german' or $default_language eq 'ngerman') { &get_numberstringgerman($val,$gender); @@ -1117,7 +1116,7 @@ sub get_numberstring{ sub do_cmd_numberstringnum{ local($_) = @_; local($num,$gender); - $num = &missing_braces unless + $num = &missing_braces unless s/$next_pair_pr_rx/$num=$2;''/eo; if (s/\[(m|f|n)\]//) @@ -1158,7 +1157,7 @@ sub do_cmd_storenumberstring{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -1188,10 +1187,10 @@ sub do_cmd_storenumberstringnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -1242,7 +1241,7 @@ sub get_Numberstring{ sub do_cmd_Numberstringnum{ local($_) = @_; local($num,$gender); - $num = &missing_braces + $num = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); if (s/\[(m|f|n)\]//) @@ -1283,7 +1282,7 @@ sub do_cmd_storeNumberstring{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -1313,10 +1312,10 @@ sub do_cmd_storeNumberstringnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -1334,7 +1333,7 @@ sub do_cmd_storeNumberstringnum{ sub do_cmd_NUMBERstringnum{ local($_) = @_; local($num,$gender); - $num = &missing_braces + $num = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); if (s/\[(m|f|n)\]//) @@ -1375,7 +1374,7 @@ sub do_cmd_storeNUMBERstring{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -1405,10 +1404,10 @@ sub do_cmd_storeNUMBERstringnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -1487,7 +1486,7 @@ sub get_ordinalstringenglish{ { $name .= $unitthstring[$num%10]; } - } + } $name; } @@ -1617,7 +1616,7 @@ sub get_ordinalstringfrench{ { $name .= $unitthstringfrench[$num%10]; } - } + } $name; } @@ -1639,7 +1638,7 @@ sub get_ordinalstringspanish{ { $thousands =~s/o(s?)$/a\1/; } - + $name .= $thousands. " "; } else @@ -1653,7 +1652,7 @@ sub get_ordinalstringspanish{ { $name =~s/o$/a/; } - + $num = $num%1000; } @@ -1667,7 +1666,7 @@ sub get_ordinalstringspanish{ { $hundreds =~s/o$/a/; } - + $name .= $hundreds; $num = $num%100; @@ -1711,7 +1710,7 @@ sub get_ordinalstringspanish{ } $name .= $lastbit; - } + } $name; } @@ -1733,7 +1732,7 @@ sub get_ordinalstringportuges{ { $thousands =~s/o(s?)$/a\1/; } - + $name .= $thousands. " "; } else @@ -1747,7 +1746,7 @@ sub get_ordinalstringportuges{ { $name =~s/o$/a/; } - + $num = $num%1000; } @@ -1761,7 +1760,7 @@ sub get_ordinalstringportuges{ { $hundreds =~s/o$/a/; } - + $name .= $hundreds; $num = $num%100; @@ -1801,7 +1800,7 @@ sub get_ordinalstringportuges{ } $name .= $lastbit; - } + } $name; } @@ -1950,7 +1949,7 @@ sub get_ordinalstringgerman{ { $name .= &get_numberunderhundredthgerman($num,$gender); } - } + } $name; } @@ -1984,7 +1983,7 @@ sub get_ordinalstring{ sub do_cmd_ordinalstringnum{ local($_) = @_; local($num,$gender); - $num = &missing_braces + $num = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); if (s/\[(m|f|n)\]//) @@ -2027,7 +2026,7 @@ sub do_cmd_FMCuse{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); $fmtcntvar{$key}.$_; @@ -2037,7 +2036,7 @@ sub do_cmd_storeordinalstring{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -2067,10 +2066,10 @@ sub do_cmd_storeordinalstringnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -2113,7 +2112,7 @@ sub get_Ordinalstring{ sub do_cmd_Ordinalstringnum{ local($_) = @_; local($num,$gender); - $num = &missing_braces + $num = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); if (s/\[(m|f|n)\]//) @@ -2154,7 +2153,7 @@ sub do_cmd_storeOrdinalstring{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -2184,10 +2183,10 @@ sub do_cmd_storeOrdinalstringnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -2205,7 +2204,7 @@ sub do_cmd_storeOrdinalstringnum{ sub do_cmd_ORDINALstringnum{ local($_) = @_; local($num,$gender); - $num = &missing_braces + $num = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); if (s/\[(m|f|n)\]//) @@ -2246,7 +2245,7 @@ sub do_cmd_storeORDINALstring{ local($_) = @_; local($key); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); local($ctr, $val, $id, $_) = &read_counter_value($_); @@ -2276,10 +2275,10 @@ sub do_cmd_storeORDINALstringnum{ local($_) = @_; local($key, $val); - $key = &missing_braces + $key = &missing_braces unless ((s/$next_pair_pr_rx//o)&&($key=$2)); - $val = &missing_braces + $val = &missing_braces unless (s/$next_pair_pr_rx/$val=$2;''/eo); my($gender)='m'; @@ -2410,7 +2409,7 @@ sub do_cmd_binarynum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', &get_binary($num), $_); } @@ -2430,7 +2429,7 @@ sub do_cmd_decimalnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', &get_decimal($num), $_); } @@ -2450,7 +2449,7 @@ sub do_cmd_hexadecimalnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', &get_hexadecimal($num), $_); } @@ -2470,7 +2469,7 @@ sub do_cmd_Hexadecimalnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', &get_Hexadecimal($num), $_); } @@ -2490,7 +2489,7 @@ sub do_cmd_octalnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', &get_octal($num), $_); } @@ -2526,7 +2525,7 @@ sub do_cmd_aaalphnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', (sprintf "%${padzeroes}s", &get_aaalph($num)), $_); } @@ -2534,7 +2533,7 @@ sub do_cmd_AAAlphnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', uc(sprintf "%${padzeroes}s", &get_aaalph($num)), $_); } @@ -2560,7 +2559,7 @@ sub get_abalph{ sub do_cmd_abalph{ local($ctr, $val, $id, $_) = &read_counter_value($_[0]); - + join('', (sprintf "%${padzeroes}s", &get_abalph($val)), $_); } @@ -2568,13 +2567,13 @@ sub do_cmd_abalphnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', (sprintf "%${padzeroes}s", &get_abalph($num)), $_); } sub do_cmd_ABAlph{ local($ctr, $val, $id, $_) = &read_counter_value($_[0]); - + join('', uc(sprintf "%${padzeroes}s", &get_abalph($val)), $_); } @@ -2582,7 +2581,7 @@ sub do_cmd_ABAlphnum{ local($_) = @_; local($num) = &missing_braces unless (s/$next_pair_pr_rx/$num=$2;''/eo); - + join('', uc(sprintf "%${padzeroes}s", &get_abalph($num)), $_); } @@ -2630,7 +2629,7 @@ sub do_cmd_romannumeral{ # Note: The configuration file should be loaded before # the package options are executed. -# why doesn't this work? If I call this subroutine it +# why doesn't this work? If I call this subroutine it # causes an infinite loop. sub load_fmtcount_cfg{ diff --git a/Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.dtx b/Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.dtx deleted file mode 100644 index 1ed4d0f8161..00000000000 --- a/Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.dtx +++ /dev/null @@ -1,5491 +0,0 @@ -%\iffalse -% fmtcount.dtx generated using makedtx version 0.91b (c) Nicola Talbot -% Command line args: -% -src "(.+)\.(def)=>\1.\2" -% -src "(.+)\.(sty)=>\1.\2" -% -doc "manual.tex" -% -author "Nicola Talbot" -% -dir "source" -% fmtcount -% Created on 2007/6/14 21:12 -%\fi -%\iffalse -%<*package> -%% \CharacterTable -%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -%% Digits \0\1\2\3\4\5\6\7\8\9 -%% Exclamation \! Double quote \" Hash (number) \# -%% Dollar \$ Percent \% Ampersand \& -%% Acute accent \' Left paren \( Right paren \) -%% Asterisk \* Plus \+ Comma \, -%% Minus \- Point \. Solidus \/ -%% Colon \: Semicolon \; Less than \< -%% Equals \= Greater than \> Question mark \? -%% Commercial at \@ Left bracket \[ Backslash \\ -%% Right bracket \] Circumflex \^ Underscore \_ -%% Grave accent \` Left brace \{ Vertical bar \| -%% Right brace \} Tilde \~} -% -%\fi -% \iffalse -% Doc-Source file to use with LaTeX2e -% Copyright (C) 2007 Nicola Talbot, all rights reserved. -% \fi -% \iffalse -%<*driver> -\documentclass{ltxdoc} - -\usepackage[colorlinks, - bookmarks, - bookmarksopen, - pdfauthor={N.L.C. Talbot}, - pdftitle={fmtcount.sty: Displaying the Values of LaTeX Counters}, - pdfkeywords={LaTeX,counter}]{hyperref} - - - -\newcommand{\styname}[1]{\textsf{#1}}\newcommand{\clsname}[1]{\textsf{#1}}\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} - -\begin{document} -\DocInput{fmtcount.dtx} -\end{document} -% -%\fi -% -%\RecordChanges -%\CheckSum{7743} -%\def\filedate{14 June 2007} -%\def\fileversion{1.1} -%\def\filename{fmtcount.dtx} -%\def\docdate{26th May 2007} -% -% \title{fmtcount.sty v\fileversion: Displaying the Values of -%\LaTeX\ Counters} -% \author{Nicola L.C. Talbot} -% \date{\docdate} -% \maketitle -% \tableofcontents -% \section{Introduction} -%The \styname{fmtcount} package provides commands to display -%the values of \LaTeX\ counters in a variety of formats. It also -%provides equivalent commands for actual numbers rather than -%counter names. Limited multilingual support is available. -% -%\section{Installation} -% -%This package is distributed with the files \texttt{fmtcount.dtx} -%and \texttt{fmtcount.ins}. To extract the code do: -%\begin{verbatim} -%latex fmtcount.ins -%\end{verbatim} -%This will create the files \texttt{fmtcount.sty} and -%\texttt{fmtcount.perl}, along with several \texttt{.def} files. -%Place \texttt{fmtcount.sty} and the \texttt{.def} files somewhere -%where \LaTeX\ will find them (e.g.\ \texttt{texmf/tex/latex/fmtcount/}) and place \texttt{fmtcount.perl} somewhere where \LaTeX2HTML -%will find it (e.g.\ latex2html/styles). Remember to refresh -%the \TeX\ database (using \texttt{texhash} under Linux, for -%other operating systems check the manual.) -% -%\section{Available Commands} -% -%The commands can be divided into two categories: those that -%take the name of a counter as the argument, and those -%that take a number as the argument. -% -% \DescribeMacro{\ordinal} -% The macro \verb"\ordinal{"\meta{counter}\verb!}! will -% print the value of a \LaTeX\ counter \meta{counter} as an ordinal, -% \DescribeMacro{\fmtord} -% where the macro \verb"\fmtord{"\meta{text}\verb!}! is used to format the st,nd,rd,th bit. -% By default the ordinal is formatted as a superscript, if the package option \texttt{level} -% is used, it is level with the text. -% For example, if the current section is 3, then \verb"\ordinal{section}" will produce -% the output: 3\textsuperscript{rd}. -% -%\textbf{Note:} the \clsname{memoir} class also defines a command called -%\verb"\ordinal" which takes a number as an argument instead of a -%counter. In order to overcome this incompatiblity, if you want -%to use the \styname{fmtcount} package with the \clsname{memoir} class -%you should use \verb"\FCordinal" to access \styname{fmtcount}'s -%version of \verb"\ordinal", and use \verb"\ordinal" to use -%\clsname{memoir}'s version of that command. -% -%\DescribeMacro{\ordinalnum} -%The macro \verb"\ordinalnum" is like \verb!\ordinal! -%but takes an actual number rather than a counter as the -%argument. For example: \verb"\ordinalnum{3}" will -%produce: 3\textsuperscript{rd}. -% -% \DescribeMacro{\numberstring} -% The macro \verb"\numberstring{"\meta{counter}\verb!}! will print the value -% of \meta{counter} as text. E.g.\ \verb"\numberstring{section}" will produce: -% three. -% \DescribeMacro{\Numberstring} -% The macro \verb"\Numberstring{"\meta{counter}\verb!}! does the same as -% \verb"\numberstring", but with initial letters in uppercase. For -% example, \verb"\Numberstring{section}" will produce: Three. -%\DescribeMacro{\NUMBERstring} -%The macro \verb"\NUMBERstring{"\meta{counter}\verb'}' does the same -%as \verb"\numberstring", but converted to upper case. Note that -%\verb"\MakeUppercase{\NUMBERstring{"\meta{counter}\verb'}}' doesn't -%work, due to the way that \verb"\MakeUppercase" expands its -%argument\footnote{See all the various postings to -%\texttt{comp.text.tex} about \cmdname{MakeUppercase}}. -% -%\DescribeMacro{\numberstringnum} -%\DescribeMacro{\Numberstringnum} -%\DescribeMacro{\NUMBERstringnum} -%The macros \verb!\numberstringnum!, -%\verb!\Numberstringnum! and -%\verb"\NUMBERstringnum" work like -%\verb!\numberstring!, -%\verb!\Numberstring! and -%\verb"\NUMBERstring", respectively, but take an actual number -%rather than a counter as the argument. For example: -%\verb'\Numberstringnum{105}' will produce: One Hundred and Five. -% -% -% \DescribeMacro{\ordinalstring} -% The macro \verb"\ordinalstring{"\meta{counter}\verb!}! will print the -% value of \meta{counter} as a textual ordinal. E.g.\ -% \verb"\ordinalstring{section}" will produce: third. -% \DescribeMacro{\Ordinalstring} -% The macro \verb"\Ordinalstring{"\meta{counter}\verb!}! does the same as -% \verb"\ordinalstring", but with initial letters in uppercase. For example, -% \verb"\Ordinalstring{section}" will produce: Third. -% \DescribeMacro{\ORDINALstring} -% The macro \verb"\ORDINALstring{"\meta{counter}\verb!}! does the same as -%\verb"\ordinalstring", but with all words in upper case (see previous -%note about \cmdname{MakeUppercase}). -% -%\DescribeMacro{\ordinalstringnum} -%\DescribeMacro{\Ordinalstringnum} -%\DescribeMacro{\ORDINALstringnum} -%The macros \verb!\ordinalstringnum!, -%\verb!\Ordinalstringnum! and \cmdname{ORDINALstringnum} work like -%\verb!\ordinalstring!, -%\verb!\Ordinalstring! and \cmdname{ORDINALstring}, respectively, but take an actual number -%rather than a counter as the argument. For example, -%\verb"\ordinalstringnum{3}" will produce: third. -% -%\changes{v.1.09}{21 Apr 2007}{store facility added} -%As from version 1.09, textual representations can be stored for -%later use. This overcomes the problems encountered when you -%attempt to use one of the above commands in \cmdname{edef}. -% -%Each of the following commands takes a label as the first argument, -%the other arguments are as the analogous commands above. These -%commands do not display anything, but store the textual -%representation. This can later be retrieved using -%\DescribeMacro{\FMCuse}\cmdname{FMCuse}\{\meta{label}\}. -%Note: with \cmdname{storeordinal} and \cmdname{storeordinalnum}, the -%only bit that doesn't get expanded is \cmdname{fmtord}. So, for -%example, \verb"\storeordinalnum{mylabel}{3}" will be stored as -%\verb"3\relax \fmtord{rd}". -% -%\DescribeMacro{\storeordinal} -%\cmdname{storeordinal}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeordinalstring} -%\cmdname{storeordinalstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeOrdinalstring} -%\cmdname{storeOrdinalstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeORDINALstring} -%\cmdname{storeORDINALstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storenumberstring} -%\cmdname{storenumberstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeNumberstring} -%\cmdname{storeNumberstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeNUMBERstring} -%\cmdname{storeNUMBERstring}\{\meta{label}\}\{\meta{counter}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeordinalnum} -%\cmdname{storeordinalnum}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeordinalstringnum} -%\cmdname{storeordinalstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeOrdinalstringnum} -%\cmdname{storeOrdinalstringnum}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeORDINALstringnum} -%\cmdname{storeORDINALstringnum}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -%\par -%\DescribeMacro{\storenumberstringnum} -%\cmdname{storenumberstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeNumberstringnum} -%\cmdname{storeNumberstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -%\par -%\DescribeMacro{\storeNUMBERstringnum} -%\cmdname{storeNUMBERstring}\{\meta{label}\}\{\meta{number}\}[\meta{gender}] -% -% \DescribeMacro{\binary} -%\changes{v2.4}{25 Sept 2004}{'binary added} -% The macro \verb"\binary{"\meta{counter}\verb!}! will print the -%value of \meta{counter} as a binary number. -%E.g.\ \verb"\binary{section}" will produce: 11. The declaration -%\DescribeMacro{\padzeroes}\verb"\padzeroes["\meta{n}\verb!]! -%will ensure numbers are written to \meta{n} digits, padding with -%zeroes if necessary. E.g.\ \verb"\padzeroes[8]\binary{section}" -%will produce: 00000011. -% The default value for \meta{n} is 17. -% -%\DescribeMacro{\binarynum} -%The macro \verb"\binarynum" is like \verb!\binary! -%but takes an actual number rather than a counter as the -%argument. For example: \verb"\binarynum{5}" will -%produce: 101. -% -% \DescribeMacro{\octal} -%\changes{v2.4}{25 Sept 2004}{'octal added} -% The macro \verb"\octal{"\meta{counter}\verb!}! will print the -%value of \meta{counter} as an octal number. For example, if you -%have a counter called, say \texttt{mycounter}, and you set the -%value to 125, then \verb"\octal{mycounter}" will produce: 177. -% Again, the number will be padded with zeroes if necessary, -%depending on whether \verb"\padzeroes" has been used. -% -%\DescribeMacro{\octalnum} -%The macro \verb"\octalnum" is like \verb!\octal! -%but takes an actual number rather than a counter as the -%argument. For example: \verb"\octalnum{125}" will -%produce: 177. -% -% \DescribeMacro{\hexadecimal} -%\changes{v2.4}{25 Sept 2004}{'hexadecimal added} -% The macro \verb"\hexadecimal{"\meta{counter}\verb!}! will print -%the value of \meta{counter} as a hexadecimal number. Going back -%to the previous example, \verb"\hexadecimal{mycounter}" will -% produce: 7d. Again, the number will be padded with zeroes if -%necessary, depending on whether \verb"\padzeroes" has been used. -% \DescribeMacro{\Hexadecimal} -% \verb"\Hexadecimal{"\meta{counter}\verb!}! does the same thing, -%but uses uppercase characters, e.g.\ -% \verb"\Hexadecimal{mycounter}" will produce: 7D. -% -%\DescribeMacro{\hexadecimalnum} -%\DescribeMacro{\Hexadecimalnum} -%The macros \verb"\hexadecimalnum" and -%\verb"\Hexadecimalnum" are like -%\verb!\hexadecimal! and \verb"\Hexadecimal" -%but take an actual number rather than a counter as the -%argument. For example: \verb"\hexadecimalnum{125}" will -%produce: 7d, and \verb"\Hexadecimalnum{125}" will -%produce: 7D. -% -%\DescribeMacro{\decimal} -%\changes{v2.41}{22 Oct 2004}{'decimal added} -%The macro \verb"\decimal{"\meta{counter}\verb!}! is similar to -%\verb"\arabic" but the number can be padded with zeroes -% depending on whether \verb"\padzeroes" has been used. -%For example: \verb"\padzeroes[8]\decimal{section}" will -% produce: 00000005. -% -%\DescribeMacro{\decimalnum} -%The macro \verb"\decimalnum" is like \verb!\decimal! -%but takes an actual number rather than a counter as the -%argument. For example: \verb"\padzeroes[8]\decimalnum{5}" will -%produce: 00000005. -% -% \DescribeMacro{\aaalph} -%\changes{v2.4}{25 Sept 2004}{'aaalph added} -% The macro \verb"\aaalph{"\meta{counter}\verb!}! will print the -%value of \meta{counter} as: a b \ldots\ z aa bb \ldots\ zz etc. -% For example, \verb"\aaalpha{mycounter}" will produce: uuuuu if -%\texttt{mycounter} is set to 125. -% \DescribeMacro{\AAAlph} -% \verb"\AAAlph{"\meta{counter}\verb!}! does the same thing, but -%uses uppercase characters, e.g.\ -% \verb"\AAAlph{mycounter}" will produce: UUUUU. -% -%\DescribeMacro{\aaalphnum} -%\DescribeMacro{\AAAlphnum} -%The macros \verb"\aaalphnum" and -%\verb"\AAAlphnum" are like -%\verb!\aaalph! and \verb"\AAAlph" -%but take an actual number rather than a counter as the -%argument. For example: \verb"\aaalphnum{125}" will -%produce: uuuuu, and \verb"\AAAlphnum{125}" will -%produce: UUUUU. -% -% \DescribeMacro{\abalph} -%\changes{v2.4}{25 Sept 2004}{'abalph added} -% The macro \verb"\abalph{"\meta{counter}\verb!}! will print the -%value of \meta{counter} as: a b \ldots\ z aa ab \ldots\ az etc. -% For example, \verb"\abalpha{mycounter}" will produce: du if -%\texttt{mycounter} is set to 125. -% \DescribeMacro{\ABAlph} -% \verb"\ABAlph{"\meta{counter}\verb!}! does the same thing, but -%uses uppercase characters, e.g.\ -% \verb"\ABAlph{mycounter}" will produce: DU. -% -%\DescribeMacro{\abalphnum} -%\DescribeMacro{\ABAlphnum} -%The macros \verb"\abalphnum" and -%\verb"\ABAlphnum" are like -%\verb!\abalph! and \verb"\ABAlph" -%but take an actual number rather than a counter as the -%argument. For example: \verb"\abalphnum{125}" will -%produce: du, and \verb"\ABAlphnum{125}" will -%produce: DU. -% -%\section{Package Options} -% -%The following options can be passed to this package: -% -%\begin{tabular}{ll} -% raise & make ordinal st,nd,rd,th appear as superscript\\ -% level & make ordinal st,nd,rd,th appear level with rest of -%text -%\end{tabular} -% -%\noindent These can also be set using the command: -% -%\DescribeMacro{\fmtcountsetoptions} -%\verb"\fmtcountsetoptions{fmtord="\meta{type}\verb'}' -% -%\noindent where \meta{type} is either \texttt{level} or -%\texttt{raise}. -% -%\section{Multilingual Support} -% -%Version 1.02 of the \styname{fmtcount} package now has -%limited multilingual support. The following languages are -%implemented: English, Spanish, Portuguese, French, French (Swiss) -%and French (Belgian). German support was added in version -%1.1\footnote{Thanks to K. H. Fricke for supplying the information}. -% -% The package checks to see if the -%command \verb"\date"\meta{language} is defined\footnote{this -%will be true if you have loaded \styname{babel}}, and will -%load the code for those languages. The commands \verb"\ordinal", -%\verb"\ordinalstring" and \verb'\numberstring' (and their -%variants) will then be formatted in the currently -%selected language. -% -%If the French language is selected, the French (France) version -%will be used by default (e.g.\ soxiante-dix for 70). To -%select the Swiss or Belgian variants (e.g.\ septente for 70) use: -%\verb"\fmtcountsetoptions{french="\meta{dialect}\verb'}' -%where \meta{dialect} is either \texttt{swiss} or \texttt{belgian}. -%You can also use this command to change the action of -%\verb"\ordinal". -%\verb"\fmtcountsetoptions{abbrv=true}" to produce ordinals -%of the form 2\textsuperscript{e} or -%\verb"\fmtcountsetoptions{abbrv=false}" to produce ordinals -%of the form 2\textsuperscript{eme} (default). -% -%The \texttt{french} and \texttt{abbrv} settings only have an -%effect if the French language has been defined. -% -%The male gender for all languages is used by default, however the -%feminine or neuter forms can be obtained by passing \texttt{f} or -%\texttt{n} as an optional argument to \verb"\ordinal", -%\verb!\ordinalnum! etc. For example: -%\verb"\numberstring{section}[f]". Note that the optional argument -%comes \emph{after} the compulsory argument. If a gender is -%not defined in a given language, the masculine version will -%be used instead. -% -%Let me know if you find any spelling mistakes (has been known -%to happen in English, let alone other languages I'm not so -%familiar with.) If you want to add support for another language, -%you will need to let me know how to form the numbers and ordinals -%from 0 to 99999 in that language for each gender. -% -%\section{Configuration File \texttt{fmtcount.cfg}} -% -%You can save your preferred default settings to a file called -%\texttt{fmtcount.cfg}, and place it on the \TeX\ path. These -%settings will then be loaded by the \styname{fmtcount} -%package. -% -%Note that if you are using the \styname{datetime} package, -%the \texttt{datetime.cfg} configuration file will override -%the \texttt{fmtcount.cfg} configuration file. -%For example, if \texttt{datetime.cfg} has the line: -%\begin{verbatim} -%\renewcommand{\fmtord}[1]{\textsuperscript{\underline{#1}}} -%\end{verbatim} -%and if \texttt{fmtcount.cfg} has the line: -%\begin{verbatim} -%\fmtcountsetoptions{fmtord=level} -%\end{verbatim} -%then the former definition of \verb"\fmtord" will take -%precedence. -% -%\section{LaTeX2HTML style} -% -%The \LaTeX2HTML\ style file \texttt{fmtcount.perl} is provided. -%The following limitations apply: -% -%\begin{itemize} -%\item \verb"\padzeroes" only has an effect in the preamble. -% -%\item The configuration file -%\texttt{fmtcount.cfg} is currently ignored. (This is because -%I can't work out the correct code to do this. If you -%know how to do this, please let me know.) You can however -%do: -%\begin{verbatim} -%\usepackage{fmtcount} -%\html{\input{fmtcount.cfg}} -%\end{verbatim} -%This, I agree, is an unpleasant cludge. -% -%\end{itemize} -% -%\section{Acknowledgements} -% -%I would like to thank my mother for the French and Portuguese -%support and my Spanish dictionary for the Spanish support. -%Thank you to K. H. Fricke for providing me with the German -%translations. -% -%\section{Troubleshooting} -% -%There is a FAQ available at: \url{http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/}. -% -% \section{Contact Details} -% Dr Nicola Talbot\\ -% School of Computing Sciences\\ -% University of East Anglia\\ -% Norwich. NR4 7TJ.\\ -% United Kingdom.\\ -% \url{http://theoval.cmp.uea.ac.uk/~nlct/} -% -% -%\StopEventually{} -%\section{The Code} -%\iffalse -% \begin{macrocode} -%<*fc-british.def> -% \end{macrocode} -%\fi -% \subsection{fc-british.def} -% British definitions -% \begin{macrocode} -\ProvidesFile{fc-british}[2007/06/14] -% \end{macrocode} -% Check that fc-english.def has been loaded -% \begin{macrocode} -\@ifundefined{@ordinalMenglish}{\input{fc-english.def}}{} -% \end{macrocode} -% These are all just synonyms for the commands provided by -% fc-english.def. -% \begin{macrocode} -\let\@ordinalMbritish\@ordinalMenglish -\let\@ordinalFbritish\@ordinalMenglish -\let\@ordinalNbritish\@ordinalMenglish -\let\@numberstringMbritish\@numberstringMenglish -\let\@numberstringFbritish\@numberstringMenglish -\let\@numberstringNbritish\@numberstringMenglish -\let\@NumberstringMbritish\@NumberstringMenglish -\let\@NumberstringFbritish\@NumberstringMenglish -\let\@NumberstringNbritish\@NumberstringMenglish -\let\@ordinalstringMbritish\@ordinalstringMenglish -\let\@ordinalstringFbritish\@ordinalstringMenglish -\let\@ordinalstringNbritish\@ordinalstringMenglish -\let\@OrdinalstringMbritish\@OrdinalstringMenglish -\let\@OrdinalstringFbritish\@OrdinalstringMenglish -\let\@OrdinalstringNbritish\@OrdinalstringMenglish -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-english.def> -% \end{macrocode} -%\fi -% \subsection{fc-english.def} -% English definitions -% \begin{macrocode} -\ProvidesFile{fc-english}[2007/05/26] -% \end{macrocode} -% Define macro that converts a number or count register (first -% argument) to an ordinal, and stores the result in the -% second argument, which should be a control sequence. -% \begin{macrocode} -\newcommand*{\@ordinalMenglish}[2]{% -\def\@fc@ord{}% -\@orgargctr=#1\relax -\@ordinalctr=#1% -\@modulo{\@ordinalctr}{100}% -\ifnum\@ordinalctr=11\relax - \def\@fc@ord{th}% -\else - \ifnum\@ordinalctr=12\relax - \def\@fc@ord{th}% - \else - \ifnum\@ordinalctr=13\relax - \def\@fc@ord{th}% - \else - \@modulo{\@ordinalctr}{10}% - \ifcase\@ordinalctr - \def\@fc@ord{th}% case 0 - \or \def\@fc@ord{st}% case 1 - \or \def\@fc@ord{nd}% case 2 - \or \def\@fc@ord{rd}% case 3 - \else - \def\@fc@ord{th}% default case - \fi - \fi - \fi -\fi -\edef#2{\number#1\relax\noexpand\fmtord{\@fc@ord}}% -} -% \end{macrocode} -% There is no gender difference in English, so make feminine and -% neuter the same as the masculine. -% \begin{macrocode} -\let\@ordinalFenglish=\@ordinalMenglish -\let\@ordinalNenglish=\@ordinalMenglish -% \end{macrocode} -% Define the macro that prints the value of a \TeX\ count register -% as text. To make it easier, break it up into units, teens and -% tens. First, the units: the argument should be between 0 and 9 -% inclusive. -% \begin{macrocode} -\newcommand*{\@@unitstringenglish}[1]{% -\ifcase#1\relax -zero% -\or one% -\or two% -\or three% -\or four% -\or five% -\or six% -\or seven% -\or eight% -\or nine% -\fi -} -% \end{macrocode} -% Next the tens, again the argument should be between 0 and 9 -% inclusive. -% \begin{macrocode} -\newcommand*{\@@tenstringenglish}[1]{% -\ifcase#1\relax -\or ten% -\or twenty% -\or thirty% -\or forty% -\or fifty% -\or sixty% -\or seventy% -\or eighty% -\or ninety% -\fi -} -% \end{macrocode} -% Finally the teens, again the argument should be between 0 and 9 -% inclusive. -% \begin{macrocode} -\newcommand*{\@@teenstringenglish}[1]{% -\ifcase#1\relax -ten% -\or eleven% -\or twelve% -\or thirteen% -\or fourteen% -\or fifteen% -\or sixteen% -\or seventeen% -\or eighteen% -\or nineteen% -\fi -} -% \end{macrocode} -% As above, but with the initial letter in uppercase. The units: -% \begin{macrocode} -\newcommand*{\@@Unitstringenglish}[1]{% -\ifcase#1\relax -Zero% -\or One% -\or Two% -\or Three% -\or Four% -\or Five% -\or Six% -\or Seven% -\or Eight% -\or Nine% -\fi -} -% \end{macrocode} -% The tens: -% \begin{macrocode} -\newcommand*{\@@Tenstringenglish}[1]{% -\ifcase#1\relax -\or Ten% -\or Twenty% -\or Thirty% -\or Forty% -\or Fifty% -\or Sixty% -\or Seventy% -\or Eighty% -\or Ninety% -\fi -} -% \end{macrocode} -% The teens: -% \begin{macrocode} -\newcommand*{\@@Teenstringenglish}[1]{% -\ifcase#1\relax -Ten% -\or Eleven% -\or Twelve% -\or Thirteen% -\or Fourteen% -\or Fifteen% -\or Sixteen% -\or Seventeen% -\or Eighteen% -\or Nineteen% -\fi -} -% \end{macrocode} -% This has changed in version 1.09, so that it now stores -% the result in the second argument, but doesn't display anything. -% Since it only affects internal macros, it shouldn't affect -% documents created with older versions. (These internal macros are -% not meant for use in documents.) -% \begin{macrocode} -\newcommand*{\@@numberstringenglish}[2]{% -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9 -% #1 is greater or equal to 10000 - \divide\@strctr by 10 - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1 \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr-\@unitstring{\@strctr}}% - \fi - \else - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@thousand}% -\else - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ \@thousand}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100 -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ \@hundred}% -\fi -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname\ }% - \fi -\fi -\ifnum\@strctr>19\relax - \divide\@strctr by 10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr-\@unitstring{\@strctr}}% - \fi -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi -\fi -} -% \end{macrocode} -% All lower case version, the second argument must be a -% control sequence. -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMenglish}[2]{% -\let\@unitstring=\@@unitstringenglish -\let\@teenstring=\@@teenstringenglish -\let\@tenstring=\@@tenstringenglish -\def\@hundred{hundred}\def\@thousand{thousand}% -\def\@andname{and}% -\@@numberstringenglish{#1}{#2}% -} -% \end{macrocode} -% There is no gender in English, so make feminine and neuter the same -% as the masculine. -% \begin{macrocode} -\let\@numberstringFenglish=\@numberstringMenglish -\let\@numberstringNenglish=\@numberstringMenglish -% \end{macrocode} -% This version makes the first letter of each word an uppercase -% character (except ``and''). The second argument must be a control -% sequence. -% \begin{macrocode} -\newcommand*{\@NumberstringMenglish}[2]{% -\let\@unitstring=\@@Unitstringenglish -\let\@teenstring=\@@Teenstringenglish -\let\@tenstring=\@@Tenstringenglish -\def\@hundred{Hundred}\def\@thousand{Thousand}% -\def\@andname{and}% -\@@numberstringenglish{#1}{#2}} -% \end{macrocode} -% There is no gender in English, so make feminine and neuter the same -% as the masculine. -% \begin{macrocode} -\let\@NumberstringFenglish=\@NumberstringMenglish -\let\@NumberstringNenglish=\@NumberstringMenglish -% \end{macrocode} -% Define a macro that produces an ordinal as a string. Again, break -% it up into units, teens and tens. First the units: -% \begin{macrocode} -\newcommand*{\@@unitthstringenglish}[1]{% -\ifcase#1\relax -zeroth% -\or first% -\or second% -\or third% -\or fourth% -\or fifth% -\or sixth% -\or seventh% -\or eighth% -\or ninth% -\fi -} -% \end{macrocode} -% Next the tens: -% \begin{macrocode} -\newcommand*{\@@tenthstringenglish}[1]{% -\ifcase#1\relax -\or tenth% -\or twentieth% -\or thirtieth% -\or fortieth% -\or fiftieth% -\or sixtieth% -\or seventieth% -\or eightieth% -\or ninetieth% -\fi -} -% \end{macrocode} -% The teens: -% \begin{macrocode} -\newcommand*{\@@teenthstringenglish}[1]{% -\ifcase#1\relax -tenth% -\or eleventh% -\or twelfth% -\or thirteenth% -\or fourteenth% -\or fifteenth% -\or sixteenth% -\or seventeenth% -\or eighteenth% -\or nineteenth% -\fi -} -% \end{macrocode} -% As before, but with the first letter in upper case. The units: -% \begin{macrocode} -\newcommand*{\@@Unitthstringenglish}[1]{% -\ifcase#1\relax -Zeroth% -\or First% -\or Second% -\or Third% -\or Fourth% -\or Fifth% -\or Sixth% -\or Seventh% -\or Eighth% -\or Ninth% -\fi -} -% \end{macrocode} -% The tens: -% \begin{macrocode} -\newcommand*{\@@Tenthstringenglish}[1]{% -\ifcase#1\relax -\or Tenth% -\or Twentieth% -\or Thirtieth% -\or Fortieth% -\or Fiftieth% -\or Sixtieth% -\or Seventieth% -\or Eightieth% -\or Ninetieth% -\fi -} -% \end{macrocode} -% The teens: -% \begin{macrocode} -\newcommand*{\@@Teenthstringenglish}[1]{% -\ifcase#1\relax -Tenth% -\or Eleventh% -\or Twelfth% -\or Thirteenth% -\or Fourteenth% -\or Fifteenth% -\or Sixteenth% -\or Seventeenth% -\or Eighteenth% -\or Nineteenth% -\fi -} -% \end{macrocode} -% Again, as from version 1.09, this has been changed to take two -% arguments, where the second argument is a control sequence. -% The resulting text is stored in the control sequence, and nothing -% is displayed. -% \begin{macrocode} -\newcommand*{\@@ordinalstringenglish}[2]{% -\@strctr=#1\relax -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000 (value given: \number\@strctr)}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\fi -\def#2{}% -\fi -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9\relax -% #1 is greater or equal to 10000 - \divide\@strctr by 10 - \ifnum\@strctr>1\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}% - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr-\@unitstring{\@strctr}}% - \fi - \else - \@strctr=#1\relax \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenstring{\@strctr}}% - \fi - \@strctr=#1\relax \@modulo{\@strctr}{1000}% - \ifnum\@strctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousandth}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousand}% - \fi -\else - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{1000}% - \let\@@fc@ordstr#2\relax - \ifnum\@strctr=0\relax - \edef#2{\@@fc@ordstr\ \@thousandth}% - \else - \edef#2{\@@fc@ordstr\ \@thousand}% - \fi - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100 -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ }% - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{100}% - \let\@@fc@ordstr#2\relax - \ifnum\@strctr=0\relax - \edef#2{\@@fc@ordstr\ \@hundredth}% - \else - \edef#2{\@@fc@ordstr\ \@hundred}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname\ }% - \fi -\fi -\ifnum\@strctr>19\relax - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \@modulo{\@tmpstrctr}{10}% - \let\@@fc@ordstr#2\relax - \ifnum\@tmpstrctr=0\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@strctr}}% - \else - \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}% - \fi - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr-\@unitthstring{\@strctr}}% - \fi -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi - \else - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}% - \fi -\fi -} -% \end{macrocode} -% All lower case version. Again, the second argument must be a -% control sequence in which the resulting text is stored. -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMenglish}[2]{% -\let\@unitthstring=\@@unitthstringenglish -\let\@teenthstring=\@@teenthstringenglish -\let\@tenthstring=\@@tenthstringenglish -\let\@unitstring=\@@unitstringenglish -\let\@teenstring=\@@teenstringenglish -\let\@tenstring=\@@tenstringenglish -\def\@andname{and}% -\def\@hundred{hundred}\def\@thousand{thousand}% -\def\@hundredth{hundredth}\def\@thousandth{thousandth}% -\@@ordinalstringenglish{#1}{#2}} -% \end{macrocode} -% No gender in English, so make feminine and neuter same as masculine: -% \begin{macrocode} -\let\@ordinalstringFenglish=\@ordinalstringMenglish -\let\@ordinalstringNenglish=\@ordinalstringMenglish -% \end{macrocode} -% First letter of each word in upper case: -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMenglish}[2]{% -\let\@unitthstring=\@@Unitthstringenglish -\let\@teenthstring=\@@Teenthstringenglish -\let\@tenthstring=\@@Tenthstringenglish -\let\@unitstring=\@@Unitstringenglish -\let\@teenstring=\@@Teenstringenglish -\let\@tenstring=\@@Tenstringenglish -\def\@andname{and}% -\def\@hundred{Hundred}\def\@thousand{Thousand}% -\def\@hundredth{Hundredth}\def\@thousandth{Thousandth}% -\@@ordinalstringenglish{#1}{#2}} -% \end{macrocode} -% No gender in English, so make feminine and neuter same as masculine: -% \begin{macrocode} -\let\@OrdinalstringFenglish=\@OrdinalstringMenglish -\let\@OrdinalstringNenglish=\@OrdinalstringMenglish -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-french.def> -% \end{macrocode} -%\fi -% \subsection{fc-french.def} -% French definitions -% \begin{macrocode} -\ProvidesFile{fc-french.def}[2007/05/26] -% \end{macrocode} -% Define macro that converts a number or count register (first -% argument) to an ordinal, and store the result in the second -% argument, which must be a control sequence. Masculine: -% \begin{macrocode} -\newcommand*{\@ordinalMfrench}[2]{% -\iffmtord@abbrv - \edef#2{\number#1\relax\noexpand\fmtord{e}}% -\else - \ifnum#1=1\relax - \edef#2{\number#1\relax\noexpand\fmtord{er}}% - \else - \edef#2{\number#1\relax\noexpand\fmtord{eme}}% - \fi -\fi} -% \end{macrocode} -% Feminine: -% \begin{macrocode} -\newcommand*{\@ordinalFfrench}[2]{% -\iffmtord@abbrv - \edef#2{\number#1\relax\noexpand\fmtord{e}}% -\else - \ifnum#1=1\relax - \edef#2{\number#1\relax\noexpand\fmtord{ere}}% - \else - \edef#2{\number#1\relax\noexpand\fmtord{eme}}% - \fi -\fi} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalNfrench\@ordinalMfrench -% \end{macrocode} -% Textual representation of a number. To make it easier break it -% into units, tens and teens. First the units: -% \begin{macrocode} -\newcommand*{\@@unitstringfrench}[1]{% -\ifcase#1\relax -zero% -\or un% -\or deux% -\or trois% -\or quatre% -\or cinq% -\or six% -\or sept% -\or huit% -\or neuf% -\fi -} -% \end{macrocode} -% Feminine only changes for 1: -% \begin{macrocode} -\newcommand*{\@@unitstringFfrench}[1]{% -\ifnum#1=1\relax -une% -\else\@@unitstringfrench{#1}% -\fi -} -% \end{macrocode} -% Tens (this includes the Belgian and Swiss variants, special -% cases employed lower down.) -% \begin{macrocode} -\newcommand*{\@@tenstringfrench}[1]{% -\ifcase#1\relax -\or dix% -\or vingt% -\or trente% -\or quarante% -\or cinquante% -\or soixante% -\or septente% -\or huitante% -\or nonente% -\or cent% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand*{\@@teenstringfrench}[1]{% -\ifcase#1\relax -dix% -\or onze% -\or douze% -\or treize% -\or quatorze% -\or quinze% -\or seize% -\or dix-sept% -\or dix-huit% -\or dix-neuf% -\fi -} -% \end{macrocode} -% Seventies are a special case, depending on dialect: -% \begin{macrocode} -\newcommand*{\@@seventiesfrench}[1]{% -\@tenstring{6}% -\ifnum#1=1\relax -\ \@andname\ -\else --% -\fi -\@teenstring{#1}% -} -% \end{macrocode} -% Eighties are a special case, depending on dialect: -% \begin{macrocode} -\newcommand*{\@@eightiesfrench}[1]{% -\@unitstring{4}-\@tenstring{2}% -\ifnum#1>0 --\@unitstring{#1}% -\else -s% -\fi -} -% \end{macrocode} -% Nineties are a special case, depending on dialect: -% \begin{macrocode} -\newcommand*{\@@ninetiesfrench}[1]{% -\@unitstring{4}-\@tenstring{2}-\@teenstring{#1}% -} -% \end{macrocode} -% Swiss seventies: -% \begin{macrocode} -\newcommand*{\@@seventiesfrenchswiss}[1]{% -\@tenstring{7}% -\ifnum#1=1\ \@andname\ \fi -\ifnum#1>1-\fi -\ifnum#1>0\@unitstring{#1}\fi -} -% \end{macrocode} -% Swiss eighties: -% \begin{macrocode} -\newcommand*{\@@eightiesfrenchswiss}[1]{% -\@tenstring{8}% -\ifnum#1=1\ \@andname\ \fi -\ifnum#1>1-\fi -\ifnum#1>0\@unitstring{#1}\fi -} -% \end{macrocode} -% Swiss nineties: -% \begin{macrocode} -\newcommand*{\@@ninetiesfrenchswiss}[1]{% -\@tenstring{9}% -\ifnum#1=1\ \@andname\ \fi -\ifnum#1>1-\fi -\ifnum#1>0\@unitstring{#1}\fi -} -% \end{macrocode} -% Units with initial letter in upper case: -% \begin{macrocode} -\newcommand*{\@@Unitstringfrench}[1]{% -\ifcase#1\relax -Zero% -\or Un% -\or Deux% -\or Trois% -\or Quatre% -\or Cinq% -\or Six% -\or Sept% -\or Huit% -\or Neuf% -\fi -} -% \end{macrocode} -% As above, but feminine: -% \begin{macrocode} -\newcommand*{\@@UnitstringFfrench}[1]{% -\ifnum#1=1\relax -Une% -\else \@@Unitstringfrench{#1}% -\fi -} -% \end{macrocode} -% Tens, with initial letter in upper case (includes Swiss and -% Belgian variants): -% \begin{macrocode} -\newcommand*{\@@Tenstringfrench}[1]{% -\ifcase#1\relax -\or Dix% -\or Vingt% -\or Trente% -\or Quarante% -\or Cinquante% -\or Soixante% -\or Septente% -\or Huitante% -\or Nonente% -\or Cent% -\fi -} -% \end{macrocode} -% Teens, with initial letter in upper case: -% \begin{macrocode} -\newcommand*{\@@Teenstringfrench}[1]{% -\ifcase#1\relax -Dix% -\or Onze% -\or Douze% -\or Treize% -\or Quatorze% -\or Quinze% -\or Seize% -\or Dix-Sept% -\or Dix-Huit% -\or Dix-Neuf% -\fi -} -% \end{macrocode} -% This has changed in version 1.09, so that it now stores the -% result in the second argument, but doesn't display anything. -% Since it only affects internal macros, it shouldn't affect -% documents created with older versions. (These internal macros -% are not defined for use in documents.) Firstly, the Swiss -% version: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMfrenchswiss}[2]{% -\let\@unitstring=\@@unitstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Same as above, but for French as spoken in France: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMfrenchfrance}[2]{% -\let\@unitstring=\@@unitstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Same as above, but for Belgian dialect: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMfrenchbelgian}[2]{% -\let\@unitstring=\@@unitstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Set default dialect: -% \begin{macrocode} -\let\@numberstringMfrench=\@numberstringMfrenchfrance -% \end{macrocode} -% As above, but for feminine version. Swiss: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringFfrenchswiss}[2]{% -\let\@unitstring=\@@unitstringFfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% French: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringFfrenchfrance}[2]{% -\let\@unitstring=\@@unitstringFfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Belgian: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringFfrenchbelgian}[2]{% -\let\@unitstring=\@@unitstringFfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{cent}\def\@thousand{mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Set default dialect: -% \begin{macrocode} -\let\@numberstringFfrench=\@numberstringFfrenchfrance -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalstringNfrench\@ordinalstringMfrench -% \end{macrocode} -% As above, but with initial letter in upper case. Swiss (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMfrenchswiss}[2]{% -\let\@unitstring=\@@Unitstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% French: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMfrenchfrance}[2]{% -\let\@unitstring=\@@Unitstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Belgian: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMfrenchbelgian}[2]{% -\let\@unitstring=\@@Unitstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Set default dialect: -% \begin{macrocode} -\let\@NumberstringMfrench=\@NumberstringMfrenchfrance -% \end{macrocode} -% As above, but feminine. Swiss: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFfrenchswiss}[2]{% -\let\@unitstring=\@@UnitstringFfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% French (feminine): -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFfrenchfrance}[2]{% -\let\@unitstring=\@@UnitstringFfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Belgian (feminine): -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFfrenchbelgian}[2]{% -\let\@unitstring=\@@UnitstringFfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\def\@hundred{Cent}\def\@thousand{Mille}% -\def\@andname{et}% -\@@numberstringfrench{#1}{#2}} -% \end{macrocode} -% Set default dialect: -% \begin{macrocode} -\let\@NumberstringFfrench=\@NumberstringFfrenchfrance -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@NumberstringNfrench\@NumberstringMfrench -% \end{macrocode} -% Again, as from version 1.09, this has been changed to take -% two arguments, where the second argument is a control -% sequence, and nothing is displayed. Store textual representation -% of an ordinal in the given control sequence. Swiss dialect (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{premier}% -\else -\let\@unitthstring=\@@unitthstringfrench -\let\@unitstring=\@@unitstringfrench -\let\@teenthstring=\@@teenthstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenthstring=\@@tenthstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrenchswiss -\let\@ninetieths=\@@ninetiethsfrenchswiss -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundredth{centi\`eme}\def\@hundred{cent}% -\def\@thousandth{mili\`eme}\def\@thousand{mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% French (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{premier}% -\else -\let\@unitthstring=\@@unitthstringfrench -\let\@unitstring=\@@unitstringfrench -\let\@teenthstring=\@@teenthstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenthstring=\@@tenthstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventieths=\@@seventiethsfrench -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@teenstringfrench -\def\@hundredth{centi\`eme}\def\@hundred{cent}% -\def\@thousandth{mili\`eme}\def\@thousand{mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Belgian dialect (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{premier}% -\else -\let\@unitthstring=\@@unitthstringfrench -\let\@unitstring=\@@unitstringfrench -\let\@teenthstring=\@@teenthstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenthstring=\@@tenthstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrenchswiss -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@teenstringfrench -\def\@hundredth{centi\`eme}\def\@hundred{cent}% -\def\@thousandth{mili\`eme}\def\@thousand{mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Set up default dialect: -% \begin{macrocode} -\let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance -% \end{macrocode} -% As above, but feminine. Swiss: -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{premi\`ere}% -\else -\let\@unitthstring=\@@unitthstringfrench -\let\@unitstring=\@@unitstringFfrench -\let\@teenthstring=\@@teenthstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenthstring=\@@tenthstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrenchswiss -\let\@ninetieths=\@@ninetiethsfrenchswiss -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundredth{centi\`eme}\def\@hundred{cent}% -\def\@thousandth{mili\`eme}\def\@thousand{mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% French (feminine): -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{premi\`ere}% -\else -\let\@unitthstring=\@@unitthstringfrench -\let\@unitstring=\@@unitstringFfrench -\let\@teenthstring=\@@teenthstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenthstring=\@@tenthstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventieths=\@@seventiethsfrench -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@teenstringfrench -\def\@hundredth{centi\`eme}\def\@hundred{cent}% -\def\@thousandth{mili\`eme}\def\@thousand{mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Belgian (feminine): -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{premi\`ere}% -\else -\let\@unitthstring=\@@unitthstringfrench -\let\@unitstring=\@@unitstringFfrench -\let\@teenthstring=\@@teenthstringfrench -\let\@teenstring=\@@teenstringfrench -\let\@tenthstring=\@@tenthstringfrench -\let\@tenstring=\@@tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@teenstringfrench -\def\@hundredth{centi\`eme}\def\@hundred{cent}% -\def\@thousandth{mili\`eme}\def\@thousand{mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Set up default dialect: -% \begin{macrocode} -\let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalstringNfrench\@ordinalstringMfrench -% \end{macrocode} -% As above, but with initial letters in upper case. Swiss (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{Premi\`ere}% -\else -\let\@unitthstring=\@@Unitthstringfrench -\let\@unitstring=\@@Unitstringfrench -\let\@teenthstring=\@@Teenthstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenthstring=\@@Tenthstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrenchswiss -\let\@ninetieths=\@@ninetiethsfrenchswiss -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundredth{Centi\`eme}\def\@hundred{Cent}% -\def\@thousandth{Mili\`eme}\def\@thousand{Mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% French (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{Premi\`ere}% -\else -\let\@unitthstring=\@@Unitthstringfrench -\let\@unitstring=\@@Unitstringfrench -\let\@teenthstring=\@@Teenthstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenthstring=\@@Tenthstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventieths=\@@seventiethsfrench -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@Teenstringfrench -\def\@hundredth{Centi\`eme}\def\@hundred{Cent}% -\def\@thousandth{Mili\`eme}\def\@thousand{Mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Belgian (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{Premi\`ere}% -\else -\let\@unitthstring=\@@Unitthstringfrench -\let\@unitstring=\@@Unitstringfrench -\let\@teenthstring=\@@Teenthstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenthstring=\@@Tenthstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@Teenstringfrench -\def\@hundredth{Centi\`eme}\def\@hundred{Cent}% -\def\@thousandth{Mili\`eme}\def\@thousand{Mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Set up default dialect: -% \begin{macrocode} -\let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance -% \end{macrocode} -% As above, but feminine form. Swiss: -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFfrenchswiss}[2]{% -\ifnum#1=1\relax -\def#2{Premi\`ere}% -\else -\let\@unitthstring=\@@Unitthstringfrench -\let\@unitstring=\@@UnitstringFfrench -\let\@teenthstring=\@@Teenthstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenthstring=\@@Tenthstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrenchswiss -\let\@ninetieths=\@@ninetiethsfrenchswiss -\let\@seventies=\@@seventiesfrenchswiss -\let\@eighties=\@@eightiesfrenchswiss -\let\@nineties=\@@ninetiesfrenchswiss -\def\@hundredth{Centi\`eme}\def\@hundred{Cent}% -\def\@thousandth{Mili\`eme}\def\@thousand{Mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% French (feminine): -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFfrenchfrance}[2]{% -\ifnum#1=1\relax -\def#2{Premi\`ere}% -\else -\let\@unitthstring=\@@Unitthstringfrench -\let\@unitstring=\@@UnitstringFfrench -\let\@teenthstring=\@@Teenthstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenthstring=\@@Tenthstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventieths=\@@seventiethsfrench -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@Teenstringfrench -\def\@hundredth{Centi\`eme}\def\@hundred{Cent}% -\def\@thousandth{Mili\`eme}\def\@thousand{Mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Belgian (feminine): -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFfrenchbelgian}[2]{% -\ifnum#1=1\relax -\def#2{Premi\`ere}% -\else -\let\@unitthstring=\@@Unitthstringfrench -\let\@unitstring=\@@UnitstringFfrench -\let\@teenthstring=\@@Teenthstringfrench -\let\@teenstring=\@@Teenstringfrench -\let\@tenthstring=\@@Tenthstringfrench -\let\@tenstring=\@@Tenstringfrench -\let\@seventieths=\@@seventiethsfrenchswiss -\let\@eightieths=\@@eightiethsfrench -\let\@ninetieths=\@@ninetiethsfrench -\let\@seventies=\@@seventiesfrench -\let\@eighties=\@@eightiesfrench -\let\@nineties=\@@ninetiesfrench -\let\@teenstring=\@@Teenstringfrench -\def\@hundredth{Centi\`eme}\def\@hundred{Cent}% -\def\@thousandth{Mili\`eme}\def\@thousand{Mille}% -\def\@andname{et}% -\@@ordinalstringfrench{#1}{#2}% -\fi} -% \end{macrocode} -% Set up default dialect: -% \begin{macrocode} -\let\@OrdinalstringFfrench=\@OrdinalstringFfrenchfrance -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@OrdinalstringNfrench\@OrdinalstringMfrench -% \end{macrocode} -% In order to convert numbers into textual ordinals, need -% to break it up into units, tens and teens. First the units. -% The argument must be a number or count register between 0 -% and 9. -% \begin{macrocode} -\newcommand*{\@@unitthstringfrench}[1]{% -\ifcase#1\relax -zero% -\or uni\`eme% -\or deuxi\`eme% -\or troisi\`eme% -\or quatri\`eme% -\or cinqui\`eme% -\or sixi\`eme% -\or septi\`eme% -\or huiti\`eme% -\or neuvi\`eme% -\fi -} -% \end{macrocode} -% Tens (includes Swiss and Belgian variants, special cases are -% dealt with later.) -% \begin{macrocode} -\newcommand*{\@@tenthstringfrench}[1]{% -\ifcase#1\relax -\or dixi\`eme% -\or vingti\`eme% -\or trentri\`eme% -\or quaranti\`eme% -\or cinquanti\`eme% -\or soixanti\`eme% -\or septenti\`eme% -\or huitanti\`eme% -\or nonenti\`eme% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand*{\@@teenthstringfrench}[1]{% -\ifcase#1\relax -dixi\`eme% -\or onzi\`eme% -\or douzi\`eme% -\or treizi\`eme% -\or quatorzi\`eme% -\or quinzi\`eme% -\or seizi\`eme% -\or dix-septi\`eme% -\or dix-huiti\`eme% -\or dix-neuvi\`eme% -\fi -} -% \end{macrocode} -% Seventies vary depending on dialect. Swiss: -% \begin{macrocode} -\newcommand*{\@@seventiethsfrenchswiss}[1]{% -\ifcase#1\relax -\@tenthstring{7}% -\or -\@tenstring{7} \@andname\ \@unitthstring{1}% -\else -\@tenstring{7}-\@unitthstring{#1}% -\fi} -% \end{macrocode} -% Eighties vary depending on dialect. Swiss: -% \begin{macrocode} -\newcommand*{\@@eightiethsfrenchswiss}[1]{% -\ifcase#1\relax -\@tenthstring{8}% -\or -\@tenstring{8} \@andname\ \@unitthstring{1}% -\else -\@tenstring{8}-\@unitthstring{#1}% -\fi} -% \end{macrocode} -% Nineties vary depending on dialect. Swiss: -% \begin{macrocode} -\newcommand*{\@@ninetiethsfrenchswiss}[1]{% -\ifcase#1\relax -\@tenthstring{9}% -\or -\@tenstring{9} \@andname\ \@unitthstring{1}% -\else -\@tenstring{9}-\@unitthstring{#1}% -\fi} -% \end{macrocode} -% French (as spoken in France) version: -% \begin{macrocode} -\newcommand*{\@@seventiethsfrench}[1]{% -\ifnum#1=0\relax -\@tenstring{6}% --% -\else -\@tenstring{6}% -\ \@andname\ -\fi -\@teenthstring{#1}% -} -% \end{macrocode} -% Eighties (as spoken in France): -% \begin{macrocode} -\newcommand*{\@@eightiethsfrench}[1]{% -\ifnum#1>0\relax -\@unitstring{4}-\@tenstring{2}% --\@unitthstring{#1}% -\else -\@unitstring{4}-\@tenthstring{2}% -\fi -} -% \end{macrocode} -% Nineties (as spoken in France): -% \begin{macrocode} -\newcommand*{\@@ninetiethsfrench}[1]{% -\@unitstring{4}-\@tenstring{2}-\@teenthstring{#1}% -} -% \end{macrocode} -% As above, but with initial letter in upper case. Units: -% \begin{macrocode} -\newcommand*{\@@Unitthstringfrench}[1]{% -\ifcase#1\relax -Zero% -\or Uni\`eme% -\or Deuxi\`eme% -\or Troisi\`eme% -\or Quatri\`eme% -\or Cinqui\`eme% -\or Sixi\`eme% -\or Septi\`eme% -\or Huiti\`eme% -\or Neuvi\`eme% -\fi -} -% \end{macrocode} -% Tens (includes Belgian and Swiss variants): -% \begin{macrocode} -\newcommand*{\@@Tenthstringfrench}[1]{% -\ifcase#1\relax -\or Dixi\`eme% -\or Vingti\`eme% -\or Trentri\`eme% -\or Quaranti\`eme% -\or Cinquanti\`eme% -\or Soixanti\`eme% -\or Septenti\`eme% -\or Huitanti\`eme% -\or Nonenti\`eme% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand*{\@@Teenthstringfrench}[1]{% -\ifcase#1\relax -Dixi\`eme% -\or Onzi\`eme% -\or Douzi\`eme% -\or Treizi\`eme% -\or Quatorzi\`eme% -\or Quinzi\`eme% -\or Seizi\`eme% -\or Dix-Septi\`eme% -\or Dix-Huiti\`eme% -\or Dix-Neuvi\`eme% -\fi -} -% \end{macrocode} -% Store textual representation of number (first argument) in given control -% sequence (second argument). -% \begin{macrocode} -\newcommand*{\@@numberstringfrench}[2]{% -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9\relax -% #1 is greater or equal to 10000 - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \ifnum\@strctr>1\relax - \ifthenelse{\(\@strctr>6\)\and\(\@strctr<10\)}{% - \@modulo{\@tmpstrctr}{10}% - \ifnum\@strctr<8\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@seventies{\@tmpstrctr}}% - \else - \ifnum\@strctr<9\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@eighties{\@tmpstrctr}}% - \else - \ifnum\@strctr<10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@nineties{\@tmpstrctr}}% - \fi - \fi - \fi - }{% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@unitstring{\@strctr}}% - \fi - }% - \else - \@strctr=#1\relax - \divide\@strctr by 1000 - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@thousand}% -\else - \ifnum\@strctr>0\relax - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@thousand}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100 -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \fi - \@tmpstrctr=#1\relax - \@modulo{\@tmpstrctr}{1000}\relax - \ifnum\@tmpstrctr=100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{10}}% - \else - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@hundred}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{100}% -%\@tmpstrctr=#1\relax -%\divide\@tmpstrctr by 100\relax -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \else - \ifnum\@tmpstrctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr s}% - \fi% - \fi -\fi -\ifnum\@strctr>19\relax - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \ifthenelse{\@strctr>6}{% - \@modulo{\@tmpstrctr}{10}% - \ifnum\@strctr<8\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@seventies{\@tmpstrctr}}% - \else - \ifnum\@strctr<9\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@eighties{\@tmpstrctr}}% - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@nineties{\@tmpstrctr}}% - \fi - \fi - }{% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \ifnum\@strctr=1\relax - \edef#2{\@@fc@numstr\ \@andname\ }% - \else - \edef#2{\@@fc@numstr-}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - }% -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else%(>0,<10) - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else%>10 - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi -\fi -} -% \end{macrocode} -% Store textual representation of an ordinal (from number -% specified in first argument) in given control -% sequence (second argument). -% \begin{macrocode} -\newcommand*{\@@ordinalstringfrench}[2]{% -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9 -% #1 is greater or equal to 10000 - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \ifnum\@strctr>1\relax - \ifthenelse{\@strctr>6}{% - \@modulo{\@tmpstrctr}{10}% - \ifnum\@strctr=7\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@seventies{\@tmpstrctr}}% - \else - \ifnum\@strctr=8\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@eighties{\@tmpstrctr}}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@nineties{\@tmpstrctr}}% - \fi - \fi - }{% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}% - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr=1\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname}% - \fi - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@unitstring{\@strctr}}% - \fi - }% - \else - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenstring{\@strctr}}% - \fi - \@strctr=#1\relax \@modulo{\@strctr}{1000}% - \ifnum\@strctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousandth}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousand}% - \fi -\else - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{1000}% - \ifnum\@strctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousandth}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@thousand}% - \fi - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100\relax -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ }% - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{100}% - \let\@@fc@ordstr#2\relax - \ifnum\@strctr=0\relax - \edef#2{\@@fc@ordstr\ \@hundredth}% - \else - \edef#2{\@@fc@ordstr\ \@hundred}% - \fi -\fi -\@tmpstrctr=\@strctr -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname\ }% - \fi -\fi -\ifnum\@strctr>19\relax - \@tmpstrctr=\@strctr - \divide\@strctr by 10\relax - \@modulo{\@tmpstrctr}{10}% - \ifthenelse{\@strctr>6}{% - \ifnum\@strctr=7\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@seventieths{\@tmpstrctr}}% - \else - \ifnum\@strctr=8\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@eightieths{\@tmpstrctr}}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@ninetieths{\@tmpstrctr}}% - \fi - \fi - }{% - \ifnum\@tmpstrctr=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@strctr}}% - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenstring{\@strctr}}% - \fi - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr=1\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@andname}% - \fi - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@unitthstring{\@strctr}}% - \fi - }% -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi - \else - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}% - \fi -\fi -} -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-german.def> -% \end{macrocode} -%\fi -% \subsection{fc-german.def} -% German definitions (thank you to K. H. Fricke for supplying -% this information) -% \begin{macrocode} -\ProvidesFile{fc-german.def}[2007/06/14] -% \end{macrocode} -% Define macro that converts a number or count register (first -% argument) to an ordinal, and stores the result in the -% second argument, which must be a control sequence. -% Masculine: -% \begin{macrocode} -\newcommand{\@ordinalMgerman}[2]{% -\edef#2{\number#1\relax.}} -% \end{macrocode} -% Feminine: -% \begin{macrocode} -\newcommand{\@ordinalFgerman}[2]{% -\edef#2{\number#1\relax.}} -% \end{macrocode} -% Neuter: -% \begin{macrocode} -\newcommand{\@ordinalNgerman}[2]{% -\edef#2{\number#1\relax.}} -% \end{macrocode} -% Convert a number to text. The easiest way to do this is to -% break it up into units, tens and teens. -% Units (argument must be a number from 0 to 9, 1 on its own (eins) -% is dealt with separately): -% \begin{macrocode} -\newcommand{\@@unitstringgerman}[1]{% -\ifcase#1% -null% -\or ein% -\or zwei% -\or drei% -\or vier% -\or f\"unf% -\or sechs% -\or sieben% -\or acht% -\or neun% -\fi -} -% \end{macrocode} -% Tens (argument must go from 1 to 10): -% \begin{macrocode} -\newcommand{\@@tenstringgerman}[1]{% -\ifcase#1% -\or zehn% -\or zwanzig% -\or drei{\ss}ig% -\or vierzig% -\or f\"unfzig% -\or sechzig% -\or siebzig% -\or achtzig% -\or neunzig% -\or einhundert% -\fi -} -% \end{macrocode} -% |\einhundert| is set to |einhundert| by default, user can -% redefine this command to just |hundert| if required, similarly -% for |\eintausend|. -% \begin{macrocode} -\providecommand*{\einhundert}{einhundert} -\providecommand*{\eintausend}{eintausend} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand{\@@teenstringgerman}[1]{% -\ifcase#1% -zehn% -\or elf% -\or zw\"olf% -\or dreizehn% -\or vierzehn% -\or f\"unfzehn% -\or sechzehn% -\or siebzehn% -\or achtzehn% -\or neunzehn% -\fi -} -% \end{macrocode} -% The results are stored in the second argument, but doesn't -% display anything. -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMgerman}[2]{% -\let\@unitstring=\@@unitstringgerman -\let\@teenstring=\@@teenstringgerman -\let\@tenstring=\@@tenstringgerman -\@@numberstringgerman{#1}{#2}} -% \end{macrocode} -% Feminine and neuter forms: -% \begin{macrocode} -\let\@numberstringFgerman=\@numberstringMgerman -\let\@numberstringNgerman=\@numberstringMgerman -% \end{macrocode} -% As above, but initial letters in upper case: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMgerman}[2]{% -\@numberstringMgerman{#1}{\@@num@str}% -\edef#2{\noexpand\MakeUppercase\@@num@str}} -% \end{macrocode} -% Feminine and neuter form: -% \begin{macrocode} -\let\@NumberstringFgerman=\@NumberstringMgerman -\let\@NumberstringNgerman=\@NumberstringMgerman -% \end{macrocode} -% As above, but for ordinals. -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMgerman}[2]{% -\let\@unitthstring=\@@unitthstringMgerman -\let\@teenthstring=\@@teenthstringMgerman -\let\@tenthstring=\@@tenthstringMgerman -\let\@unitstring=\@@unitstringgerman -\let\@teenstring=\@@teenstringgerman -\let\@tenstring=\@@tenstringgerman -\def\@thousandth{tausendster}% -\def\@hundredth{hundertster}% -\@@ordinalstringgerman{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFgerman}[2]{% -\let\@unitthstring=\@@unitthstringFgerman -\let\@teenthstring=\@@teenthstringFgerman -\let\@tenthstring=\@@tenthstringFgerman -\let\@unitstring=\@@unitstringgerman -\let\@teenstring=\@@teenstringgerman -\let\@tenstring=\@@tenstringgerman -\def\@thousandth{tausendste}% -\def\@hundredth{hundertste}% -\@@ordinalstringgerman{#1}{#2}} -% \end{macrocode} -% Neuter form: -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringNgerman}[2]{% -\let\@unitthstring=\@@unitthstringNgerman -\let\@teenthstring=\@@teenthstringNgerman -\let\@tenthstring=\@@tenthstringNgerman -\let\@unitstring=\@@unitstringgerman -\let\@teenstring=\@@teenstringgerman -\let\@tenstring=\@@tenstringgerman -\def\@thousandth{tausendstes}% -\def\@hundredth{hunderstes}% -\@@ordinalstringgerman{#1}{#2}} -% \end{macrocode} -% As above, but with initial letters in upper case. -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMgerman}[2]{% -\@ordinalstringMgerman{#1}{\@@num@str}% -\edef#2{\protect\MakeUppercase\@@num@str}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFgerman}[2]{% -\@ordinalstringFgerman{#1}{\@@num@str}% -\edef#2{\protect\MakeUppercase\@@num@str}} -% \end{macrocode} -% Neuter form: -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringNgerman}[2]{% -\@ordinalstringNgerman{#1}{\@@num@str}% -\edef#2{\protect\MakeUppercase\@@num@str}} -% \end{macrocode} -% Code for converting numbers into textual ordinals. As before, -% it is easier to split it into units, tens and teens. -% Units: -% \begin{macrocode} -\newcommand{\@@unitthstringMgerman}[1]{% -\ifcase#1% -nullter% -\or erster% -\or zweiter% -\or dritter% -\or vierter% -\or f\"unter% -\or sechster% -\or siebter% -\or achter% -\or neunter% -\fi -} -% \end{macrocode} -% Tens: -% \begin{macrocode} -\newcommand{\@@tenthstringMgerman}[1]{% -\ifcase#1% -\or zehnter% -\or zwanzigster% -\or drei{\ss}igster% -\or vierzigster% -\or f\"unfzigster% -\or sechzigster% -\or siebzigster% -\or achtzigster% -\or neunzigster% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand{\@@teenthstringMgerman}[1]{% -\ifcase#1% -zehnter% -\or elfter% -\or zw\"olfter% -\or dreizehnter% -\or vierzehnter% -\or f\"unfzehnter% -\or sechzehnter% -\or siebzehnter% -\or achtzehnter% -\or neunzehnter% -\fi -} -% \end{macrocode} -% Units (feminine): -% \begin{macrocode} -\newcommand{\@@unitthstringFgerman}[1]{% -\ifcase#1% -nullte% -\or erste% -\or zweite% -\or dritte% -\or vierte% -\or f\"unfte% -\or sechste% -\or siebte% -\or achte% -\or neunte% -\fi -} -% \end{macrocode} -% Tens (feminine): -% \begin{macrocode} -\newcommand{\@@tenthstringFgerman}[1]{% -\ifcase#1% -\or zehnte% -\or zwanzigste% -\or drei{\ss}igste% -\or vierzigste% -\or f\"unfzigste% -\or sechzigste% -\or siebzigste% -\or achtzigste% -\or neunzigste% -\fi -} -% \end{macrocode} -% Teens (feminine) -% \begin{macrocode} -\newcommand{\@@teenthstringFgerman}[1]{% -\ifcase#1% -zehnte% -\or elfte% -\or zw\"olfte% -\or dreizehnte% -\or vierzehnte% -\or f\"unfzehnte% -\or sechzehnte% -\or siebzehnte% -\or achtzehnte% -\or neunzehnte% -\fi -} -% \end{macrocode} -% Units (neuter): -% \begin{macrocode} -\newcommand{\@@unitthstringNgerman}[1]{% -\ifcase#1% -nulltes% -\or erstes% -\or zweites% -\or drittes% -\or viertes% -\or f\"unte% -\or sechstes% -\or siebtes% -\or achtes% -\or neuntes% -\fi -} -% \end{macrocode} -% Tens (neuter): -% \begin{macrocode} -\newcommand{\@@tenthstringNgerman}[1]{% -\ifcase#1% -\or zehntes% -\or zwanzigstes% -\or drei{\ss}igstes% -\or vierzigstes% -\or f\"unfzigstes% -\or sechzigstes% -\or siebzigstes% -\or achtzigstes% -\or neunzigstes% -\fi -} -% \end{macrocode} -% Teens (neuter) -% \begin{macrocode} -\newcommand{\@@teenthstringNgerman}[1]{% -\ifcase#1% -zehntes% -\or elftes% -\or zw\"olftes% -\or dreizehntes% -\or vierzehntes% -\or f\"unfzehntes% -\or sechzehntes% -\or siebzehntes% -\or achtzehntes% -\or neunzehntes% -\fi -} -% \end{macrocode} -% This appends the results to |#2| for number |#2| (in range 0 to 100.) -% null and eins are dealt with separately in |\@@numberstringgerman|. -% \begin{macrocode} -\newcommand{\@@numberunderhundredgerman}[2]{% -\ifnum#1<10\relax - \ifnum#1>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{#1}}% - \fi -\else - \@tmpstrctr=#1\relax - \@modulo{\@tmpstrctr}{10}% - \ifnum#1<20\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@tmpstrctr}}% - \else - \ifnum\@tmpstrctr=0\relax - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@tmpstrctr}und}% - \fi - \@tmpstrctr=#1\relax - \divide\@tmpstrctr by 10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@tmpstrctr}}% - \fi -\fi -} -% \end{macrocode} -% This stores the results in the second argument -% (which must be a control -% sequence), but it doesn't display anything. -% \begin{macrocode} -\newcommand{\@@numberstringgerman}[2]{% -\ifnum#1>99999\relax - \PackageError{fmtcount}{Out of range}% - {This macro only works for values less than 100000}% -\else - \ifnum#1<0\relax - \PackageError{fmtcount}{Negative numbers not permitted}% - {This macro does not work for negative numbers, however - you can try typing "minus" first, and then pass the modulus of - this number}% - \fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>1\relax -% #1 is >= 2000, \@strctr now contains the number of thousands -\@@numberunderhundredgerman{\@strctr}{#2}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr tausend}% -\else -% #1 lies in range [1000,1999] - \ifnum\@strctr=1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\eintausend}% - \fi -\fi -\@strctr=#1\relax -\@modulo{\@strctr}{1000}% -\divide\@strctr by 100\relax -\ifnum\@strctr>1\relax -% now dealing with number in range [200,999] - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}hundert}% -\else - \ifnum\@strctr=1\relax -% dealing with number in range [100,199] - \ifnum#1>1000\relax -% if orginal number > 1000, use einhundert - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr einhundert}% - \else -% otherwise use \einhundert - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\einhundert}% - \fi - \fi -\fi -\@strctr=#1\relax -\@modulo{\@strctr}{100}% -\ifnum#1=0\relax - \def#2{null}% -\else - \ifnum\@strctr=1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr eins}% - \else - \@@numberunderhundredgerman{\@strctr}{#2}% - \fi -\fi -} -% \end{macrocode} -% As above, but for ordinals -% \begin{macrocode} -\newcommand{\@@numberunderhundredthgerman}[2]{% -\ifnum#1<10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitthstring{#1}}% -\else - \@tmpstrctr=#1\relax - \@modulo{\@tmpstrctr}{10}% - \ifnum#1<20\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenthstring{\@tmpstrctr}}% - \else - \ifnum\@tmpstrctr=0\relax - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@tmpstrctr}und}% - \fi - \@tmpstrctr=#1\relax - \divide\@tmpstrctr by 10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenthstring{\@tmpstrctr}}% - \fi -\fi -} -% \end{macrocode} -% \begin{macrocode} -\newcommand{\@@ordinalstringgerman}[2]{% -\ifnum#1>99999\relax - \PackageError{fmtcount}{Out of range}% - {This macro only works for values less than 100000}% -\else - \ifnum#1<0\relax - \PackageError{fmtcount}{Negative numbers not permitted}% - {This macro does not work for negative numbers, however - you can try typing "minus" first, and then pass the modulus of - this number}% - \fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>1\relax -% #1 is >= 2000, \@strctr now contains the number of thousands -\@@numberunderhundredgerman{\@strctr}{#2}% - \let\@@fc@numstr#2\relax - % is that it, or is there more? - \@tmpstrctr=#1\relax \@modulo{\@tmpstrctr}{1000}% - \ifnum\@tmpstrctr=0\relax - \edef#2{\@@fc@numstr\@thousandth}% - \else - \edef#2{\@@fc@numstr tausend}% - \fi -\else -% #1 lies in range [1000,1999] - \ifnum\@strctr=1\relax - \ifnum#1=1000\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@thousandth}% - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\eintausend}% - \fi - \fi -\fi -\@strctr=#1\relax -\@modulo{\@strctr}{1000}% -\divide\@strctr by 100\relax -\ifnum\@strctr>1\relax -% now dealing with number in range [200,999] - \let\@@fc@numstr#2\relax - % is that it, or is there more? - \@tmpstrctr=#1\relax \@modulo{\@tmpstrctr}{100}% - \ifnum\@tmpstrctr=0\relax - \ifnum\@strctr=1\relax - \edef#2{\@@fc@numstr\@hundredth}% - \else - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\@hundredth}% - \fi - \else - \edef#2{\@@fc@numstr\@unitstring{\@strctr}hundert}% - \fi -\else - \ifnum\@strctr=1\relax -% dealing with number in range [100,199] -% is that it, or is there more? - \@tmpstrctr=#1\relax \@modulo{\@tmpstrctr}{100}% - \ifnum\@tmpstrctr=0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@hundredth}% - \else - \ifnum#1>1000\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr einhundert}% - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\einhundert}% - \fi - \fi - \fi -\fi -\@strctr=#1\relax -\@modulo{\@strctr}{100}% -\ifthenelse{\@strctr=0 \and #1>0}{}{% -\@@numberunderhundredthgerman{\@strctr}{#2}% -}% -} -% \end{macrocode} -% Set |ngerman| to be equivalent to |german|. Is it okay to do -% this? (I don't know the difference between the two.) -% \begin{macrocode} -\let\@ordinalMngerman=\@ordinalMgerman -\let\@ordinalFngerman=\@ordinalFgerman -\let\@ordinalNngerman=\@ordinalNgerman -\let\@numberstringMngerman=\@numberstringMgerman -\let\@numberstringFngerman=\@numberstringFgerman -\let\@numberstringNngerman=\@numberstringNgerman -\let\@NumberstringMngerman=\@NumberstringMgerman -\let\@NumberstringFngerman=\@NumberstringFgerman -\let\@NumberstringNngerman=\@NumberstringNgerman -\let\@ordinalstringMngerman=\@ordinalstringMgerman -\let\@ordinalstringFngerman=\@ordinalstringFgerman -\let\@ordinalstringNngerman=\@ordinalstringNgerman -\let\@OrdinalstringMngerman=\@OrdinalstringMgerman -\let\@OrdinalstringFngerman=\@OrdinalstringFgerman -\let\@OrdinalstringNngerman=\@OrdinalstringNgerman -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-portuges.def> -% \end{macrocode} -%\fi -% \subsection{fc-portuges.def} -% Portuguse definitions -% \begin{macrocode} -\ProvidesFile{fc-portuges.def}[2007/05/26] -% \end{macrocode} -% Define macro that converts a number or count register (first -% argument) to an ordinal, and stores the result in the second -% argument, which should be a control sequence. Masculine: -% \begin{macrocode} -\newcommand*{\@ordinalMportuges}[2]{% -\ifnum#1=0\relax - \edef#2{\number#1}% -\else - \edef#2{\number#1\relax\noexpand\fmtord{o}}% -\fi} -% \end{macrocode} -% Feminine: -% \begin{macrocode} -\newcommand*{\@ordinalFportuges}[2]{% -\ifnum#1=0\relax - \edef#2{\number#1}% -\else - \edef#2{\number#1\relax\noexpand\fmtord{a}}% -\fi} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalNportuges\@ordinalMportuges -% \end{macrocode} -% Convert a number to a textual representation. To make it easier, -% split it up into units, tens, teens and hundreds. Units (argument must -% be a number from 0 to 9): -% \begin{macrocode} -\newcommand*{\@@unitstringportuges}[1]{% -\ifcase#1\relax -zero% -\or um% -\or dois% -\or tr\^es% -\or quatro% -\or cinco% -\or seis% -\or sete% -\or oito% -\or nove% -\fi -} -% \end{macrocode} -% As above, but for feminine: -% \begin{macrocode} -\newcommand*{\@@unitstringFportuges}[1]{% -\ifcase#1\relax -zero% -\or uma% -\or duas% -\or tr\^es% -\or quatro% -\or cinco% -\or seis% -\or sete% -\or oito% -\or nove% -\fi -} -% \end{macrocode} -% Tens (argument must be a number from 0 to 10): -% \begin{macrocode} -\newcommand*{\@@tenstringportuges}[1]{% -\ifcase#1\relax -\or dez% -\or vinte% -\or trinta% -\or quarenta% -\or cinq\"uenta% -\or sessenta% -\or setenta% -\or oitenta% -\or noventa% -\or cem% -\fi -} -% \end{macrocode} -% Teens (argument must be a number from 0 to 9): -% \begin{macrocode} -\newcommand*{\@@teenstringportuges}[1]{% -\ifcase#1\relax -dez% -\or onze% -\or doze% -\or treze% -\or quatorze% -\or quinze% -\or dezesseis% -\or dezessete% -\or dezoito% -\or dezenove% -\fi -} -% \end{macrocode} -% Hundreds: -% \begin{macrocode} -\newcommand*{\@@hundredstringportuges}[1]{% -\ifcase#1\relax -\or cento% -\or duzentos% -\or trezentos% -\or quatrocentos% -\or quinhentos% -\or seiscentos% -\or setecentos% -\or oitocentos% -\or novecentos% -\fi} -% \end{macrocode} -% Hundreds (feminine): -% \begin{macrocode} -\newcommand*{\@@hundredstringFportuges}[1]{% -\ifcase#1\relax -\or cento% -\or duzentas% -\or trezentas% -\or quatrocentas% -\or quinhentas% -\or seiscentas% -\or setecentas% -\or oitocentas% -\or novecentas% -\fi} -% \end{macrocode} -% Units (initial letter in upper case): -% \begin{macrocode} -\newcommand*{\@@Unitstringportuges}[1]{% -\ifcase#1\relax -Zero% -\or Um% -\or Dois% -\or Tr\^es% -\or Quatro% -\or Cinco% -\or Seis% -\or Sete% -\or Oito% -\or Nove% -\fi -} -% \end{macrocode} -% As above, but feminine: -% \begin{macrocode} -\newcommand*{\@@UnitstringFportuges}[1]{% -\ifcase#1\relax -Zera% -\or Uma% -\or Duas% -\or Tr\^es% -\or Quatro% -\or Cinco% -\or Seis% -\or Sete% -\or Oito% -\or Nove% -\fi -} -% \end{macrocode} -% Tens (with initial letter in upper case): -% \begin{macrocode} -\newcommand*{\@@Tenstringportuges}[1]{% -\ifcase#1\relax -\or Dez% -\or Vinte% -\or Trinta% -\or Quarenta% -\or Cinq\"uenta% -\or Sessenta% -\or Setenta% -\or Oitenta% -\or Noventa% -\or Cem% -\fi -} -% \end{macrocode} -% Teens (with initial letter in upper case): -% \begin{macrocode} -\newcommand*{\@@Teenstringportuges}[1]{% -\ifcase#1\relax -Dez% -\or Onze% -\or Doze% -\or Treze% -\or Quatorze% -\or Quinze% -\or Dezesseis% -\or Dezessete% -\or Dezoito% -\or Dezenove% -\fi -} -% \end{macrocode} -% Hundreds (with initial letter in upper case): -% \begin{macrocode} -\newcommand*{\@@Hundredstringportuges}[1]{% -\ifcase#1\relax -\or Cento% -\or Duzentos% -\or Trezentos% -\or Quatrocentos% -\or Quinhentos% -\or Seiscentos% -\or Setecentos% -\or Oitocentos% -\or Novecentos% -\fi} -% \end{macrocode} -% As above, but feminine: -% \begin{macrocode} -\newcommand*{\@@HundredstringFportuges}[1]{% -\ifcase#1\relax -\or Cento% -\or Duzentas% -\or Trezentas% -\or Quatrocentas% -\or Quinhentas% -\or Seiscentas% -\or Setecentas% -\or Oitocentas% -\or Novecentas% -\fi} -% \end{macrocode} -% This has changed in version 1.08, so that it now stores -% the result in the second argument, but doesn't display -% anything. Since it only affects internal macros, it shouldn't -% affect documents created with older versions. (These internal -% macros are not meant for use in documents.) -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMportuges}[2]{% -\let\@unitstring=\@@unitstringportuges -\let\@teenstring=\@@teenstringportuges -\let\@tenstring=\@@tenstringportuges -\let\@hundredstring=\@@hundredstringportuges -\def\@hundred{cem}\def\@thousand{mil}% -\def\@andname{e}% -\@@numberstringportuges{#1}{#2}} -% \end{macrocode} -% As above, but feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringFportuges}[2]{% -\let\@unitstring=\@@unitstringFportuges -\let\@teenstring=\@@teenstringportuges -\let\@tenstring=\@@tenstringportuges -\let\@hundredstring=\@@hundredstringFportuges -\def\@hundred{cem}\def\@thousand{mil}% -\def\@andname{e}% -\@@numberstringportuges{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@numberstringNportuges\@numberstringMportuges -% \end{macrocode} -% As above, but initial letters in upper case: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMportuges}[2]{% -\let\@unitstring=\@@Unitstringportuges -\let\@teenstring=\@@Teenstringportuges -\let\@tenstring=\@@Tenstringportuges -\let\@hundredstring=\@@Hundredstringportuges -\def\@hundred{Cem}\def\@thousand{Mil}% -\def\@andname{e}% -\@@numberstringportuges{#1}{#2}} -% \end{macrocode} -% As above, but feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFportuges}[2]{% -\let\@unitstring=\@@UnitstringFportuges -\let\@teenstring=\@@Teenstringportuges -\let\@tenstring=\@@Tenstringportuges -\let\@hundredstring=\@@HundredstringFportuges -\def\@hundred{Cem}\def\@thousand{Mil}% -\def\@andname{e}% -\@@numberstringportuges{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@NumberstringNportuges\@NumberstringMportuges -% \end{macrocode} -% As above, but for ordinals. -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMportuges}[2]{% -\let\@unitthstring=\@@unitthstringportuges -\let\@unitstring=\@@unitstringportuges -\let\@teenthstring=\@@teenthstringportuges -\let\@tenthstring=\@@tenthstringportuges -\let\@hundredthstring=\@@hundredthstringportuges -\def\@thousandth{mil\'esimo}% -\@@ordinalstringportuges{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFportuges}[2]{% -\let\@unitthstring=\@@unitthstringFportuges -\let\@unitstring=\@@unitstringFportuges -\let\@teenthstring=\@@teenthstringportuges -\let\@tenthstring=\@@tenthstringFportuges -\let\@hundredthstring=\@@hundredthstringFportuges -\def\@thousandth{mil\'esima}% -\@@ordinalstringportuges{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalstringNportuges\@ordinalstringMportuges -% \end{macrocode} -% As above, but initial letters in upper case (masculine): -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMportuges}[2]{% -\let\@unitthstring=\@@Unitthstringportuges -\let\@unitstring=\@@Unitstringportuges -\let\@teenthstring=\@@teenthstringportuges -\let\@tenthstring=\@@Tenthstringportuges -\let\@hundredthstring=\@@Hundredthstringportuges -\def\@thousandth{Mil\'esimo}% -\@@ordinalstringportuges{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFportuges}[2]{% -\let\@unitthstring=\@@UnitthstringFportuges -\let\@unitstring=\@@UnitstringFportuges -\let\@teenthstring=\@@teenthstringportuges -\let\@tenthstring=\@@TenthstringFportuges -\let\@hundredthstring=\@@HundredthstringFportuges -\def\@thousandth{Mil\'esima}% -\@@ordinalstringportuges{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@OrdinalstringNportuges\@OrdinalstringMportuges -% \end{macrocode} -% In order to do the ordinals, split into units, teens, tens -% and hundreds. Units: -% \begin{macrocode} -\newcommand*{\@@unitthstringportuges}[1]{% -\ifcase#1\relax -zero% -\or primeiro% -\or segundo% -\or terceiro% -\or quarto% -\or quinto% -\or sexto% -\or s\'etimo% -\or oitavo% -\or nono% -\fi -} -% \end{macrocode} -% Tens: -% \begin{macrocode} -\newcommand*{\@@tenthstringportuges}[1]{% -\ifcase#1\relax -\or d\'ecimo% -\or vig\'esimo% -\or trig\'esimo% -\or quadrag\'esimo% -\or q\"uinquag\'esimo% -\or sexag\'esimo% -\or setuag\'esimo% -\or octog\'esimo% -\or nonag\'esimo% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand*{\@@teenthstringportuges}[1]{% -\@tenthstring{1}% -\ifnum#1>0\relax --\@unitthstring{#1}% -\fi} -% \end{macrocode} -% Hundreds: -% \begin{macrocode} -\newcommand*{\@@hundredthstringportuges}[1]{% -\ifcase#1\relax -\or cent\'esimo% -\or ducent\'esimo% -\or trecent\'esimo% -\or quadringent\'esimo% -\or q\"uingent\'esimo% -\or seiscent\'esimo% -\or setingent\'esimo% -\or octingent\'esimo% -\or nongent\'esimo% -\fi} -% \end{macrocode} -% Units (feminine): -% \begin{macrocode} -\newcommand*{\@@unitthstringFportuges}[1]{% -\ifcase#1\relax -zero% -\or primeira% -\or segunda% -\or terceira% -\or quarta% -\or quinta% -\or sexta% -\or s\'etima% -\or oitava% -\or nona% -\fi -} -% \end{macrocode} -% Tens (feminine): -% \begin{macrocode} -\newcommand*{\@@tenthstringFportuges}[1]{% -\ifcase#1\relax -\or d\'ecima% -\or vig\'esima% -\or trig\'esima% -\or quadrag\'esima% -\or q\"uinquag\'esima% -\or sexag\'esima% -\or setuag\'esima% -\or octog\'esima% -\or nonag\'esima% -\fi -} -% \end{macrocode} -% Hundreds (feminine): -% \begin{macrocode} -\newcommand*{\@@hundredthstringFportuges}[1]{% -\ifcase#1\relax -\or cent\'esima% -\or ducent\'esima% -\or trecent\'esima% -\or quadringent\'esima% -\or q\"uingent\'esima% -\or seiscent\'esima% -\or setingent\'esima% -\or octingent\'esima% -\or nongent\'esima% -\fi} -% \end{macrocode} -% As above, but with initial letter in upper case. Units: -% \begin{macrocode} -\newcommand*{\@@Unitthstringportuges}[1]{% -\ifcase#1\relax -Zero% -\or Primeiro% -\or Segundo% -\or Terceiro% -\or Quarto% -\or Quinto% -\or Sexto% -\or S\'etimo% -\or Oitavo% -\or Nono% -\fi -} -% \end{macrocode} -% Tens: -% \begin{macrocode} -\newcommand*{\@@Tenthstringportuges}[1]{% -\ifcase#1\relax -\or D\'ecimo% -\or Vig\'esimo% -\or Trig\'esimo% -\or Quadrag\'esimo% -\or Q\"uinquag\'esimo% -\or Sexag\'esimo% -\or Setuag\'esimo% -\or Octog\'esimo% -\or Nonag\'esimo% -\fi -} -% \end{macrocode} -% Hundreds: -% \begin{macrocode} -\newcommand*{\@@Hundredthstringportuges}[1]{% -\ifcase#1\relax -\or Cent\'esimo% -\or Ducent\'esimo% -\or Trecent\'esimo% -\or Quadringent\'esimo% -\or Q\"uingent\'esimo% -\or Seiscent\'esimo% -\or Setingent\'esimo% -\or Octingent\'esimo% -\or Nongent\'esimo% -\fi} -% \end{macrocode} -% As above, but feminine. Units: -% \begin{macrocode} -\newcommand*{\@@UnitthstringFportuges}[1]{% -\ifcase#1\relax -Zera% -\or Primeira% -\or Segunda% -\or Terceira% -\or Quarta% -\or Quinta% -\or Sexta% -\or S\'etima% -\or Oitava% -\or Nona% -\fi -} -% \end{macrocode} -% Tens (feminine); -% \begin{macrocode} -\newcommand*{\@@TenthstringFportuges}[1]{% -\ifcase#1\relax -\or D\'ecima% -\or Vig\'esima% -\or Trig\'esima% -\or Quadrag\'esima% -\or Q\"uinquag\'esima% -\or Sexag\'esima% -\or Setuag\'esima% -\or Octog\'esima% -\or Nonag\'esima% -\fi -} -% \end{macrocode} -% Hundreds (feminine): -% \begin{macrocode} -\newcommand*{\@@HundredthstringFportuges}[1]{% -\ifcase#1\relax -\or Cent\'esima% -\or Ducent\'esima% -\or Trecent\'esima% -\or Quadringent\'esima% -\or Q\"uingent\'esima% -\or Seiscent\'esima% -\or Setingent\'esima% -\or Octingent\'esima% -\or Nongent\'esima% -\fi} -% \end{macrocode} -% This has changed in version 1.09, so that it now stores -% the result in the second argument (a control sequence), but it -% doesn't display anything. Since it only affects internal macros, -% it shouldn't affect documents created with older versions. -% (These internal macros are not meant for use in documents.) -% \begin{macrocode} -\newcommand*{\@@numberstringportuges}[2]{% -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9 -% #1 is greater or equal to 10000 - \divide\@strctr by 10 - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1 \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr>0 - \ifnum\@strctr=1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@unitstring{\@strctr}}% - \fi - \else - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@thousand}% -\else - \ifnum\@strctr>0\relax - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@thousand}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100\relax -\ifnum\@strctr>0\relax - \ifnum#1>1000 \relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \fi - \@tmpstrctr=#1\relax - \@modulo{\@tmpstrctr}{1000}% - \let\@@fc@numstr#2\relax - \ifnum\@tmpstrctr=100\relax - \edef#2{\@@fc@numstr\@tenstring{10}}% - \else - \edef#2{\@@fc@numstr\@hundredstring{\@strctr}}% - \fi% -\fi -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname\ }% - \fi -\fi -\ifnum\@strctr>19\relax - \divide\@strctr by 10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr>0 - \ifnum\@strctr=1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname}% - \else - \ifnum#1>100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname}% - \fi - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@unitstring{\@strctr}}% - \fi -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else%(>0,<10) - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else%>10 - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi -\fi -} -% \end{macrocode} -% As above, but for ordinals. -% \begin{macrocode} -\newcommand*{\@@ordinalstringportuges}[2]{% -\@strctr=#1\relax -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\else -\def#2{}% -\ifnum\@strctr>999\relax - \divide\@strctr by 1000\relax - \ifnum\@strctr>1\relax - \ifnum\@strctr>9\relax - \@tmpstrctr=\@strctr - \ifnum\@strctr<20 - \@modulo{\@tmpstrctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenthstring{\@tmpstrctr}}% - \else - \divide\@tmpstrctr by 10\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}% - \@tmpstrctr=\@strctr - \@modulo{\@tmpstrctr}{10}% - \ifnum\@tmpstrctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@tmpstrctr}}% - \fi - \fi - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \fi - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@thousandth}% -\fi -\@strctr=#1\relax -\@modulo{\@strctr}{1000}% -\ifnum\@strctr>99\relax - \@tmpstrctr=\@strctr - \divide\@tmpstrctr by 100\relax - \ifnum#1>1000\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr-}% - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@hundredthstring{\@tmpstrctr}}% -\fi -\@modulo{\@strctr}{100}% -\ifnum#1>99\relax - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr-}% - \fi -\fi -\ifnum\@strctr>9\relax - \@tmpstrctr=\@strctr - \divide\@tmpstrctr by 10\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}% - \@tmpstrctr=\@strctr - \@modulo{\@tmpstrctr}{10}% - \ifnum\@tmpstrctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr-\@unitthstring{\@tmpstrctr}}% - \fi -\else - \ifnum\@strctr=0\relax - \ifnum#1=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{0}}% - \fi - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi -\fi -\fi -\fi -} -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-spanish.def> -% \end{macrocode} -%\fi -% \subsection{fc-spanish.def} -% Spanish definitions -% \begin{macrocode} -\ProvidesFile{fc-spanish.def}[2007/05/26] -% \end{macrocode} -% Define macro that converts a number or count register (first -% argument) to an ordinal, and stores the result in the -% second argument, which must be a control sequence. -% Masculine: -% \begin{macrocode} -\newcommand{\@ordinalMspanish}[2]{% -\edef#2{\number#1\relax\noexpand\fmtord{o}}} -% \end{macrocode} -% Feminine: -% \begin{macrocode} -\newcommand{\@ordinalFspanish}[2]{% -\edef#2{\number#1\relax\noexpand\fmtord{a}}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalNspanish\@ordinalMspanish -% \end{macrocode} -% Convert a number to text. The easiest way to do this is to -% break it up into units, tens, teens, twenties and hundreds. -% Units (argument must be a number from 0 to 9): -% \begin{macrocode} -\newcommand{\@@unitstringspanish}[1]{% -\ifcase#1\relax -cero% -\or uno% -\or dos% -\or tres% -\or cuatro% -\or cinco% -\or seis% -\or siete% -\or ocho% -\or nueve% -\fi -} -% \end{macrocode} -% Feminine: -% \begin{macrocode} -\newcommand{\@@unitstringFspanish}[1]{% -\ifcase#1\relax -cera% -\or una% -\or dos% -\or tres% -\or cuatro% -\or cinco% -\or seis% -\or siete% -\or ocho% -\or nueve% -\fi -} -% \end{macrocode} -% Tens (argument must go from 1 to 10): -% \begin{macrocode} -\newcommand{\@@tenstringspanish}[1]{% -\ifcase#1\relax -\or diez% -\or viente% -\or treinta% -\or cuarenta% -\or cincuenta% -\or sesenta% -\or setenta% -\or ochenta% -\or noventa% -\or cien% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand{\@@teenstringspanish}[1]{% -\ifcase#1\relax -diez% -\or once% -\or doce% -\or trece% -\or catorce% -\or quince% -\or diecis\'eis% -\or diecisiete% -\or dieciocho% -\or diecinueve% -\fi -} -% \end{macrocode} -% Twenties: -% \begin{macrocode} -\newcommand{\@@twentystringspanish}[1]{% -\ifcase#1\relax -veinte% -\or veintiuno% -\or veintid\'os% -\or veintitr\'es% -\or veinticuatro% -\or veinticinco% -\or veintis\'eis% -\or veintisiete% -\or veintiocho% -\or veintinueve% -\fi} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\newcommand{\@@twentystringFspanish}[1]{% -\ifcase#1\relax -veinte% -\or veintiuna% -\or veintid\'os% -\or veintitr\'es% -\or veinticuatro% -\or veinticinco% -\or veintis\'eis% -\or veintisiete% -\or veintiocho% -\or veintinueve% -\fi} -% \end{macrocode} -% Hundreds: -% \begin{macrocode} -\newcommand{\@@hundredstringspanish}[1]{% -\ifcase#1\relax -\or ciento% -\or doscientos% -\or trescientos% -\or cuatrocientos% -\or quinientos% -\or seiscientos% -\or setecientos% -\or ochocientos% -\or novecientos% -\fi} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\newcommand{\@@hundredstringFspanish}[1]{% -\ifcase#1\relax -\or cienta% -\or doscientas% -\or trescientas% -\or cuatrocientas% -\or quinientas% -\or seiscientas% -\or setecientas% -\or ochocientas% -\or novecientas% -\fi} -% \end{macrocode} -% As above, but with initial letter uppercase: -% \begin{macrocode} -\newcommand{\@@Unitstringspanish}[1]{% -\ifcase#1\relax -Cero% -\or Uno% -\or Dos% -\or Tres% -\or Cuatro% -\or Cinco% -\or Seis% -\or Siete% -\or Ocho% -\or Nueve% -\fi -} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\newcommand{\@@UnitstringFspanish}[1]{% -\ifcase#1\relax -Cera% -\or Una% -\or Dos% -\or Tres% -\or Cuatro% -\or Cinco% -\or Seis% -\or Siete% -\or Ocho% -\or Nueve% -\fi -} -% \end{macrocode} -% Tens: -% \begin{macrocode} -\newcommand{\@@Tenstringspanish}[1]{% -\ifcase#1\relax -\or Diez% -\or Viente% -\or Treinta% -\or Cuarenta% -\or Cincuenta% -\or Sesenta% -\or Setenta% -\or Ochenta% -\or Noventa% -\or Cien% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand{\@@Teenstringspanish}[1]{% -\ifcase#1\relax -Diez% -\or Once% -\or Doce% -\or Trece% -\or Catorce% -\or Quince% -\or Diecis\'eis% -\or Diecisiete% -\or Dieciocho% -\or Diecinueve% -\fi -} -% \end{macrocode} -% Twenties: -% \begin{macrocode} -\newcommand{\@@Twentystringspanish}[1]{% -\ifcase#1\relax -Veinte% -\or Veintiuno% -\or Veintid\'os% -\or Veintitr\'es% -\or Veinticuatro% -\or Veinticinco% -\or Veintis\'eis% -\or Veintisiete% -\or Veintiocho% -\or Veintinueve% -\fi} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\newcommand{\@@TwentystringFspanish}[1]{% -\ifcase#1\relax -Veinte% -\or Veintiuna% -\or Veintid\'os% -\or Veintitr\'es% -\or Veinticuatro% -\or Veinticinco% -\or Veintis\'eis% -\or Veintisiete% -\or Veintiocho% -\or Veintinueve% -\fi} -% \end{macrocode} -% Hundreds: -% \begin{macrocode} -\newcommand{\@@Hundredstringspanish}[1]{% -\ifcase#1\relax -\or Ciento% -\or Doscientos% -\or Trescientos% -\or Cuatrocientos% -\or Quinientos% -\or Seiscientos% -\or Setecientos% -\or Ochocientos% -\or Novecientos% -\fi} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\newcommand{\@@HundredstringFspanish}[1]{% -\ifcase#1\relax -\or Cienta% -\or Doscientas% -\or Trescientas% -\or Cuatrocientas% -\or Quinientas% -\or Seiscientas% -\or Setecientas% -\or Ochocientas% -\or Novecientas% -\fi} -% \end{macrocode} -% This has changed in version 1.09, so that it now stores the -% result in the second argument, but doesn't display anything. -% Since it only affects internal macros, it shouldn't affect -% documents created with older versions. (These internal macros -% are not meant for use in documents.) -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMspanish}[2]{% -\let\@unitstring=\@@unitstringspanish -\let\@teenstring=\@@teenstringspanish -\let\@tenstring=\@@tenstringspanish -\let\@twentystring=\@@twentystringspanish -\let\@hundredstring=\@@hundredstringspanish -\def\@hundred{cien}\def\@thousand{mil}% -\def\@andname{y}% -\@@numberstringspanish{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringFspanish}[2]{% -\let\@unitstring=\@@unitstringFspanish -\let\@teenstring=\@@teenstringspanish -\let\@tenstring=\@@tenstringspanish -\let\@twentystring=\@@twentystringFspanish -\let\@hundredstring=\@@hundredstringFspanish -\def\@hundred{cien}\def\@thousand{mil}% -\def\@andname{y}% -\@@numberstringspanish{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@numberstringNspanish\@numberstringMspanish -% \end{macrocode} -% As above, but initial letters in upper case: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMspanish}[2]{% -\let\@unitstring=\@@Unitstringspanish -\let\@teenstring=\@@Teenstringspanish -\let\@tenstring=\@@Tenstringspanish -\let\@twentystring=\@@Twentystringspanish -\let\@hundredstring=\@@Hundredstringspanish -\def\@andname{y}% -\def\@hundred{Cien}\def\@thousand{Mil}% -\@@numberstringspanish{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFspanish}[2]{% -\let\@unitstring=\@@UnitstringFspanish -\let\@teenstring=\@@Teenstringspanish -\let\@tenstring=\@@Tenstringspanish -\let\@twentystring=\@@TwentystringFspanish -\let\@hundredstring=\@@HundredstringFspanish -\def\@andname{y}% -\def\@hundred{Cien}\def\@thousand{Mil}% -\@@numberstringspanish{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@NumberstringNspanish\@NumberstringMspanish -% \end{macrocode} -% As above, but for ordinals. -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMspanish}[2]{% -\let\@unitthstring=\@@unitthstringspanish -\let\@unitstring=\@@unitstringspanish -\let\@teenthstring=\@@teenthstringspanish -\let\@tenthstring=\@@tenthstringspanish -\let\@hundredthstring=\@@hundredthstringspanish -\def\@thousandth{mil\'esimo}% -\@@ordinalstringspanish{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFspanish}[2]{% -\let\@unitthstring=\@@unitthstringFspanish -\let\@unitstring=\@@unitstringFspanish -\let\@teenthstring=\@@teenthstringFspanish -\let\@tenthstring=\@@tenthstringFspanish -\let\@hundredthstring=\@@hundredthstringFspanish -\def\@thousandth{mil\'esima}% -\@@ordinalstringspanish{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@ordinalstringNspanish\@ordinalstringMspanish -% \end{macrocode} -% As above, but with initial letters in upper case. -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMspanish}[2]{% -\let\@unitthstring=\@@Unitthstringspanish -\let\@unitstring=\@@Unitstringspanish -\let\@teenthstring=\@@Teenthstringspanish -\let\@tenthstring=\@@Tenthstringspanish -\let\@hundredthstring=\@@Hundredthstringspanish -\def\@thousandth{Mil\'esimo}% -\@@ordinalstringspanish{#1}{#2}} -% \end{macrocode} -% Feminine form: -% \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFspanish}[2]{% -\let\@unitthstring=\@@UnitthstringFspanish -\let\@unitstring=\@@UnitstringFspanish -\let\@teenthstring=\@@TeenthstringFspanish -\let\@tenthstring=\@@TenthstringFspanish -\let\@hundredthstring=\@@HundredthstringFspanish -\def\@thousandth{Mil\'esima}% -\@@ordinalstringspanish{#1}{#2}} -% \end{macrocode} -% Make neuter same as masculine: -% \begin{macrocode} -\let\@OrdinalstringNspanish\@OrdinalstringMspanish -% \end{macrocode} -% Code for convert numbers into textual ordinals. As before, -% it is easier to split it into units, tens, teens and hundreds. -% Units: -% \begin{macrocode} -\newcommand{\@@unitthstringspanish}[1]{% -\ifcase#1\relax -cero% -\or primero% -\or segundo% -\or tercero% -\or cuarto% -\or quinto% -\or sexto% -\or s\'eptimo% -\or octavo% -\or noveno% -\fi -} -% \end{macrocode} -% Tens: -% \begin{macrocode} -\newcommand{\@@tenthstringspanish}[1]{% -\ifcase#1\relax -\or d\'ecimo% -\or vig\'esimo% -\or trig\'esimo% -\or cuadrag\'esimo% -\or quincuag\'esimo% -\or sexag\'esimo% -\or septuag\'esimo% -\or octog\'esimo% -\or nonag\'esimo% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand{\@@teenthstringspanish}[1]{% -\ifcase#1\relax -d\'ecimo% -\or und\'ecimo% -\or duod\'ecimo% -\or decimotercero% -\or decimocuarto% -\or decimoquinto% -\or decimosexto% -\or decimos\'eptimo% -\or decimoctavo% -\or decimonoveno% -\fi -} -% \end{macrocode} -% Hundreds: -% \begin{macrocode} -\newcommand{\@@hundredthstringspanish}[1]{% -\ifcase#1\relax -\or cent\'esimo% -\or ducent\'esimo% -\or tricent\'esimo% -\or cuadringent\'esimo% -\or quingent\'esimo% -\or sexcent\'esimo% -\or septing\'esimo% -\or octingent\'esimo% -\or noningent\'esimo% -\fi} -% \end{macrocode} -% Units (feminine): -% \begin{macrocode} -\newcommand{\@@unitthstringFspanish}[1]{% -\ifcase#1\relax -cera% -\or primera% -\or segunda% -\or tercera% -\or cuarta% -\or quinta% -\or sexta% -\or s\'eptima% -\or octava% -\or novena% -\fi -} -% \end{macrocode} -% Tens (feminine): -% \begin{macrocode} -\newcommand{\@@tenthstringFspanish}[1]{% -\ifcase#1\relax -\or d\'ecima% -\or vig\'esima% -\or trig\'esima% -\or cuadrag\'esima% -\or quincuag\'esima% -\or sexag\'esima% -\or septuag\'esima% -\or octog\'esima% -\or nonag\'esima% -\fi -} -% \end{macrocode} -% Teens (feminine) -% \begin{macrocode} -\newcommand{\@@teenthstringFspanish}[1]{% -\ifcase#1\relax -d\'ecima% -\or und\'ecima% -\or duod\'ecima% -\or decimotercera% -\or decimocuarta% -\or decimoquinta% -\or decimosexta% -\or decimos\'eptima% -\or decimoctava% -\or decimonovena% -\fi -} -% \end{macrocode} -% Hundreds (feminine) -% \begin{macrocode} -\newcommand{\@@hundredthstringFspanish}[1]{% -\ifcase#1\relax -\or cent\'esima% -\or ducent\'esima% -\or tricent\'esima% -\or cuadringent\'esima% -\or quingent\'esima% -\or sexcent\'esima% -\or septing\'esima% -\or octingent\'esima% -\or noningent\'esima% -\fi} -% \end{macrocode} -% As above, but with initial letters in upper case -% \begin{macrocode} -\newcommand{\@@Unitthstringspanish}[1]{% -\ifcase#1\relax -Cero% -\or Primero% -\or Segundo% -\or Tercero% -\or Cuarto% -\or Quinto% -\or Sexto% -\or S\'eptimo% -\or Octavo% -\or Noveno% -\fi -} -% \end{macrocode} -% Tens: -% \begin{macrocode} -\newcommand{\@@Tenthstringspanish}[1]{% -\ifcase#1\relax -\or D\'ecimo% -\or Vig\'esimo% -\or Trig\'esimo% -\or Cuadrag\'esimo% -\or Quincuag\'esimo% -\or Sexag\'esimo% -\or Septuag\'esimo% -\or Octog\'esimo% -\or Nonag\'esimo% -\fi -} -% \end{macrocode} -% Teens: -% \begin{macrocode} -\newcommand{\@@Teenthstringspanish}[1]{% -\ifcase#1\relax -D\'ecimo% -\or Und\'ecimo% -\or Duod\'ecimo% -\or Decimotercero% -\or Decimocuarto% -\or Decimoquinto% -\or Decimosexto% -\or Decimos\'eptimo% -\or Decimoctavo% -\or Decimonoveno% -\fi -} -% \end{macrocode} -% Hundreds -% \begin{macrocode} -\newcommand{\@@Hundredthstringspanish}[1]{% -\ifcase#1\relax -\or Cent\'esimo% -\or Ducent\'esimo% -\or Tricent\'esimo% -\or Cuadringent\'esimo% -\or Quingent\'esimo% -\or Sexcent\'esimo% -\or Septing\'esimo% -\or Octingent\'esimo% -\or Noningent\'esimo% -\fi} -% \end{macrocode} -% As above, but feminine. -% \begin{macrocode} -\newcommand{\@@UnitthstringFspanish}[1]{% -\ifcase#1\relax -Cera% -\or Primera% -\or Segunda% -\or Tercera% -\or Cuarta% -\or Quinta% -\or Sexta% -\or S\'eptima% -\or Octava% -\or Novena% -\fi -} -% \end{macrocode} -% Tens (feminine) -% \begin{macrocode} -\newcommand{\@@TenthstringFspanish}[1]{% -\ifcase#1\relax -\or D\'ecima% -\or Vig\'esima% -\or Trig\'esima% -\or Cuadrag\'esima% -\or Quincuag\'esima% -\or Sexag\'esima% -\or Septuag\'esima% -\or Octog\'esima% -\or Nonag\'esima% -\fi -} -% \end{macrocode} -% Teens (feminine): -% \begin{macrocode} -\newcommand{\@@TeenthstringFspanish}[1]{% -\ifcase#1\relax -D\'ecima% -\or Und\'ecima% -\or Duod\'ecima% -\or Decimotercera% -\or Decimocuarta% -\or Decimoquinta% -\or Decimosexta% -\or Decimos\'eptima% -\or Decimoctava% -\or Decimonovena% -\fi -} -% \end{macrocode} -% Hundreds (feminine): -% \begin{macrocode} -\newcommand{\@@HundredthstringFspanish}[1]{% -\ifcase#1\relax -\or Cent\'esima% -\or Ducent\'esima% -\or Tricent\'esima% -\or Cuadringent\'esima% -\or Quingent\'esima% -\or Sexcent\'esima% -\or Septing\'esima% -\or Octingent\'esima% -\or Noningent\'esima% -\fi} - -% \end{macrocode} -% This has changed in version 1.09, so that it now stores the -% results in the second argument (which must be a control -% sequence), but it doesn't display anything. Since it only -% affects internal macros, it shouldn't affect documnets created -% with older versions. (These internal macros are not meant for -% use in documents.) -% \begin{macrocode} -\newcommand{\@@numberstringspanish}[2]{% -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\fi -\fi -\def#2{}% -\@strctr=#1\relax \divide\@strctr by 1000\relax -\ifnum\@strctr>9 -% #1 is greater or equal to 10000 - \divide\@strctr by 10 - \ifnum\@strctr>1 - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1 \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname\ \@unitstring{\@strctr}}% - \fi - \else - \@strctr=#1\relax - \divide\@strctr by 1000\relax - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@thousand}% -\else - \ifnum\@strctr>0\relax - \ifnum\@strctr>1\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}\ }% - \fi - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@thousand}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{1000}% -\divide\@strctr by 100\relax -\ifnum\@strctr>0\relax - \ifnum#1>1000\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ }% - \fi - \@tmpstrctr=#1\relax - \@modulo{\@tmpstrctr}{1000}% - \ifnum\@tmpstrctr=100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{10}}% - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@hundredstring{\@strctr}}% - \fi -\fi -\@strctr=#1\relax \@modulo{\@strctr}{100}% -\ifnum#1>100\relax - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname\ }% - \fi -\fi -\ifnum\@strctr>29\relax - \divide\@strctr by 10\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@tenstring{\@strctr}}% - \@strctr=#1\relax \@modulo{\@strctr}{10}% - \ifnum\@strctr>0\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\ \@andname\ \@unitstring{\@strctr}}% - \fi -\else - \ifnum\@strctr<10\relax - \ifnum\@strctr=0\relax - \ifnum#1<100\relax - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@unitstring{\@strctr}}% - \fi - \else - \ifnum\@strctr>19\relax - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@twentystring{\@strctr}}% - \else - \@modulo{\@strctr}{10}% - \let\@@fc@numstr#2\relax - \edef#2{\@@fc@numstr\@teenstring{\@strctr}}% - \fi - \fi -\fi -} -% \end{macrocode} -% As above, but for ordinals -% \begin{macrocode} -\newcommand{\@@ordinalstringspanish}[2]{% -\@strctr=#1\relax -\ifnum#1>99999 -\PackageError{fmtcount}{Out of range}% -{This macro only works for values less than 100000}% -\else -\ifnum#1<0 -\PackageError{fmtcount}{Negative numbers not permitted}% -{This macro does not work for negative numbers, however -you can try typing "minus" first, and then pass the modulus of -this number}% -\else -\def#2{}% -\ifnum\@strctr>999\relax - \divide\@strctr by 1000\relax - \ifnum\@strctr>1\relax - \ifnum\@strctr>9\relax - \@tmpstrctr=\@strctr - \ifnum\@strctr<20 - \@modulo{\@tmpstrctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenthstring{\@tmpstrctr}}% - \else - \divide\@tmpstrctr by 10\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}% - \@tmpstrctr=\@strctr - \@modulo{\@tmpstrctr}{10}% - \ifnum\@tmpstrctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@tmpstrctr}}% - \fi - \fi - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{\@strctr}}% - \fi - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@thousandth}% -\fi -\@strctr=#1\relax -\@modulo{\@strctr}{1000}% -\ifnum\@strctr>99\relax - \@tmpstrctr=\@strctr - \divide\@tmpstrctr by 100\relax - \ifnum#1>1000\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ }% - \fi - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@hundredthstring{\@tmpstrctr}}% -\fi -\@modulo{\@strctr}{100}% -\ifnum#1>99\relax - \ifnum\@strctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ }% - \fi -\fi -\ifnum\@strctr>19\relax - \@tmpstrctr=\@strctr - \divide\@tmpstrctr by 10\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@tenthstring{\@tmpstrctr}}% - \@tmpstrctr=\@strctr - \@modulo{\@tmpstrctr}{10}% - \ifnum\@tmpstrctr>0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\ \@unitthstring{\@tmpstrctr}}% - \fi -\else - \ifnum\@strctr>9\relax - \@modulo{\@strctr}{10}% - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@teenthstring{\@strctr}}% - \else - \ifnum\@strctr=0\relax - \ifnum#1=0\relax - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitstring{0}}% - \fi - \else - \let\@@fc@ordstr#2\relax - \edef#2{\@@fc@ordstr\@unitthstring{\@strctr}}% - \fi - \fi -\fi -\fi -\fi -} -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-UKenglish.def> -% \end{macrocode} -%\fi -% \subsection{fc-UKenglish.def} -% UK English definitions -% \begin{macrocode} -\ProvidesFile{fc-UKenglish}[2007/06/14] -% \end{macrocode} -% Check that fc-english.def has been loaded -% \begin{macrocode} -\@ifundefined{@ordinalMenglish}{\input{fc-english.def}}{} -% \end{macrocode} -% These are all just synonyms for the commands provided by -% fc-english.def. -% \begin{macrocode} -\let\@ordinalMUKenglish\@ordinalMenglish -\let\@ordinalFUKenglish\@ordinalMenglish -\let\@ordinalNUKenglish\@ordinalMenglish -\let\@numberstringMUKenglish\@numberstringMenglish -\let\@numberstringFUKenglish\@numberstringMenglish -\let\@numberstringNUKenglish\@numberstringMenglish -\let\@NumberstringMUKenglish\@NumberstringMenglish -\let\@NumberstringFUKenglish\@NumberstringMenglish -\let\@NumberstringNUKenglish\@NumberstringMenglish -\let\@ordinalstringMUKenglish\@ordinalstringMenglish -\let\@ordinalstringFUKenglish\@ordinalstringMenglish -\let\@ordinalstringNUKenglish\@ordinalstringMenglish -\let\@OrdinalstringMUKenglish\@OrdinalstringMenglish -\let\@OrdinalstringFUKenglish\@OrdinalstringMenglish -\let\@OrdinalstringNUKenglish\@OrdinalstringMenglish -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fc-USenglish.def> -% \end{macrocode} -%\fi -% \subsection{fc-USenglish.def} -% US English definitions -% \begin{macrocode} -\ProvidesFile{fc-USenglish}[2007/06/14] -% \end{macrocode} -% Check that fc-english.def has been loaded -% \begin{macrocode} -\@ifundefined{@ordinalMenglish}{\input{fc-english.def}}{} -% \end{macrocode} -% These are all just synonyms for the commands provided by -% fc-english.def. -% \begin{macrocode} -\let\@ordinalMUSenglish\@ordinalMenglish -\let\@ordinalFUSenglish\@ordinalMenglish -\let\@ordinalNUSenglish\@ordinalMenglish -\let\@numberstringMUSenglish\@numberstringMenglish -\let\@numberstringFUSenglish\@numberstringMenglish -\let\@numberstringNUSenglish\@numberstringMenglish -\let\@NumberstringMUSenglish\@NumberstringMenglish -\let\@NumberstringFUSenglish\@NumberstringMenglish -\let\@NumberstringNUSenglish\@NumberstringMenglish -\let\@ordinalstringMUSenglish\@ordinalstringMenglish -\let\@ordinalstringFUSenglish\@ordinalstringMenglish -\let\@ordinalstringNUSenglish\@ordinalstringMenglish -\let\@OrdinalstringMUSenglish\@OrdinalstringMenglish -\let\@OrdinalstringFUSenglish\@OrdinalstringMenglish -\let\@OrdinalstringNUSenglish\@OrdinalstringMenglish -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} -%<*fmtcount.sty> -% \end{macrocode} -%\fi -%\subsection{fmtcount.sty} -% This section deals with the code for |fmtcount.sty| -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{fmtcount}[2007/06/14 v1.1] -\RequirePackage{ifthen} -\RequirePackage{keyval} -% \end{macrocode} -% These commands need to be defined before the -% configuration file is loaded. -% -% Define the macro to format the |st|, |nd|, |rd| or |th| of an -% ordinal. -% \begin{macrocode} -\providecommand{\fmtord}[1]{\textsuperscript{#1}} -% \end{macrocode} -% Define |\padzeroes| to specify how many digits should be -% displayed. -% \begin{macrocode} -\newcount\c@padzeroesN -\c@padzeroesN=1\relax -\providecommand{\padzeroes}[1][17]{\c@padzeroesN=#1} -% \end{macrocode} -% Load appropriate language definition files (I don't -% know if there is a standard way of detecting which -% languages are defined, so I'm just going to check -% if \verb"\date"\meta{language} is defined): -%\changes{v1.1}{14 June 2007}{added check for UKenglish, -% british and USenglish babel settings} -% \begin{macrocode} -\@ifundefined{dateenglish}{}{\input{fc-english.def}} -\@ifundefined{l@UKenglish}{}{\input{fc-UKenglish.def}} -\@ifundefined{l@british}{}{\input{fc-british.def}} -\@ifundefined{l@USenglish}{}{\input{fc-USenglish.def}} -\@ifundefined{datespanish}{}{\input{fc-spanish.def}} -\@ifundefined{dateportuges}{}{\input{fc-portuges.def}} -\@ifundefined{datefrench}{}{\input{fc-french.def}} -\@ifundefined{dategerman}{% -\@ifundefined{datengerman}{}{\input{fc-german.def}}}{% -\input{fc-german.def}} -% \end{macrocode} -% Define keys for use with |\fmtcountsetoptions|. -% Key to switch French dialects (Does babel store -%this kind of information?) -% \begin{macrocode} -\def\fmtcount@french{france} -\define@key{fmtcount}{french}[france]{% -\@ifundefined{datefrench}{% -\PackageError{fmtcount}{Language `french' not defined}{You need -to load babel before loading fmtcount}}{ -\ifthenelse{\equal{#1}{france} - \or\equal{#1}{swiss} - \or\equal{#1}{belgian}}{% - \def\fmtcount@french{#1}}{% -\PackageError{fmtcount}{Invalid value `#1' to french key} -{Option `french' can only take the values `france', -`belgian' or `swiss'}} -}} -% \end{macrocode} -% Key to determine how to display the ordinal -% \begin{macrocode} -\define@key{fmtcount}{fmtord}{% -\ifthenelse{\equal{#1}{level} - \or\equal{#1}{raise} - \or\equal{#1}{user}}{ - \def\fmtcount@fmtord{#1}}{% -\PackageError{fmtcount}{Invalid value `#1' to fmtord key} -{Option `fmtord' can only take the values `level', `raise' -or `user'}}} -% \end{macrocode} -% Key to determine whether the ordinal should be abbreviated -% (language dependent, currently only affects French ordinals.) -% \begin{macrocode} -\newif\iffmtord@abbrv -\fmtord@abbrvfalse -\define@key{fmtcount}{abbrv}[true]{% -\ifthenelse{\equal{#1}{true}\or\equal{#1}{false}}{ - \csname fmtord@abbrv#1\endcsname}{% -\PackageError{fmtcount}{Invalid value `#1' to fmtord key} -{Option `fmtord' can only take the values `true' or -`false'}}} -% \end{macrocode} -% Define command to set options. -% \begin{macrocode} -\newcommand{\fmtcountsetoptions}[1]{% -\def\fmtcount@fmtord{}% -\setkeys{fmtcount}{#1}% -\@ifundefined{datefrench}{}{% -\edef\@ordinalstringMfrench{\noexpand -\csname @ordinalstringMfrench\fmtcount@french\noexpand\endcsname}% -\edef\@ordinalstringFfrench{\noexpand -\csname @ordinalstringFfrench\fmtcount@french\noexpand\endcsname}% -\edef\@OrdinalstringMfrench{\noexpand -\csname @OrdinalstringMfrench\fmtcount@french\noexpand\endcsname}% -\edef\@OrdinalstringFfrench{\noexpand -\csname @OrdinalstringFfrench\fmtcount@french\noexpand\endcsname}% -\edef\@numberstringMfrench{\noexpand -\csname @numberstringMfrench\fmtcount@french\noexpand\endcsname}% -\edef\@numberstringFfrench{\noexpand -\csname @numberstringFfrench\fmtcount@french\noexpand\endcsname}% -\edef\@NumberstringMfrench{\noexpand -\csname @NumberstringMfrench\fmtcount@french\noexpand\endcsname}% -\edef\@NumberstringFfrench{\noexpand -\csname @NumberstringFfrench\fmtcount@french\noexpand\endcsname}% -}% -% -\ifthenelse{\equal{\fmtcount@fmtord}{level}}{% -\renewcommand{\fmtord}[1]{##1}}{% -\ifthenelse{\equal{\fmtcount@fmtord}{raise}}{% -\renewcommand{\fmtord}[1]{\textsuperscript{##1}}}{% -}} -} -% \end{macrocode} -% Load confguration file if it exists. This needs to be done -% before the package options, to allow the user to override -% the settings in the configuration file. -% \begin{macrocode} -\InputIfFileExists{fmtcount.cfg}{% -\typeout{Using configuration file fmtcount.cfg}}{% -\typeout{No configuration file fmtcount.cfg found.}} -% \end{macrocode} -%Declare options -% \begin{macrocode} -\DeclareOption{level}{\def\fmtcount@fmtord{level}% -\def\fmtord#1{#1}} -\DeclareOption{raise}{\def\fmtcount@fmtord{raise}% -\def\fmtord#1{\textsuperscript{#1}}} -% \end{macrocode} -% Process package options -% \begin{macrocode} -\ProcessOptions -% \end{macrocode} -% Define macro that performs modulo arthmetic. This is used for the -% date, time, ordinal and numberstring commands. (The fmtcount -% package was originally part of the datetime package.) -% \begin{macrocode} -\newcount\@DT@modctr -\def\@modulo#1#2{% -\@DT@modctr=#1\relax -\divide \@DT@modctr by #2\relax -\multiply \@DT@modctr by #2\relax -\advance #1 by -\@DT@modctr} -% \end{macrocode} -% The following registers are needed by |\@ordinal| etc -% \begin{macrocode} -\newcount\@ordinalctr -\newcount\@orgargctr -\newcount\@strctr -\newcount\@tmpstrctr -% \end{macrocode} -%Define commands that display numbers in different bases. -% Define counters and conditionals needed. -% \begin{macrocode} -\newif\if@DT@padzeroes -\newcount\@DT@loopN -\newcount\@DT@X -% \end{macrocode} -% Binary -% \begin{macrocode} -\newcommand{\@binary}[1]{% -\@DT@padzeroestrue -\@DT@loopN=17\relax -\@strctr=\@DT@loopN -\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}% -\@strctr=65536\relax -\@DT@X=#1\relax -\loop -\@DT@modctr=\@DT@X -\divide\@DT@modctr by \@strctr -\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\the\@DT@modctr}% -\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi -\multiply\@DT@modctr by \@strctr -\advance\@DT@X by -\@DT@modctr -\divide\@strctr by 2\relax -\advance\@DT@loopN by -1\relax -\ifnum\@strctr>1 -\repeat -\the\@DT@X} - -\let\binarynum=\@binary -% \end{macrocode} -% Octal -% \begin{macrocode} -\newcommand{\@octal}[1]{% -\ifnum#1>32768 -\PackageError{fmtcount}{Value of counter too large for \protect\@octal}{Maximum value 32768} -\else -\@DT@padzeroestrue -\@DT@loopN=6\relax -\@strctr=\@DT@loopN -\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}% -\@strctr=32768\relax -\@DT@X=#1\relax -\loop -\@DT@modctr=\@DT@X -\divide\@DT@modctr by \@strctr -\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\the\@DT@modctr}% -\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi -\multiply\@DT@modctr by \@strctr -\advance\@DT@X by -\@DT@modctr -\divide\@strctr by 8\relax -\advance\@DT@loopN by -1\relax -\ifnum\@strctr>1 -\repeat -\the\@DT@X -\fi} -\let\octalnum=\@octal -% \end{macrocode} -% Lowercase hexadecimal -% \begin{macrocode} -\newcommand{\@@hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or6\or7\or8\or9\or a\or b\or c\or d\or e\or f\fi} - -\newcommand{\@hexadecimal}[1]{% -\@DT@padzeroestrue -\@DT@loopN=5\relax -\@strctr=\@DT@loopN -\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}% -\@strctr=65536\relax -\@DT@X=#1\relax -\loop -\@DT@modctr=\@DT@X -\divide\@DT@modctr by \@strctr -\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\@@hexadecimal\@DT@modctr}% -\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi -\multiply\@DT@modctr by \@strctr -\advance\@DT@X by -\@DT@modctr -\divide\@strctr by 16\relax -\advance\@DT@loopN by -1\relax -\ifnum\@strctr>1 -\repeat -\@@hexadecimal\@DT@X} - -\let\hexadecimalnum=\@hexadecimal -% \end{macrocode} -% Uppercase hexadecimal -% \begin{macrocode} -\newcommand{\@@Hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or6\or -7\or8\or9\or A\or B\or C\or D\or E\or F\fi} - -\newcommand{\@Hexadecimal}[1]{% -\@DT@padzeroestrue -\@DT@loopN=5\relax -\@strctr=\@DT@loopN -\whiledo{\@strctr<\c@padzeroesN}{0\advance\@strctr by 1}% -\@strctr=65536\relax -\@DT@X=#1\relax -\loop -\@DT@modctr=\@DT@X -\divide\@DT@modctr by \@strctr -\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=0\) \and \(\@DT@loopN>\c@padzeroesN\)}{}{\@@Hexadecimal\@DT@modctr}% -\ifnum\@DT@modctr=0\else\@DT@padzeroesfalse\fi -\multiply\@DT@modctr by \@strctr -\advance\@DT@X by -\@DT@modctr -\divide\@strctr by 16\relax -\advance\@DT@loopN by -1\relax -\ifnum\@strctr>1 -\repeat -\@@Hexadecimal\@DT@X} - -\let\Hexadecimalnum=\@Hexadecimal -% \end{macrocode} -% Uppercase alphabetical representation (a \ldots\ z aa \ldots\ zz) -% \begin{macrocode} -\newcommand{\@aaalph}[1]{% -\@DT@loopN=#1\relax -\advance\@DT@loopN by -1\relax -\divide\@DT@loopN by 26\relax -\@DT@modctr=\@DT@loopN -\multiply\@DT@modctr by 26\relax -\@DT@X=#1\relax -\advance\@DT@X by -1\relax -\advance\@DT@X by -\@DT@modctr -\advance\@DT@loopN by 1\relax -\advance\@DT@X by 1\relax -\loop -\@alph\@DT@X -\advance\@DT@loopN by -1\relax -\ifnum\@DT@loopN>0 -\repeat -} - -\let\aaalphnum=\@aaalph -% \end{macrocode} -% Uppercase alphabetical representation (a \ldots\ z aa \ldots\ zz) -% \begin{macrocode} -\newcommand{\@AAAlph}[1]{% -\@DT@loopN=#1\relax -\advance\@DT@loopN by -1\relax -\divide\@DT@loopN by 26\relax -\@DT@modctr=\@DT@loopN -\multiply\@DT@modctr by 26\relax -\@DT@X=#1\relax -\advance\@DT@X by -1\relax -\advance\@DT@X by -\@DT@modctr -\advance\@DT@loopN by 1\relax -\advance\@DT@X by 1\relax -\loop -\@Alph\@DT@X -\advance\@DT@loopN by -1\relax -\ifnum\@DT@loopN>0 -\repeat -} - -\let\AAAlphnum=\@AAAlph -% \end{macrocode} -% Lowercase alphabetical representation -% \begin{macrocode} -\newcommand{\@abalph}[1]{% -\ifnum#1>17576 -\PackageError{fmtcount}{Value of counter too large for \protect\@abalph}{Maximum value 17576} -\else -\@DT@padzeroestrue -\@strctr=17576\relax -\@DT@X=#1\relax -\advance\@DT@X by -1\relax -\loop -\@DT@modctr=\@DT@X -\divide\@DT@modctr by \@strctr -\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=1\)}{}{\@alph\@DT@modctr}% -\ifnum\@DT@modctr=1\else\@DT@padzeroesfalse\fi -\multiply\@DT@modctr by \@strctr -\advance\@DT@X by -\@DT@modctr -\divide\@strctr by 26\relax -\ifnum\@strctr>1 -\repeat -\advance\@DT@X by 1\relax -\@alph\@DT@X -\fi} - -\let\abalphnum=\@abalph -% \end{macrocode} -% Uppercase alphabetical representation -% \begin{macrocode} -\newcommand{\@ABAlph}[1]{% -\ifnum#1>17576 -\PackageError{fmtcount}{Value of counter too large for \protect\@ABAlph}{Maximum value 17576} -\else -\@DT@padzeroestrue -\@strctr=17576\relax -\@DT@X=#1\relax -\advance\@DT@X by -1\relax -\loop -\@DT@modctr=\@DT@X -\divide\@DT@modctr by \@strctr -\ifthenelse{\boolean{@DT@padzeroes} \and \(\@DT@modctr=1\)}{}{\@Alph\@DT@modctr}% -\ifnum\@DT@modctr=1\else\@DT@padzeroesfalse\fi -\multiply\@DT@modctr by \@strctr -\advance\@DT@X by -\@DT@modctr -\divide\@strctr by 26\relax -\ifnum\@strctr>1 -\repeat -\advance\@DT@X by 1\relax -\@Alph\@DT@X -\fi} - -\let\ABAlphnum=\@ABAlph -% \end{macrocode} -% Recursive command to count number of characters in argument. -% |\@strctr| should be set to zero before calling it. -% \begin{macrocode} -\def\@fmtc@count#1#2\relax{% -\if\relax#1 -\else -\advance\@strctr by 1\relax -\@fmtc@count#2\relax -\fi} -% \end{macrocode} -% Internal decimal macro: -% \begin{macrocode} -\newcommand{\@decimal}[1]{% -\@strctr=0\relax -\expandafter\@fmtc@count\number#1\relax -\@DT@loopN=\c@padzeroesN -\advance\@DT@loopN by -\@strctr -\ifnum\@DT@loopN>0\relax -\@strctr=0\relax -\whiledo{\@strctr < \@DT@loopN}{0\advance\@strctr by 1}% -\fi -\number#1\relax -} - -\let\decimalnum=\@decimal -% \end{macrocode} -% This is a bit cumbersome. Previously \verb"\@ordinal" -% was defined in a similar way to \verb"\abalph" etc. -% This ensured that the actual value of the counter was -% written in the new label stuff in the .aux file. However -% adding in an optional argument to determine the gender -% for multilingual compatibility messed things up somewhat. -% This was the only work around I could get to keep the -% the cross-referencing stuff working, which is why -% the optional argument comes \emph{after} the compulsory -% argument, instead of the usual manner of placing it before. -% Version 1.04 changed \verb"\ordinal" to \verb"\FCordinal" -% to prevent it clashing with the memoir class. -% \begin{macrocode} -\newcommand{\FCordinal}[1]{% -\expandafter\protect\expandafter\ordinalnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% If \verb"\ordinal" isn't defined make \verb"\ordinal" a synonym -% for \verb"\FCordinal" to maintain compatibility with previous -% versions. -% \begin{macrocode} -\@ifundefined{ordinal}{\let\ordinal\FCordinal}{% -\PackageWarning{fmtcount}{\string\ordinal -\space already defined use \string\FCordinal \space instead.}} -% \end{macrocode} -% Display ordinal where value is given as a number or -% count register instead of a counter: -% \begin{macrocode} -\newcommand{\ordinalnum}[1]{\@ifnextchar[{\@ordinalnum{#1}}{% -\@ordinalnum{#1}[m]}} -% \end{macrocode} -% Display ordinal according to gender (neuter added in v1.1): -% \begin{macrocode} -\def\@ordinalnum#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@ordinalF{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@ordinalN{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2'}{% -Available options are m, f or n}}% -\protect\@ordinalM{#1}{\@fc@ordstr}}}\@fc@ordstr}} -% \end{macrocode} -% Store the ordinal (first argument -% is identifying name, second argument is a counter.) -% \begin{macrocode} -\newcommand*{\storeordinal}[2]{% -\expandafter\protect\expandafter\storeordinalnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% Store ordinal (first argument -% is identifying name, second argument is a number or -% count register.) -% \begin{macrocode} -\newcommand*{\storeordinalnum}[2]{% -\@ifnextchar[{\@storeordinalnum{#1}{#2}}{% -\@storeordinalnum{#1}{#2}[m]}} -% \end{macrocode} -% Store ordinal according to gender: -% \begin{macrocode} -\def\@storeordinalnum#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@ordinalF{#2}{\@fc@ord}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@ordinalN{#2}{\@fc@ord}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3'}{% -Available options are m or f}}% -\protect\@ordinalM{#2}{\@fc@ord}}}% -\expandafter\let\csname @fcs@#1\endcsname\@fc@ord} -% \end{macrocode} -% Get stored information: -% \begin{macrocode} -\newcommand*{\FMCuse}[1]{\csname @fcs@#1\endcsname} -% \end{macrocode} -% Display ordinal as a string (argument is a counter) -% \begin{macrocode} -\newcommand{\ordinalstring}[1]{% -\expandafter\protect\expandafter\ordinalstringnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Display ordinal as a string (argument is a count register or -% number.) -% \begin{macrocode} -\newcommand{\ordinalstringnum}[1]{% -\@ifnextchar[{\@ordinal@string{#1}}{\@ordinal@string{#1}[m]}} -% \end{macrocode} -% Display ordinal as a string according to gender. -% \begin{macrocode} -\def\@ordinal@string#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@ordinalstringF{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@ordinalstringN{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2' to -\string\ordinalstring}{Available options are m, f or f}}% -\protect\@ordinalstringM{#1}{\@fc@ordstr}}}\@fc@ordstr}} -% \end{macrocode} -% Store textual representation of number. First argument is -% identifying name, second argument is the counter set to the -% required number. -% \begin{macrocode} -\newcommand{\storeordinalstring}[2]{% -\expandafter\protect\expandafter\storeordinalstringnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% Store textual representation of number. First argument is -% identifying name, second argument is a count register or number. -% \begin{macrocode} -\newcommand{\storeordinalstringnum}[2]{% -\@ifnextchar[{\@store@ordinal@string{#1}{#2}}{% -\@store@ordinal@string{#1}{#2}[m]}} -% \end{macrocode} -% Store textual representation of number according to gender. -% \begin{macrocode} -\def\@store@ordinal@string#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@ordinalstringF{#2}{\@fc@ordstr}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@ordinalstringN{#2}{\@fc@ordstr}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3' to -\string\ordinalstring}{Available options are m, f or n}}% -\protect\@ordinalstringM{#2}{\@fc@ordstr}}}% -\expandafter\let\csname @fcs@#1\endcsname\@fc@ordstr} -% \end{macrocode} -% Display ordinal as a string with initial letters in upper case -% (argument is a counter) -% \begin{macrocode} -\newcommand{\Ordinalstring}[1]{% -\expandafter\protect\expandafter\Ordinalstringnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Display ordinal as a string with initial letters in upper case -% (argument is a number or count register) -% \begin{macrocode} -\newcommand{\Ordinalstringnum}[1]{% -\@ifnextchar[{\@Ordinal@string{#1}}{\@Ordinal@string{#1}[m]}} -% \end{macrocode} -% Display ordinal as a string with initial letters in upper case -% according to gender -% \begin{macrocode} -\def\@Ordinal@string#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@OrdinalstringF{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@OrdinalstringN{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2'}{% -Available options are m, f or n}}% -\protect\@OrdinalstringM{#1}{\@fc@ordstr}}}\@fc@ordstr}} -% \end{macrocode} -% Store textual representation of number, with initial letters in -% upper case. First argument is identifying name, second argument -% is the counter set to the -% required number. -% \begin{macrocode} -\newcommand{\storeOrdinalstring}[2]{% -\expandafter\protect\expandafter\storeOrdinalstringnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% Store textual representation of number, with initial letters in -% upper case. First argument is identifying name, second argument -% is a count register or number. -% \begin{macrocode} -\newcommand{\storeOrdinalstringnum}[2]{% -\@ifnextchar[{\@store@Ordinal@string{#1}{#2}}{% -\@store@Ordinal@string{#1}{#2}[m]}} -% \end{macrocode} -% Store textual representation of number according to gender, -% with initial letters in upper case. -% \begin{macrocode} -\def\@store@Ordinal@string#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@OrdinalstringF{#2}{\@fc@ordstr}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@OrdinalstringN{#2}{\@fc@ordstr}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3'}{% -Available options are m or f}}% -\protect\@OrdinalstringM{#2}{\@fc@ordstr}}}% -\expandafter\let\csname @fcs@#1\endcsname\@fc@ordstr} -% \end{macrocode} -% Store upper case textual representation of ordinal. The first -% argument is identifying name, the second argument is a counter. -% \begin{macrocode} -\newcommand{\storeORDINALstring}[2]{% -\expandafter\protect\expandafter\storeORDINALstringnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% As above, but the second argument is a count register or a -% number. -% \begin{macrocode} -\newcommand{\storeORDINALstringnum}[2]{% -\@ifnextchar[{\@store@ORDINAL@string{#1}{#2}}{% -\@store@ORDINAL@string{#1}{#2}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument at the end. -% \begin{macrocode} -\def\@store@ORDINAL@string#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@ordinalstringF{#2}{\@fc@ordstr}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@ordinalstringN{#2}{\@fc@ordstr}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3'}{% -Available options are m or f}}% -\protect\@ordinalstringM{#2}{\@fc@ordstr}}}% -\expandafter\edef\csname @fcs@#1\endcsname{% -\noexpand\MakeUppercase{\@fc@ordstr}}} -% \end{macrocode} -% Display upper case textual representation of an ordinal. The -% argument must be a counter. -% \begin{macrocode} -\newcommand{\ORDINALstring}[1]{% -\expandafter\protect\expandafter\ORDINALstringnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As above, but the argument is a count register or a number. -% \begin{macrocode} -\newcommand{\ORDINALstringnum}[1]{% -\@ifnextchar[{\@ORDINAL@string{#1}}{\@ORDINAL@string{#1}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument at the end. -% \begin{macrocode} -\def\@ORDINAL@string#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@ordinalstringF{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@ordinalstringN{#1}{\@fc@ordstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2'}{% -Available options are m, f or n}}% -\protect\@ordinalstringM{#1}{\@fc@ordstr}}}% -\MakeUppercase{\@fc@ordstr}}} -% \end{macrocode} -% Convert number to textual respresentation, and store. First -% argument is the identifying name, second argument is a counter -% containing the number. -% \begin{macrocode} -\newcommand{\storenumberstring}[2]{% -\expandafter\protect\expandafter\storenumberstringnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% As above, but second argument is a number or count register. -% \begin{macrocode} -\newcommand{\storenumberstringnum}[2]{% -\@ifnextchar[{\@store@number@string{#1}{#2}}{% -\@store@number@string{#1}{#2}[m]}} -% \end{macrocode} -% Gender is given as optional argument, \emph{at the end}. -% \begin{macrocode} -\def\@store@number@string#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@numberstringF{#2}{\@fc@numstr}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@numberstringN{#2}{\@fc@numstr}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3'}{% -Available options are m, f or n}}% -\protect\@numberstringM{#2}{\@fc@numstr}}}% -\expandafter\let\csname @fcs@#1\endcsname\@fc@numstr} -% \end{macrocode} -% Display textual representation of a number. The argument -% must be a counter. -% \begin{macrocode} -\newcommand{\numberstring}[1]{% -\expandafter\protect\expandafter\numberstringnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As above, but the argument is a count register or a number. -% \begin{macrocode} -\newcommand{\numberstringnum}[1]{% -\@ifnextchar[{\@number@string{#1}}{\@number@string{#1}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument \emph{at the end}. -% \begin{macrocode} -\def\@number@string#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@numberstringF{#1}{\@fc@numstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@numberstringN{#1}{\@fc@numstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2'}{% -Available options are m, f or n}}% -\protect\@numberstringM{#1}{\@fc@numstr}}}\@fc@numstr}} -% \end{macrocode} -% Store textual representation of number. First argument is -% identifying name, second argument is a counter. -% \begin{macrocode} -\newcommand{\storeNumberstring}[2]{% -\expandafter\protect\expandafter\storeNumberstringnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% As above, but second argument is a count register or number. -% \begin{macrocode} -\newcommand{\storeNumberstringnum}[2]{% -\@ifnextchar[{\@store@Number@string{#1}{#2}}{% -\@store@Number@string{#1}{#2}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument \emph{at the end}: -% \begin{macrocode} -\def\@store@Number@string#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@NumberstringF{#2}{\@fc@numstr}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@NumberstringN{#2}{\@fc@numstr}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3'}{% -Available options are m, f or n}}% -\protect\@NumberstringM{#2}{\@fc@numstr}}}% -\expandafter\let\csname @fcs@#1\endcsname\@fc@numstr} -% \end{macrocode} -% Display textual representation of number. The argument must be -% a counter. -% \begin{macrocode} -\newcommand{\Numberstring}[1]{% -\expandafter\protect\expandafter\Numberstringnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As above, but the argument is a count register or number. -% \begin{macrocode} -\newcommand{\Numberstringnum}[1]{% -\@ifnextchar[{\@Number@string{#1}}{\@Number@string{#1}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument at the end. -% \begin{macrocode} -\def\@Number@string#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@NumberstringF{#1}{\@fc@numstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@NumberstringN{#1}{\@fc@numstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2'}{% -Available options are m, f or n}}% -\protect\@NumberstringM{#1}{\@fc@numstr}}}\@fc@numstr}} -% \end{macrocode} -% Store upper case textual representation of number. The first -% argument is identifying name, the second argument is a counter. -% \begin{macrocode} -\newcommand{\storeNUMBERstring}[2]{% -\expandafter\protect\expandafter\storeNUMBERstringnum{#1}{% -\expandafter\the\csname c@#2\endcsname}} -% \end{macrocode} -% As above, but the second argument is a count register or a -% number. -% \begin{macrocode} -\newcommand{\storeNUMBERstringnum}[2]{% -\@ifnextchar[{\@store@NUMBER@string{#1}{#2}}{% -\@store@NUMBER@string{#1}{#2}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument at the end. -% \begin{macrocode} -\def\@store@NUMBER@string#1#2[#3]{% -\ifthenelse{\equal{#3}{f}}{% -\protect\@numberstringF{#2}{\@fc@numstr}}{% -\ifthenelse{\equal{#3}{n}}{% -\protect\@numberstringN{#2}{\@fc@numstr}}{% -\ifthenelse{\equal{#3}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#3'}{% -Available options are m or f}}% -\protect\@numberstringM{#2}{\@fc@numstr}}}% -\expandafter\edef\csname @fcs@#1\endcsname{% -\noexpand\MakeUppercase{\@fc@numstr}}} -% \end{macrocode} -% Display upper case textual representation of a number. The -% argument must be a counter. -% \begin{macrocode} -\newcommand{\NUMBERstring}[1]{% -\expandafter\protect\expandafter\NUMBERstringnum{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As above, but the argument is a count register or a number. -% \begin{macrocode} -\newcommand{\NUMBERstringnum}[1]{% -\@ifnextchar[{\@NUMBER@string{#1}}{\@NUMBER@string{#1}[m]}} -% \end{macrocode} -% Gender is specified as an optional argument at the end. -% \begin{macrocode} -\def\@NUMBER@string#1[#2]{{% -\ifthenelse{\equal{#2}{f}}{% -\protect\@numberstringF{#1}{\@fc@numstr}}{% -\ifthenelse{\equal{#2}{n}}{% -\protect\@numberstringN{#1}{\@fc@numstr}}{% -\ifthenelse{\equal{#2}{m}}{}{% -\PackageError{fmtcount}{Invalid gender option `#2'}{% -Available options are m, f or n}}% -\protect\@numberstringM{#1}{\@fc@numstr}}}% -\MakeUppercase{\@fc@numstr}}} -% \end{macrocode} -% Number representations in other bases. Binary: -% \begin{macrocode} -\providecommand{\binary}[1]{% -\expandafter\protect\expandafter\@binary{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Like \verb"\alph", but goes beyond 26. (a \ldots\ z aa \ldots zz \ldots) -% \begin{macrocode} -\providecommand{\aaalph}[1]{% -\expandafter\protect\expandafter\@aaalph{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As before, but upper case. -% \begin{macrocode} -\providecommand{\AAAlph}[1]{% -\expandafter\protect\expandafter\@AAAlph{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Like \verb"\alph", but goes beyond 26. (a \ldots\ z ab \ldots az \ldots) -% \begin{macrocode} -\providecommand{\abalph}[1]{% -\expandafter\protect\expandafter\@abalph{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As above, but upper case. -% \begin{macrocode} -\providecommand{\ABAlph}[1]{% -\expandafter\protect\expandafter\@ABAlph{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Hexadecimal: -% \begin{macrocode} -\providecommand{\hexadecimal}[1]{% -\expandafter\protect\expandafter\@hexadecimal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% As above, but in upper case. -% \begin{macrocode} -\providecommand{\Hexadecimal}[1]{% -\expandafter\protect\expandafter\@Hexadecimal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Octal: -% \begin{macrocode} -\providecommand{\octal}[1]{% -\expandafter\protect\expandafter\@octal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -% Decimal: -% \begin{macrocode} -\providecommand{\decimal}[1]{% -\expandafter\protect\expandafter\@decimal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\subsubsection{Multilinguage Definitions} -% If multilingual support is provided, make \verb"\@numberstring" -% etc use the correct language (if defined). -% Otherwise use English definitions. "\@setdef@ultfmtcount" -% sets the macros to use English. -% \begin{macrocode} -\def\@setdef@ultfmtcount{ -\@ifundefined{@ordinalMenglish}{\input{fc-english.def}}{} -\def\@ordinalstringM{\@ordinalstringMenglish} -\let\@ordinalstringF=\@ordinalstringMenglish -\let\@ordinalstringN=\@ordinalstringMenglish -\def\@OrdinalstringM{\@OrdinalstringMenglish} -\let\@OrdinalstringF=\@OrdinalstringMenglish -\let\@OrdinalstringN=\@OrdinalstringMenglish -\def\@numberstringM{\@numberstringMenglish} -\let\@numberstringF=\@numberstringMenglish -\let\@numberstringN=\@numberstringMenglish -\def\@NumberstringM{\@NumberstringMenglish} -\let\@NumberstringF=\@NumberstringMenglish -\let\@NumberstringN=\@NumberstringMenglish -\def\@ordinalM{\@ordinalMenglish} -\let\@ordinalF=\@ordinalM -\let\@ordinalN=\@ordinalM -} -% \end{macrocode} -% Define a command to set macros to use "languagename": -% \begin{macrocode} -\def\@set@mulitling@fmtcount{% -% -\def\@numberstringM{\@ifundefined{@numberstringM\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@numberstringM}}{% -\csname @numberstringM\languagename\endcsname}}% -% -\def\@numberstringF{\@ifundefined{@numberstringF\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@numberstringF}}{% -\csname @numberstringF\languagename\endcsname}}% -% -\def\@numberstringN{\@ifundefined{@numberstringN\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@numberstringN}}{% -\csname @numberstringN\languagename\endcsname}}% -% -\def\@NumberstringM{\@ifundefined{@NumberstringM\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@NumberstringM}}{% -\csname @NumberstringM\languagename\endcsname}}% -% -\def\@NumberstringF{\@ifundefined{@NumberstringF\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@NumberstringF}}{% -\csname @NumberstringF\languagename\endcsname}}% -% -\def\@NumberstringN{\@ifundefined{@NumberstringN\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@NumberstringN}}{% -\csname @NumberstringN\languagename\endcsname}}% -% -\def\@ordinalM{\@ifundefined{@ordinalM\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@ordinalM}}{% -\csname @ordinalM\languagename\endcsname}}% -% -\def\@ordinalF{\@ifundefined{@ordinalF\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@ordinalF}}{% -\csname @ordinalF\languagename\endcsname}}% -% -\def\@ordinalN{\@ifundefined{@ordinalN\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@ordinalN}}{% -\csname @ordinalN\languagename\endcsname}}% -% -\def\@ordinalstringM{\@ifundefined{@ordinalstringM\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@ordinalstringM}}{% -\csname @ordinalstringM\languagename\endcsname}}% -% -\def\@ordinalstringF{\@ifundefined{@ordinalstringF\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@ordinalstringF}}{% -\csname @ordinalstringF\languagename\endcsname}}% -% -\def\@ordinalstringN{\@ifundefined{@ordinalstringN\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@ordinalstringN}}{% -\csname @ordinalstringN\languagename\endcsname}}% -% -\def\@OrdinalstringM{\@ifundefined{@OrdinalstringM\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@OrdinalstringM}}{% -\csname @OrdinalstringM\languagename\endcsname}}% -% -\def\@OrdinalstringF{\@ifundefined{@OrdinalstringF\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@OrdinalstringF}}{% -\csname @OrdinalstringF\languagename\endcsname}}% -% -\def\@OrdinalstringN{\@ifundefined{@OrdinalstringN\languagename}{% -\PackageError{fmtcount}{No support for language '\languagename'}{% -The fmtcount package currently does not support language -'\languagename' for command \string\@OrdinalstringN}}{% -\csname @OrdinalstringN\languagename\endcsname}} -} -% \end{macrocode} -% Check to see if babel or ngerman packages have been loaded. -% \begin{macrocode} -\@ifpackageloaded{babel}{% -\ifthenelse{\equal{\languagename}{nohyphenation}\or -\equal{languagename}{english}}{\@setdef@ultfmtcount}{% -\@set@mulitling@fmtcount} -}{% -\@ifpackageloaded{ngerman}{% -\@ifundefined{@numberstringMgerman}{% -\input{fc-german.def}}{}\@set@mulitling@fmtcount}{% -\@setdef@ultfmtcount}} -% \end{macrocode} -% Backwards compatibility: -% \begin{macrocode} -\let\@ordinal=\@ordinalM -\let\@ordinalstring=\@ordinalstringM -\let\@Ordinalstring=\@OrdinalstringM -\let\@numberstring=\@numberstringM -\let\@Numberstring=\@NumberstringM -% \end{macrocode} -%\iffalse -% \begin{macrocode} -% -% \end{macrocode} -%\fi -%\Finale -\endinput diff --git a/Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.ins b/Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.ins deleted file mode 100644 index 5342dd34fbd..00000000000 --- a/Master/texmf-dist/doc/latex/fmtcount/source/fmtcount.ins +++ /dev/null @@ -1,35 +0,0 @@ -% fmtcount.ins generated using makedtx version 0.91b 2007/6/14 21:12 -\input docstrip - -\preamble -Copyright (C) 2007 Nicola Talbot, all rights reserved. -If you modify this file, you must change its name first. -You are NOT ALLOWED to distribute this file alone. You are NOT -ALLOWED to take money for the distribution or use of either this -file or a changed version, except for a nominal charge for copying -etc. -\endpreamble - -\askforoverwritefalse - -\generate{\file{fc-german.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-german.def,package}} -\file{fc-french.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-french.def,package}} -\file{fc-english.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-english.def,package}} -\file{fc-USenglish.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-USenglish.def,package}} -\file{fmtcount.sty}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fmtcount.sty,package}} -\file{fc-UKenglish.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-UKenglish.def,package}} -\file{fc-portuges.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-portuges.def,package}} -\file{fc-british.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-british.def,package}} -\file{fc-spanish.def}{\usepreamble\defaultpreamble -\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-spanish.def,package}} -} - -\endbatchfile -- cgit v1.2.3