diff options
Diffstat (limited to 'Master/texmf-dist')
22 files changed, 3487 insertions, 4075 deletions
diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES b/Master/texmf-dist/doc/latex/fmtcount/CHANGES index ea92a56993a..2bf2c037047 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/CHANGES +++ b/Master/texmf-dist/doc/latex/fmtcount/CHANGES @@ -1,5 +1,14 @@ fmtcount package versions: +Version 1.31: + + * fixed unwanted space in \decimalnum + + * fixed bug that ignores spaces after commands like + \ordinalnum. + + * added Italian support (translations provided by Edoardo Pasca) + Version 1.3: * no longer loads xspace package (was causing extraneous diff --git a/Master/texmf-dist/doc/latex/fmtcount/README b/Master/texmf-dist/doc/latex/fmtcount/README index 9efe57f814a..fa6dd14ad0c 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.3 +LaTeX Package : fmtcount v 1.31 -Last Modified : 20 Aug 2007 +Last Modified : 2 October 2009 Author : Nicola Talbot diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/fc-samp.tex b/Master/texmf-dist/doc/latex/fmtcount/doc/fc-samp.tex deleted file mode 100644 index 7ca4d1c57f5..00000000000 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/fc-samp.tex +++ /dev/null @@ -1,98 +0,0 @@ -\documentclass[a4paper]{article} - -\usepackage{fmtcount} -\newcounter{N} - -\padzeroes[5] - -\newcommand{\printrow}[1]{% -\newline -\setcounter{N}{#1} -\makebox[0.75in][r]{\decimal{N}\quad} -\makebox[0.75in][r]{\hexadecimal{N}\quad} -\makebox[0.75in][r]{\ordinal{N}\quad} -\makebox[2in][l]{\numberstring{N}} -} - -\renewcommand{\thesection}{\ordinal{section}} - -\begin{document} - -\section{Displaying the value of a counter} -\label{ex} - -\begin{ttfamily} -\noindent -\makebox[0.75in][c]{decimal} -\makebox[0.75in][c]{hexadecimal} -\makebox[0.75in][c]{ordinal} -numberstring -\printrow{0} -\printrow{1} -\printrow{2} -\printrow{3} -\printrow{4} -\printrow{5} -\printrow{6} -\printrow{7} -\printrow{8} -\printrow{9} -\printrow{10} -\printrow{11} -\printrow{12} -\printrow{13} -\printrow{14} -\printrow{15} -\printrow{16} -\printrow{17} -\printrow{18} -\printrow{19} -\printrow{20} -\printrow{21} -\printrow{22} -\printrow{23} -\printrow{24} -\printrow{25} -\printrow{30} -\printrow{40} -\printrow{50} -\printrow{60} -\printrow{70} -\printrow{71} -\printrow{75} -\printrow{80} -\printrow{81} -\printrow{85} -\printrow{90} -\printrow{91} -\printrow{95} -\printrow{100} -\printrow{101} -\printrow{110} -\printrow{125} -\printrow{150} -\printrow{170} -\printrow{180} -\printrow{190} -\printrow{200} -\printrow{250} -\printrow{300} -\printrow{400} -\printrow{500} -\printrow{600} -\printrow{700} -\printrow{800} -\printrow{900} -\printrow{1000} -\printrow{99999} -\end{ttfamily} - -\section{Cross-Referencing} - -Referencing a label: \ref{ex}. - -Passing numbers explicitly: \ordinalnum{10}, -\Numberstringnum{10}, \NUMBERstringnum{10}, \Ordinalstringnum{10}, -\ORDINALstringnum{10}. - -\end{document} diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf b/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf Binary files differdeleted file mode 100644 index 84132f07fb4..00000000000 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/fc-lang.tex b/Master/texmf-dist/doc/latex/fmtcount/fc-lang.tex index a084c7290a9..68925e045b2 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/fc-lang.tex +++ b/Master/texmf-dist/doc/latex/fmtcount/fc-lang.tex @@ -1,10 +1,50 @@ +%% +%% This is file `fc-lang.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fmtcount.dtx (with options: `fc-lang.tex,package') +%% +%% fmtcount.dtx +%% Copyright 2009 Nicola Talbot +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license of (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Nicola Talbot. +%% +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. +%% +%% \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 \~} % This is an interactive script. Run it through \LaTeX - % and enter appropriate responses. (This won't work with + % and enter appropriate responses. (This won't work with % LaTeX2HTML \documentclass[a4paper]{article} -\usepackage[french,english,spanish,portuges,ngerman]{babel} +\usepackage[french,english,spanish,portuges,ngerman,italian]{babel} \usepackage{fmtcount} \newcounter{startval} @@ -31,6 +71,7 @@ \typeout{[5] French (Swiss)} \typeout{[6] French (Belgium)} \typeout{[7] German} +\typeout{[8] Italian} \typein[\response]{} @@ -40,9 +81,10 @@ \ifthenelse{\equal{\response}{4}}{\langid=4\fmtcountsetoptions{french}}{ \ifthenelse{\equal{\response}{5}}{\langid=5\fmtcountsetoptions{french=swiss}}{ \ifthenelse{\equal{\response}{6}}{\langid=6\fmtcountsetoptions{french=belgian}} -{\ifthenelse{\equal{\response}{7}}{\langid=7}{ +{\ifthenelse{\equal{\response}{7}}{\langid=7}{% +\ifthenelse{\equal{\response}{8}}{\langid=8}{% \langid=-1 -\typeout{Invalid response '\response', please select a number from 1 to 6}}}}}}}} +\typeout{Invalid response '\response', please select a number from 1 to 6}}}}}}}}} \ifnum\langid=-1 \repeat @@ -61,6 +103,8 @@ Current language: French (Swiss). Current language: French (Belgium). \or \selectlanguage{ngerman} Current language: German. +\or \selectlanguage{italian} +Current language: Italian. \fi \def\startval{-1} @@ -144,22 +188,38 @@ Current language: German. \or\def\stringtype{NUMBERstring} \fi -\ifthenelse{\langid>3 \and \langid < 7}{% -\myctr=-1 -\loop -\typeout{Ordinal type?^^J} -\typeout{[1] eme} -\typeout{[2] e} -\typein[\response]{Default: 1} -\ifthenelse{\equal{\response}{}}{\def\response{1}}{}%default -\ifthenelse{\equal{\response}{1}}{% -\fmtcountsetoptions{abbrv=false}\myctr=1}{% -\ifthenelse{\equal{\response}{2}}{% -\fmtcountsetoptions{abbrv}\myctr=2}{% -\myctr=-1}} -\ifnum\myctr=-1 -\repeat -}{} +\ifnum\langid>3\relax + \ifnum\langid<7\relax + \myctr=-1\relax + \loop + \typeout{Ordinal type?^^J} + \typeout{[1] eme} + \typeout{[2] e} + \typein[\response]{Default: 1} + \ifthenelse{\equal{\response}{}}% + {% + \def\response{1}% default + \myctr=1\relax + }% + {% + \ifthenelse{\equal{\response}{1}}% + {% + \fmtcountsetoptions{abbrv=false}\myctr=1\relax + }% + {% + \ifthenelse{\equal{\response}{2}}% + {% + \fmtcountsetoptions{abbrv}\myctr=2\relax + }% + {% + \myctr=-1\relax + }% + }% + }% + \ifnum\myctr=-1 + \repeat + \fi +\fi \myctr=-1 \loop @@ -182,15 +242,19 @@ Current language: German. \loop \ifnum\langid=7 \typein[\response]{Gender? (m, f or n) [Default: m]} - \ifthenelse{\equal{\response}{m}\or\equal{\response}{}}{\myctr=1}{ + \ifthenelse{\equal{\response}{m}}{\myctr=1}{ \ifthenelse{\equal{\response}{f}}{\myctr=2}{ - \ifthenelse{\equal{\response}{n}}{\myctr=3}{\myctr=-1 - \typeout{Invalid response '\response'}}}} + \ifthenelse{\equal{\response}{n}}{\myctr=3}{ + \ifthenelse{\equal{\response}{}}{\myctr=1}{% + \myctr=-1 + \typeout{Invalid response '\response'}}}}} \else \typein[\response]{Gender? (m or f) [Default: m]} - \ifthenelse{\equal{\response}{m}\or\equal{\response}{}}{\myctr=1}{ - \ifthenelse{\equal{\response}{f}}{\myctr=2}{\myctr=-1 - \typeout{Invalid response '\response'}}} + \ifthenelse{\equal{\response}{m}}{\myctr=1}{ + \ifthenelse{\equal{\response}{f}}{\myctr=2}{% + \ifthenelse{\equal{\response}{}}{\myctr=1}{% + \myctr=-1 + \typeout{Invalid response '\response'}}}} \fi \ifnum\myctr=-1 \repeat @@ -232,14 +296,14 @@ Current language: German. \stepcounter{endval} \begin{ttfamily} -\noindent +\noindent \makebox[0.25in][c]{N} \makebox[0.5in][c]{ordinal}\quad \stringtype \par \myctr=\value{startval} \loop -\noindent +\noindent \setcounter{N}{\myctr} \makebox[0.25in][r]{\arabic{N}} \makebox[0.5in][r]{\ordinal{N}[\gender]}\quad @@ -252,3 +316,6 @@ Current language: German. \end{ttfamily} \end{document} +\endinput +%% +%% End of file `fc-lang.tex'. diff --git a/Master/texmf-dist/doc/latex/fmtcount/fc-samp.tex b/Master/texmf-dist/doc/latex/fmtcount/fc-samp.tex new file mode 100644 index 00000000000..1faa491666d --- /dev/null +++ b/Master/texmf-dist/doc/latex/fmtcount/fc-samp.tex @@ -0,0 +1,141 @@ +%% +%% This is file `fc-samp.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fmtcount.dtx (with options: `fc-samp.tex,package') +%% +%% fmtcount.dtx +%% Copyright 2009 Nicola Talbot +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license of (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Nicola Talbot. +%% +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. +%% +%% \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 \~} +\documentclass[a4paper]{article} + +\usepackage{fmtcount} +\newcounter{N} + +\padzeroes[5] + +\newcommand{\printrow}[1]{% +\newline +\setcounter{N}{#1} +\makebox[0.75in][r]{\decimal{N}\quad} +\makebox[0.75in][r]{\hexadecimal{N}\quad} +\makebox[0.75in][r]{\ordinal{N}\quad} +\makebox[2in][l]{\numberstring{N}} +} + +\renewcommand{\thesection}{\ordinal{section}} + +\begin{document} + +\section{Displaying the value of a counter} +\label{ex} + +\begin{ttfamily} +\noindent +\makebox[0.75in][c]{decimal} +\makebox[0.75in][c]{hexadecimal} +\makebox[0.75in][c]{ordinal} +numberstring +\printrow{0} +\printrow{1} +\printrow{2} +\printrow{3} +\printrow{4} +\printrow{5} +\printrow{6} +\printrow{7} +\printrow{8} +\printrow{9} +\printrow{10} +\printrow{11} +\printrow{12} +\printrow{13} +\printrow{14} +\printrow{15} +\printrow{16} +\printrow{17} +\printrow{18} +\printrow{19} +\printrow{20} +\printrow{21} +\printrow{22} +\printrow{23} +\printrow{24} +\printrow{25} +\printrow{30} +\printrow{40} +\printrow{50} +\printrow{60} +\printrow{70} +\printrow{71} +\printrow{75} +\printrow{80} +\printrow{81} +\printrow{85} +\printrow{90} +\printrow{91} +\printrow{95} +\printrow{100} +\printrow{101} +\printrow{110} +\printrow{125} +\printrow{150} +\printrow{170} +\printrow{180} +\printrow{190} +\printrow{200} +\printrow{250} +\printrow{300} +\printrow{400} +\printrow{500} +\printrow{600} +\printrow{700} +\printrow{800} +\printrow{900} +\printrow{1000} +\printrow{99999} +\end{ttfamily} + +\section{Cross-Referencing} + +Referencing a label: \ref{ex}. + +Passing numbers explicitly: \ordinalnum{10}, +\Numberstringnum{10}, \NUMBERstringnum{10}, \Ordinalstringnum{10}, +\ORDINALstringnum{10}. + +\end{document} +\endinput +%% +%% End of file `fc-samp.tex'. diff --git a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount-manual.html b/Master/texmf-dist/doc/latex/fmtcount/fmtcount-manual.html index 2d7fd1c0d6e..6b9887eafde 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/doc/fmtcount-manual.html +++ b/Master/texmf-dist/doc/latex/fmtcount/fmtcount-manual.html @@ -7,9 +7,9 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> -<TITLE>fmtcount.sty v1.3: Displaying the Values of LaTeX Counters</TITLE> -<META NAME="description" CONTENT="fmtcount.sty v1.3: Displaying the Values of LaTeX Counters"> -<META NAME="keywords" CONTENT="manual"> +<TITLE>fmtcount.sty v1.31: Displaying the Values of LaTeX Counters</TITLE> +<META NAME="description" CONTENT="fmtcount.sty v1.31: Displaying the Values of LaTeX Counters"> +<META NAME="keywords" CONTENT="fmtcount-manual"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> @@ -24,7 +24,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds <P> - <H1 ALIGN="CENTER">fmtcount.sty v1.3: Displaying the Values of + <H1 ALIGN="CENTER">fmtcount.sty v1.31: Displaying the Values of LaTeX Counters</H1> <P ALIGN="CENTER"><STRONG>Nicola L.C. Talbot <BR> @@ -38,7 +38,7 @@ Norwich. NR4 7TJ. United Kingdom. <BR> <TT><A NAME="tex2html1" HREF="http://theoval.cmp.uea.ac.uk/~nlct/">http://theoval.cmp.uea.ac.uk/~nlct/</A></TT></STRONG></P> -<P ALIGN="CENTER"><STRONG>20 Aug 2007</STRONG></P> +<P ALIGN="CENTER"><STRONG>2nd October 2009</STRONG></P> <BR> <H2><A NAME="SECTION00010000000000000000"> @@ -47,24 +47,24 @@ Contents</A> <!--Table of Contents--> <UL> -<LI><A NAME="tex2html16" - HREF="manual.html#SECTION00020000000000000000">Introduction</A> <LI><A NAME="tex2html17" - HREF="manual.html#SECTION00030000000000000000">Installation</A> + HREF="fmtcount-manual.html#SECTION00020000000000000000">Introduction</A> <LI><A NAME="tex2html18" - HREF="manual.html#SECTION00040000000000000000">Available Commands</A> + HREF="fmtcount-manual.html#SECTION00030000000000000000">Installation</A> <LI><A NAME="tex2html19" - HREF="manual.html#SECTION00050000000000000000">Package Options</A> + HREF="fmtcount-manual.html#SECTION00040000000000000000">Available Commands</A> <LI><A NAME="tex2html20" - HREF="manual.html#SECTION00060000000000000000">Multilingual Support</A> + HREF="fmtcount-manual.html#SECTION00050000000000000000">Package Options</A> <LI><A NAME="tex2html21" - HREF="manual.html#SECTION00070000000000000000">Configuration File fmtcount.cfg</A> + HREF="fmtcount-manual.html#SECTION00060000000000000000">Multilingual Support</A> <LI><A NAME="tex2html22" - HREF="manual.html#SECTION00080000000000000000">LaTeX2HTML style</A> + HREF="fmtcount-manual.html#SECTION00070000000000000000">Configuration File fmtcount.cfg</A> <LI><A NAME="tex2html23" - HREF="manual.html#SECTION00090000000000000000">Acknowledgements</A> + HREF="fmtcount-manual.html#SECTION00080000000000000000">LaTeX2HTML style</A> <LI><A NAME="tex2html24" - HREF="manual.html#SECTION000100000000000000000">Troubleshooting</A> + HREF="fmtcount-manual.html#SECTION00090000000000000000">Acknowledgements</A> +<LI><A NAME="tex2html25" + HREF="fmtcount-manual.html#SECTION000100000000000000000">Troubleshooting</A> </UL> <!--End of Table of Contents--> <H1><A NAME="SECTION00020000000000000000"> @@ -75,7 +75,8 @@ 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. +Belgian and Swiss variations), Spanish, Portuguese, German and +Italian. <P> @@ -194,7 +195,7 @@ upper case. Note that <code>\MakeUppercase{\NUMBERstring{</code><I>counter</I><code>}}</code> doesn't work, due to the way that <TT>\MakeUppercase</TT> expands its argument<A NAME="tex2html2" - HREF="#foot515"><SUP>1</SUP></A>. + HREF="#foot518"><SUP>1</SUP></A>. <P> @@ -508,10 +509,10 @@ The following options can be passed to this package: <P> <TABLE CELLPADDING=3> -<TR><TD ALIGN="LEFT">raise</TD> +<TR><TD ALIGN="LEFT"><TT>raise</TT></TD> <TD ALIGN="LEFT">make ordinal st,nd,rd,th appear as superscript</TD> </TR> -<TR><TD ALIGN="LEFT">level</TD> +<TR><TD ALIGN="LEFT"><TT>level</TT></TD> <TD ALIGN="LEFT">make ordinal st,nd,rd,th appear level with rest of text</TD> </TR> @@ -539,13 +540,13 @@ Version 1.02 of the <TT>fmtcount</TT> 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<A NAME="tex2html3" - HREF="#foot461"><SUP>2</SUP></A>. - +1.1.<A NAME="tex2html3" + HREF="#foot463"><SUP>2</SUP></A>Italian support was added in version 1.31.<A NAME="tex2html4" + HREF="#foot464"><SUP>3</SUP></A> <P> The package checks to see if the command <TT>\l@</TT><I>language</I> is -defined<A NAME="tex2html4" - HREF="#foot516"><SUP>3</SUP></A>, +defined<A NAME="tex2html5" + HREF="#foot519"><SUP>4</SUP></A>, and will load the code for those languages. The commands <TT>\ordinal</TT>, <TT>\ordinalstring</TT> and <TT>\numberstring</TT> (and their variants) will then be formatted in the currently selected language. @@ -653,7 +654,8 @@ Acknowledgements</A> 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. +translations and to Edoardo Pasca for providing me with the +Italian translations. <P> @@ -663,38 +665,44 @@ Troubleshooting</A> <P> There is a FAQ available at: -<TT><A NAME="tex2html5" +<TT><A NAME="tex2html6" HREF="http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/">http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/</A></TT>. <P> <BR><HR><H4>Footnotes</H4> <DL> -<DT><A NAME="foot515">... +<DT><A NAME="foot518">... argument</A><A - HREF="manual.html#tex2html2"><SUP>1</SUP></A></DT> + HREF="fmtcount-manual.html#tex2html2"><SUP>1</SUP></A></DT> <DD>See all the various postings to <TT>comp.text.tex</TT> about <TT>\MakeUppercase</TT> </DD> -<DT><A NAME="foot461">... -1.1</A><A - HREF="manual.html#tex2html3"><SUP>2</SUP></A></DT> -<DD>Thanks to K. H. Fricke for supplying the information +<DT><A NAME="foot463">... +1.1.</A><A + HREF="fmtcount-manual.html#tex2html3"><SUP>2</SUP></A></DT> +<DD>Thanks to K. H. Fricke for supplying the information. + +</DD> +<DT><A NAME="foot464">... 1.31.</A><A + HREF="fmtcount-manual.html#tex2html4"><SUP>3</SUP></A></DT> +<DD>Thanks to +Edoardo Pasca for supplying the information. </DD> -<DT><A NAME="foot516">... +<DT><A NAME="foot519">... defined</A><A - HREF="manual.html#tex2html4"><SUP>3</SUP></A></DT> + HREF="fmtcount-manual.html#tex2html5"><SUP>4</SUP></A></DT> <DD>this will be true if you have loaded <TT>babel</TT> </DD> </DL> <BR><HR> <ADDRESS> -<A href=http://theoval.cmp.uea.ac.uk/~nlct/>Nicola L. C. Talbot</A>. -<A HREF=http://www.cmp.uea.ac.uk/>School of Computing Sciences</A>. -<A HREF=http://www.uea.ac.uk/>University of East Anglia.</A> -Last Modified: 2007-08-20 +<A href="http://theoval.cmp.uea.ac.uk/~nlct/">Nicola L. C. Talbot</A>. +<A HREF="http://www.cmp.uea.ac.uk/">School of Computing Sciences</A>. +<A HREF="http://www.uea.ac.uk/">University of East Anglia.</A> +Last Modified: 2009-10-02 </ADDRESS> </BODY> </HTML> diff --git a/Master/texmf-dist/doc/latex/fmtcount/fmtcount.pdf b/Master/texmf-dist/doc/latex/fmtcount/fmtcount.pdf Binary files differnew file mode 100644 index 00000000000..8448794662c --- /dev/null +++ b/Master/texmf-dist/doc/latex/fmtcount/fmtcount.pdf diff --git a/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl b/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl deleted file mode 100644 index bc7d3b9fb4e..00000000000 --- a/Master/texmf-dist/doc/latex/fmtcount/latex2html/fmtcount.perl +++ /dev/null @@ -1,2670 +0,0 @@ -# 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("", "<SUP>",$suffix,"</SUP>",$_);'; - $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/source/latex/fmtcount/fmtcount.dtx b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx index 2bb59106fea..0fbf2f94beb 100644 --- a/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx +++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx @@ -1,17 +1,19 @@ %\iffalse % fmtcount.dtx generated using makedtx version 0.94b (c) Nicola Talbot % Command line args: +% -macrocode ".*\.tex" % -macrocode "fmtcount.perl" % -setambles "fmtcount.perl=>\nopreamble\nopostamble" % -comment "fmtcount.perl" -% -src "(.+)\.(def)=>\1.\2" % -src "(.+)\.(sty)=>\1.\2" +% -src "(.+)\.(def)=>\1.\2" % -src "(fmtcount\.perl)=>\1" -% -doc "manual.tex" +% -src "(fc-.+\.tex\Z)=>\1" +% -doc "fmtcount-manual.tex" % -author "Nicola Talbot" % -dir "source" % fmtcount -% Created on 2007/8/20 12:28 +% Created on 2009/10/2 18:35 %\fi %\iffalse %<*package> @@ -34,7 +36,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2007 Nicola Talbot, all rights reserved. +% Copyright (C) 2009 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> @@ -66,19 +68,20 @@ \fcolorbox{black}{defbackground}{\usebox\defsbox}% \vskip10pt } -\OnlyDescription \newcommand{\sty}[1]{\textsf{#1}}\newcommand{\cls}[1]{\textsf{#1}} +\CheckSum{9371} +\OnlyDescription + \begin{document} \DocInput{fmtcount.dtx} \end{document} %</driver> %\fi %\RecordChanges -%\CheckSum{7745} % -% \title{fmtcount.sty v1.3: Displaying the Values of +% \title{fmtcount.sty v1.31: Displaying the Values of %\LaTeX\ Counters} % \author{Nicola L.C. Talbot\\[10pt] % School of Computing Sciences\\ @@ -86,7 +89,7 @@ % Norwich. NR4 7TJ.\\ % United Kingdom.\\ % \url{http://theoval.cmp.uea.ac.uk/~nlct/}} -% \date{20 Aug 2007} +% \date{2nd October 2009} % \maketitle % \tableofcontents % \section{Introduction} @@ -95,7 +98,8 @@ %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. +%Belgian and Swiss variations), Spanish, Portuguese, German and +%Italian. % %\section{Installation} % @@ -489,8 +493,8 @@ %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 +% \texttt{raise} & make ordinal st,nd,rd,th appear as superscript\\ +% \texttt{level} & make ordinal st,nd,rd,th appear level with rest of %text %\end{tabular} % @@ -509,7 +513,9 @@ %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}. +%1.1.\footnote{Thanks to K. H. Fricke for supplying the information.} +%Italian support was added in version 1.31.\footnote{Thanks to +%Edoardo Pasca for supplying the information.} % %The package checks to see if the command \cs{l@}\meta{language} is %defined\footnote{this will be true if you have loaded \sty{babel}}, @@ -594,7 +600,8 @@ %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. +%translations and to Edoardo Pasca for providing me with the +%Italian translations. % %\section{Troubleshooting} % @@ -607,10 +614,1220 @@ %\section{The Code} %\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}[2009/10/02 v1.31] +\RequirePackage{ifthen} +\RequirePackage{keyval} +% \end{macrocode} +% \changes{1.3}{2007/7/19}{no +%longer using xspace package} +%\changes{1.31}{2009/10/02}{amsgen now loaded (\cs{new@ifnextchar} +% needed)} +% Need to use \cs{new@ifnextchar} instead of \cs{@ifnextchar} in +% commands that have a final optional argument (such as \cs{gls}) +% so require \sty{amsgen}. +% \begin{macrocode} +\RequirePackage{amsgen} +% \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{macro}{\fmtord} +% \begin{macrocode} +\providecommand*{\fmtord}[1]{\textsuperscript{#1}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\padzeroes} +%\begin{definition} +%\cs{padzeroes}\oarg{n} +%\end{definition} +% Specifies how many digits should be displayed for commands such as +% \cs{decimal} and \cs{binary}. +% \begin{macrocode} +\newcount\c@padzeroesN +\c@padzeroesN=1\relax +\providecommand*{\padzeroes}[1][17]{\c@padzeroesN=#1} +% \end{macrocode} +%\end{macro} +% Load appropriate language definition files: +%\changes{v1.1}{14 June 2007}{added check for UKenglish, +% british and USenglish babel settings} +% \begin{macrocode} +\@ifundefined{l@english}{}{\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{l@spanish}{}{\input{fc-spanish.def}} +\@ifundefined{l@portuges}{}{\input{fc-portuges.def}} +\@ifundefined{l@french}{}{\input{fc-french.def}} +\@ifundefined{l@german}{% +\@ifundefined{l@ngerman}{}{\input{fc-german.def}}}{% +\input{fc-german.def}} +\@ifundefined{l@italian}{}{\input{fc-italian.def}} +% \end{macrocode} +%\begin{macro}{\fmtcount@french} +% 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} +%\end{macro} +% 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} +%\begin{macro}{\iffmtord@abbrv} +% 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} +%\end{macro} +%\begin{macro}{\fmtcountsetoptions} +% 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} +%\end{macro} +% 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} +%\begin{macro}{\@modulo} +%\begin{definition} +%\cs{@modulo}\marg{count reg}\marg{n} +%\end{definition} +% Sets the count register to be its value modulo \meta{n}. +% 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} +%\end{macro} +% 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} +%\begin{macro}{\binarynum} +% Converts a decimal number to binary, and display. +% \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} +%\end{macro} +%\begin{macro}{\octalnum} +% Converts a decimal number to octal, and displays. +% \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} +%\end{macro} +%\begin{macro}{\hexadecimalnum} +% Converts a decimal number to a lowercase hexadecimal number, +% and displays it. +% \begin{macrocode} +\newcommand*{\@@hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or +6\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} +%\end{macro} +%\begin{macro}{\Hexadecimalnum} +% 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} +%\end{macro} +%\begin{macro}{\aaalphnum} +% Lowercase 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} +%\end{macro} +%\begin{macro}{\AAAlphnum} +% 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} +%\end{macro} +%\begin{macro}{\abalphnum} +% Lowercase alphabetical representation +% \begin{macrocode} +\newcommand*{\@abalph}[1]{% +\ifnum#1>17576\relax +\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} +%\end{macro} +%\begin{macro}{\ABAlphnum} +% Uppercase alphabetical representation +% \begin{macrocode} +\newcommand*{\@ABAlph}[1]{% +\ifnum#1>17576\relax +\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} +%\end{macro} +%\begin{macro}{\@fmtc@count} +% 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} +%\end{macro} +%\begin{macro}{\@decimal} +%\changes{1.31}{2009/10/02}{fixed unwanted space.} +% Format number as a decimal, possibly padded with zeroes in front. +% \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\relax}% +\fi +\number#1\relax +} + +\let\decimalnum=\@decimal +% \end{macrocode} +%\end{macro} +%\begin{macro}{\FCordinal} +%\begin{definition} +%\cs{FCordinal}\marg{number} +%\end{definition} +% This is a bit cumbersome. Previously \cs{@ordinal} +% was defined in a similar way to \cs{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. +% Note however, that putting the optional argument means that +% any spaces will be ignored after the command if the optional +% argument is omitted. +% Version 1.04 changed \cs{ordinal} to \cs{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} +%\end{macro} +%\begin{macro}{\ordinal} +% If \cs{ordinal} isn't defined make \cs{ordinal} a synonym +% for \cs{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} +%\end{macro} +%\begin{macro}{\ordinalnum} +% Display ordinal where value is given as a number or +% count register instead of a counter: +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand*{\ordinalnum}[1]{\new@ifnextchar[{\@ordinalnum{#1}}{% +\@ordinalnum{#1}[m]}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@ordinalnum} +% Display ordinal according to gender (neuter added in v1.1, +% \cs{xspace} added in v1.2, and removed in v1.3\footnote{I +%couldn't get it to work consistently both with and without the +%optional argument}): +% \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} +%\end{macro} +%\begin{macro}{\storeordinal} +% 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} +%\end{macro} +%\begin{macro}{\storeordinalnum} +% 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} +%\end{macro} +%\begin{macro}{\@storeordinalnum} +% 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} +%\end{macro} +%\begin{macro}{\FMCuse} +% Get stored information: +% \begin{macrocode} +\newcommand*{\FMCuse}[1]{\csname @fcs@#1\endcsname} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\ordinalstring} +% 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} +%\end{macro} +%\begin{macro}{\ordinalstringnum} +% Display ordinal as a string (argument is a count register or +% number.) +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand{\ordinalstringnum}[1]{% +\new@ifnextchar[{\@ordinal@string{#1}}{\@ordinal@string{#1}[m]}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@ordinal@string} +% 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} +%\end{macro} +%\begin{macro}{\storeordinalstring} +% 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} +%\end{macro} +%\begin{macro}{\storeordinalstringnum} +% 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} +%\end{macro} +%\begin{macro}{\@store@ordinal@string} +% 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} +%\end{macro} +%\begin{macro}{\Ordinalstring} +% 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} +%\end{macro} +%\begin{macro}{\Ordinalstringnum} +% Display ordinal as a string with initial letters in upper case +% (argument is a number or count register) +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand*{\Ordinalstringnum}[1]{% +\new@ifnextchar[{\@Ordinal@string{#1}}{\@Ordinal@string{#1}[m]}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@Ordinal@string} +% 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} +%\end{macro} +%\begin{macro}{\storeOrdinalstring} +% 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} +%\end{macro} +%\begin{macro}{\storeOrdinalstringnum} +% 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} +%\end{macro} +%\begin{macro}{\@store@Ordinal@string} +% 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} +%\end{macro} +% +%\begin{macro}{\storeORDINALstring} +% 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} +%\end{macro} +%\begin{macro}{\storeORDINALstringnum} +% 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} +%\end{macro} +%\begin{macro}{\@store@ORDINAL@string} +% 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} +%\end{macro} +%\begin{macro}{\ORDINALstring} +% 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} +%\end{macro} +%\begin{macro}{\ORDINALstringnum} +% As above, but the argument is a count register or a number. +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand*{\ORDINALstringnum}[1]{% +\new@ifnextchar[{\@ORDINAL@string{#1}}{\@ORDINAL@string{#1}[m]}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@ORDINAL@string} +% 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} +%\end{macro} +%\begin{macro}{\storenumberstring} +% 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} +%\end{macro} +%\begin{macro}{\storenumberstringnum} +% 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} +%\end{macro} +%\begin{macro}{\@store@number@string} +% 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} +%\end{macro} +%\begin{macro}{\numberstring} +% 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} +%\end{macro} +%\begin{macro}{\numberstringnum} +% As above, but the argument is a count register or a number. +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand*{\numberstringnum}[1]{% +\new@ifnextchar[{\@number@string{#1}}{\@number@string{#1}[m]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@number@string} +% 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} +%\end{macro} +%\begin{macro}{\storeNumberstring} +% 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} +%\end{macro} +%\begin{macro}{\storeNumberstringnum} +% 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} +%\end{macro} +%\begin{macro}{\@store@Number@string} +% 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} +%\end{macro} +%\begin{macro}{\Numberstring} +% 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} +%\end{macro} +%\begin{macro}{\Numberstringnum} +% As above, but the argument is a count register or number. +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand*{\Numberstringnum}[1]{% +\new@ifnextchar[{\@Number@string{#1}}{\@Number@string{#1}[m]}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@Number@string} +% 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} +%\end{macro} +%\begin{macro}{\storeNUMBERstring} +% 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} +%\end{macro} +%\begin{macro}{\storeNUMBERstringnum} +% 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} +%\end{macro} +%\begin{macro}{\@store@NUMBER@string} +% 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} +%\end{macro} +%\begin{macro}{\NUMBERstring} +% 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} +%\end{macro} +%\begin{macro}{\NUMBERstringnum} +% As above, but the argument is a count register or a number. +%\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with +%\cs{new@ifnextchar}} +% \begin{macrocode} +\newcommand*{\NUMBERstringnum}[1]{% +\new@ifnextchar[{\@NUMBER@string{#1}}{\@NUMBER@string{#1}[m]}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@NUMBER@string} +% 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} +%\end{macro} +%\begin{macro}{\binary} +% Number representations in other bases. Binary: +% \begin{macrocode} +\providecommand*{\binary}[1]{% +\expandafter\protect\expandafter\@binary{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\aaalph} +% 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} +%\end{macro} +%\begin{macro}{\AAAlph} +% As before, but upper case. +% \begin{macrocode} +\providecommand*{\AAAlph}[1]{% +\expandafter\protect\expandafter\@AAAlph{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\abalph} +% 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} +%\end{macro} +%\begin{macro}{\ABAlph} +% As above, but upper case. +% \begin{macrocode} +\providecommand*{\ABAlph}[1]{% +\expandafter\protect\expandafter\@ABAlph{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\hexadecimal} +% Hexadecimal: +% \begin{macrocode} +\providecommand*{\hexadecimal}[1]{% +\expandafter\protect\expandafter\@hexadecimal{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\Hexadecimal} +% As above, but in upper case. +% \begin{macrocode} +\providecommand*{\Hexadecimal}[1]{% +\expandafter\protect\expandafter\@Hexadecimal{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\octal} +% Octal: +% \begin{macrocode} +\providecommand*{\octal}[1]{% +\expandafter\protect\expandafter\@octal{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\decimal} +% Decimal: +% \begin{macrocode} +\providecommand*{\decimal}[1]{% +\expandafter\protect\expandafter\@decimal{% +\expandafter\the\csname c@#1\endcsname}} +% \end{macrocode} +%\end{macro} +% +%\subsection{Multilinguage Definitions} +%\begin{macro}{\@setdef@ultfmtcount} +% 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} +%\end{macro} +%\begin{macro}{\@set@mulitling@fmtcount} +% This defines the number and ordinal string macros to use +% \cs{languagename}: +% \begin{macrocode} +\def\@set@mulitling@fmtcount{% +% \end{macrocode} +% The masculine version of \cs{numberstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The feminine version of \cs{numberstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The neuter version of \cs{numberstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The masculine version of \cs{Numberstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The feminine version of \cs{Numberstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The neuter version of \cs{Numberstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The masculine version of \cs{ordinal}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The feminine version of \cs{ordinal}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The neuter version of \cs{ordinal}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The masculine version of \cs{ordinalstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The feminine version of \cs{ordinalstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The neuter version of \cs{ordinalstring}: +% \begin{macrocode} +\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} +% The masculine version of \cs{Ordinalstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The feminine version of \cs{Ordinalstring}: +% \begin{macrocode} +\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}}% +% \end{macrocode} +% The neuter version of \cs{Ordinalstring}: +% \begin{macrocode} +\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} +%\end{macro} +% 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} +%</fmtcount.sty> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*fc-british.def> % \end{macrocode} %\fi -% \subsection{fc-british.def} +% \subsubsection{fc-british.def} % British definitions % \begin{macrocode} \ProvidesFile{fc-british}[2007/06/14] @@ -648,7 +1865,7 @@ %<*fc-english.def> % \end{macrocode} %\fi -% \subsection{fc-english.def} +% \subsubsection{fc-english.def} % English definitions % \begin{macrocode} \ProvidesFile{fc-english}[2007/05/26] @@ -1193,7 +2410,7 @@ this number}% %<*fc-french.def> % \end{macrocode} %\fi -% \subsection{fc-french.def} +% \subsubsection{fc-french.def} % French definitions % \begin{macrocode} \ProvidesFile{fc-french.def}[2007/05/26] @@ -2408,7 +3625,7 @@ this number}% %<*fc-german.def> % \end{macrocode} %\fi -% \subsection{fc-german.def} +% \subsubsection{fc-german.def} % German definitions (thank you to K. H. Fricke for supplying % this information) % \begin{macrocode} @@ -2954,10 +4171,754 @@ zehntes% %\fi %\iffalse % \begin{macrocode} +%<*fc-italian.def> +% \end{macrocode} +%\fi +% \subsubsection{fc-italian} +% Italian definitions provided by Edoardo Pasca (2008). +% \begin{macrocode} +\ProvidesFile{fc-italian.def}[2009/10/02 Italian support for fmtcount (Edoardo Pasca)] +\newcommand{\@@unitstringitalian}[1]{% +\ifcase#1\relax +zero% +\or uno% +\or due% +\or tre% +\or quattro% +\or cinque% +\or sei% +\or sette% +\or otto% +\or nove% +\fi +} + +\newcommand{\@@unitstringFitalian}[1]{% +\ifcase#1\relax +zero% +\or una% +\or doe% +\or tre% +\or quattro% +\or cinque% +\or sei% +\or sette% +\or otto% +\or nove% +\fi +} + +\newcommand{\@@tenstringitalian}[1]{% +\ifcase#1\relax +\or dieci% +\or venti% +\or trenta% +\or quaranta% +\or cinquanta% +\or sessanta% +\or settanta% +\or ottanta% +\or novanta% +\or cento% +\fi +} + +\newcommand{\@@teenstringitalian}[1]{% +\ifcase#1\relax +dieci% +\or undici% +\or dodici% +\or tredici% +\or quattordici% +\or quindici% +\or sedici% +\or diciassette% +\or diciotto% +\or diciannove% +\fi +} + +\newcommand{\@@twentystringitalian}[1]{% +\ifcase#1\relax +venti% +\or ventuno% +\or ventidue% +\or ventitre% +\or ventiquattro% +\or venticinque% +\or ventisei% +\or ventisette% +\or ventiotto% +\or ventinove% +\fi} + +\newcommand{\@@twentystringFitalian}[1]{% +\ifcase#1\relax +venti% +\or ventuna% +\or ventidue% +\or ventitre% +\or ventiquattro% +\or venticinque% +\or ventisei% +\or ventisette% +\or ventiotto% +\or ventinove% +\fi} + +\newcommand{\@@hundredstringitalian}[1]{% +\ifcase#1\relax +\or cento% +\or duecento% +\or trecento% +\or quattrocento% +\or cinquecento% +\or seicento% +\or settecento% +\or ottocento% +\or novecento% +\fi} + +\newcommand{\@@hundredstringFitalian}[1]{% +\ifcase#1\relax +\or cento% +\or duecento% +\or trecento% +\or quattrocento% +\or cinquecento% +\or seicento% +\or settecento% +\or ottocento% +\or novecento% +\fi} + +\newcommand{\@@Unitstringitalian}[1]{% +\ifcase#1\relax +Zero% +\or Uno% +\or Due% +\or Tre% +\or Quattro% +\or Cinque% +\or Sei% +\or Sette% +\or Otto% +\or Nove% +\fi +} + +\newcommand{\@@UnitstringFitalian}[1]{% +\ifcase#1\relax +Zero% +\or Una% +\or Due% +\or Tre% +\or Quattro% +\or Cinque% +\or Sei% +\or Sette% +\or Otto% +\or Nove% +\fi +} + +\newcommand{\@@Tenstringitalian}[1]{% +\ifcase#1\relax +\or Dieci% +\or Venti% +\or Trenta% +\or Quaranta% +\or Cinquanta% +\or Sessanta% +\or Settanta% +\or Ottanta% +\or Novanta% +\or Cento% +\fi +} + +\newcommand{\@@Teenstringitalian}[1]{% +\ifcase#1\relax +Dieci% +\or Undici% +\or Dodici% +\or Tredici% +\or Quattordici% +\or Quindici% +\or Sedici% +\or Diciassette% +\or Diciotto% +\or Diciannove% +\fi +} + +\newcommand{\@@Twentystringitalian}[1]{% +\ifcase#1\relax +Venti% +\or Ventuno% +\or Ventidue% +\or Ventitre% +\or Ventiquattro% +\or Venticinque% +\or Ventisei% +\or Ventisette% +\or Ventiotto% +\or Ventinove% +\fi} + +\newcommand{\@@TwentystringFitalian}[1]{% +\ifcase#1\relax +Venti% +\or Ventuno% +\or Ventidue% +\or Ventitre% +\or Ventiquattro% +\or Venticinque% +\or Ventisei% +\or Ventisette% +\or Ventiotto% +\or Ventinove% +\fi} + +\newcommand{\@@Hundredstringitalian}[1]{% +\ifcase#1\relax +\or Cento% +\or Duecento% +\or Trecento% +\or Quattrocento% +\or Cinquecento% +\or Seicento% +\or Settecento% +\or Ottocento% +\or Novecento% +\fi} + +\newcommand{\@@HundredstringFitalian}[1]{% +\ifcase#1\relax +\or Cento% +\or Duecento% +\or Trecento% +\or Quattrocento% +\or Cinquecento% +\or Seicento% +\or Settecento% +\or Ottocento% +\or Novecento% +\fi} + + +\newcommand{\@numberstringMitalian}[2]{% +\let\@unitstring=\@@unitstringitalian +\let\@teenstring=\@@teenstringitalian +\let\@tenstring=\@@tenstringitalian +\let\@twentystring=\@@twentystringitalian +\let\@hundredstring=\@@hundredstringitalian +\def\@hundred{cien}\def\@thousand{mil}% +\def\@andname{y}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@numberstringFitalian}[2]{% +\let\@unitstring=\@@unitstringFitalian +\let\@teenstring=\@@teenstringitalian +\let\@tenstring=\@@tenstringitalian +\let\@twentystring=\@@twentystringFitalian +\let\@hundredstring=\@@hundredstringFitalian +\def\@hundred{cien}\def\@thousand{mil}% +\def\@andname{y}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@NumberstringMitalian}[2]{% +\let\@unitstring=\@@Unitstringitalian +\let\@teenstring=\@@Teenstringitalian +\let\@tenstring=\@@Tenstringitalian +\let\@twentystring=\@@Twentystringitalian +\let\@hundredstring=\@@Hundredstringitalian +\def\@andname{y}% +\def\@hundred{Cien}\def\@thousand{Mil}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@NumberstringFitalian}[2]{% +\let\@unitstring=\@@UnitstringFitalian +\let\@teenstring=\@@Teenstringitalian +\let\@tenstring=\@@Tenstringitalian +\let\@twentystring=\@@TwentystringFitalian +\let\@hundredstring=\@@HundredstringFitalian +\def\@andname{y}% +\def\@hundred{Cien}\def\@thousand{Mil}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@ordinalstringMitalian}[2]{% +\let\@unitthstring=\@@unitthstringitalian +\let\@unitstring=\@@unitstringitalian +\let\@teenthstring=\@@teenthstringitalian +\let\@tenthstring=\@@tenthstringitalian +\let\@hundredthstring=\@@hundredthstringitalian +\def\@thousandth{millesimo}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@ordinalstringFitalian}[2]{% +\let\@unitthstring=\@@unitthstringFitalian +\let\@unitstring=\@@unitstringFitalian +\let\@teenthstring=\@@teenthstringFitalian +\let\@tenthstring=\@@tenthstringFitalian +\let\@hundredthstring=\@@hundredthstringFitalian +\def\@thousandth{millesima}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@OrdinalstringMitalian}[2]{% +\let\@unitthstring=\@@Unitthstringitalian +\let\@unitstring=\@@Unitstringitalian +\let\@teenthstring=\@@Teenthstringitalian +\let\@tenthstring=\@@Tenthstringitalian +\let\@hundredthstring=\@@Hundredthstringitalian +\def\@thousandth{Millesimo}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@OrdinalstringFitalian}[2]{% +\let\@unitthstring=\@@UnitthstringFitalian +\let\@unitstring=\@@UnitstringFitalian +\let\@teenthstring=\@@TeenthstringFitalian +\let\@tenthstring=\@@TenthstringFitalian +\let\@hundredthstring=\@@HundredthstringFitalian +\def\@thousandth{Millesima}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@ordinalMitalian}[2]{\edef#2{#1\relax\noexpand\fmtord{o}}} +\newcommand{\@ordinalFitalian}[2]{\edef#2{#1\relax\noexpand\fmtord{a}}} + +\newcommand{\@@unitthstringitalian}[1]{% +\ifcase#1\relax +zero% +\or primo% +\or secondo% +\or terzo% +\or quarto% +\or quinto% +\or sesto% +\or settimo% +\or ottavo% +\or nono% +\fi +} + +\newcommand{\@@tenthstringitalian}[1]{% +\ifcase#1\relax +\or decimo% +\or ventesimo% +\or trentesimo% +\or quarantesimo% +\or cinquantesimo% +\or sessantesimo% +\or settantesimo% +\or ottantesimo% +\or novantesimo% +\fi +} + +\newcommand{\@@teenthstringitalian}[1]{% +\ifcase#1\relax +decimo% +\or undicesimo% +\or dodicesimo% +\or tredicesimo% +\or quattordicesimo% +\or quindicesimo% +\or sedicesimo% +\or diciassettesimo% +\or diciottesimo% +\or diciannovesimo% +\fi +} + +\newcommand{\@@hundredthstringitalian}[1]{% +\ifcase#1\relax +\or centesimo% +\or duecentesimo% +\or trecentesimo% +\or quattrocentesimo% +\or cinquecentesimo% +\or seicentesimo% +\or settecentesimo% +\or ottocentesimo% +\or novecentesimo% +\fi} + +\newcommand{\@@unitthstringFitalian}[1]{% +\ifcase#1\relax +zero% +\or prima% +\or seconda% +\or terza% +\or quarta% +\or quinta% +\or sesta% +\or settima% +\or ottava% +\or nona% +\fi +} + +\newcommand{\@@tenthstringFitalian}[1]{% +\ifcase#1\relax +\or decima% +\or ventesima% +\or trentesima% +\or quarantesima% +\or cinquantesima% +\or sessantesima% +\or settantesima% +\or ottantesima% +\or novantesima% +\fi +} + +\newcommand{\@@teenthstringFitalian}[1]{% +\ifcase#1\relax +decima% +\or undicesima% +\or dodicesima% +\or tredicesima% +\or quattordicesima% +\or quindicesima% +\or sedicesima% +\or diciassettesima% +\or diciottesima% +\or diciannovesima% +\fi +} + +\newcommand{\@@hundredthstringFitalian}[1]{% +\ifcase#1\relax +\or centesima% +\or duecentesima% +\or trecentesima% +\or quattrocentesima% +\or cinquecentesima% +\or seicentesima% +\or settecentesima% +\or ottocentesima% +\or novecentesima% +\fi} + +\newcommand{\@@Unitthstringitalian}[1]{% +\ifcase#1\relax +Zero% +\or Primo% +\or Secondo% +\or Terzo% +\or Quarto% +\or Quinto% +\or Sesto% +\or Settimo% +\or Ottavo% +\or Nono% +\fi +} + +\newcommand{\@@Tenthstringitalian}[1]{% +\ifcase#1\relax +\or Decimo% +\or Ventesimo% +\or Trentesimo% +\or Quarantesimo% +\or Cinquantesimo% +\or Sessantesimo% +\or Settantesimo% +\or Ottantesimo% +\or Novantesimo% +\fi +} + +\newcommand{\@@Teenthstringitalian}[1]{% +\ifcase#1\relax +Decimo% +\or Undicesimo% +\or Dodicesimo% +\or Tredicesimo% +\or Quattordicesimo% +\or Quindicesimo% +\or Sedicesimo% +\or Diciassettesimo% +\or Diciottesimo% +\or Diciannovesimo% +\fi +} + +\newcommand{\@@Hundredthstringitalian}[1]{% +\ifcase#1\relax +\or Centesimo% +\or Duecentesimo% +\or Trecentesimo% +\or Quattrocentesimo% +\or Cinquecentesimo% +\or Seicentesimo% +\or Settecentesimo% +\or Ottocentesimo% +\or Novecentesimo% +\fi} + +\newcommand{\@@UnitthstringFitalian}[1]{% +\ifcase#1\relax +Zero% +\or Prima% +\or Seconda% +\or Terza% +\or Quarta% +\or Quinta% +\or Sesta% +\or Settima% +\or Ottava% +\or Nona% +\fi +} + +\newcommand{\@@TenthstringFitalian}[1]{% +\ifcase#1\relax +\or Decima% +\or Ventesima% +\or Trentesima% +\or Quarantesima% +\or Cinquantesima% +\or Sessantesima% +\or Settantesima% +\or Ottantesima% +\or Novantesima% +\fi +} + +\newcommand{\@@TeenthstringFitalian}[1]{% +\ifcase#1\relax +Decima% +\or Undicesima% +\or Dodicesima% +\or Tredicesima% +\or Quattordicesima% +\or Quindicesima% +\or Sedicesima% +\or Diciassettesima% +\or Diciottesima% +\or Diciannovesima% +\fi +} + +\newcommand{\@@HundredthstringFitalian}[1]{% +\ifcase#1\relax +\or Centesima% +\or Duecentesima% +\or Trecentesima% +\or Quattrocentesima% +\or Cinquecentesima% +\or Seicentesima% +\or Settecentesima% +\or Ottocentesima% +\or Novecentesima% +\fi} + + +\newcommand{\@@numberstringitalian}[2]{% +\def#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 +\@strctr=#1\relax \divide\@strctr by 1000\relax +\ifnum\@strctr>9\relax + \divide\@strctr by 10\relax + \ifnum\@strctr>1\relax + \edef#2{\@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}% + \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>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 +} + +\newcommand{\@@ordinalstringitalian}[2]{% +\@strctr=#1\relax +\def#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}% + \else + \ifnum\@strctr>999\relax + \divide\@strctr by 1000\relax + \ifnum\@strctr>1\relax + \ifnum\@strctr>9\relax + \@tmpstrctr=\@strctr + \ifnum\@strctr<20\relax + \@modulo{\@tmpstrctr}{10}% + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@teenthstring{\@tmpstrctr} }% + \else + \divide\@tmpstrctr by 10\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@tenthstring{\@tmpstrctr} }% + \@tmpstrctr=\@strctr + \@modulo{\@tmpstrctr}{10}% + \ifnum\@tmpstrctr>0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitthstring{\@tmpstrctr} }% + \fi + \fi + \else + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitstring{\@strctr} }% + \fi + \fi + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@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@numstr#2\relax + \edef#2{\@@fc@numstr\ }% + \fi + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@hundredthstring{\@tmpstrctr}}% + \fi + \@modulo{\@strctr}{100}% + \ifnum#1>99\relax + \ifnum\@strctr>0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\ }% + \fi + \fi + \ifnum\@strctr>19\relax + \@tmpstrctr=\@strctr + \divide\@tmpstrctr by 10\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@tenthstring{\@tmpstrctr}}% + \@tmpstrctr=\@strctr + \@modulo{\@tmpstrctr}{10}% + \ifnum\@tmpstrctr>0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\ \@unitthstring{\@tmpstrctr}}% + \fi + \else + \ifnum\@strctr>9\relax + \@modulo{\@strctr}{10}% + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@teenthstring{\@strctr}}% + \else + \ifnum\@strctr=0\relax + \ifnum#1=0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitstring{0}}% + \fi + \else + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitthstring{\@strctr}}% + \fi + \fi + \fi + \fi +\fi +} +% \end{macrocode} + +%\iffalse +% \begin{macrocode} +%</fc-italian.def> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*fc-portuges.def> % \end{macrocode} %\fi -% \subsection{fc-portuges.def} +% \subsubsection{fc-portuges.def} % Portuguse definitions % \begin{macrocode} \ProvidesFile{fc-portuges.def}[2007/05/26] @@ -3706,7 +5667,7 @@ this number}% %<*fc-spanish.def> % \end{macrocode} %\fi -% \subsection{fc-spanish.def} +% \subsubsection{fc-spanish.def} % Spanish definitions % \begin{macrocode} \ProvidesFile{fc-spanish.def}[2007/05/26] @@ -4579,7 +6540,7 @@ this number}% %<*fc-UKenglish.def> % \end{macrocode} %\fi -% \subsection{fc-UKenglish.def} +% \subsubsection{fc-UKenglish.def} % UK English definitions % \begin{macrocode} \ProvidesFile{fc-UKenglish}[2007/06/14] @@ -4617,7 +6578,7 @@ this number}% %<*fc-USenglish.def> % \end{macrocode} %\fi -% \subsection{fc-USenglish.def} +% \subsubsection{fc-USenglish.def} % US English definitions % \begin{macrocode} \ProvidesFile{fc-USenglish}[2007/06/14] @@ -4652,1191 +6613,6 @@ this number}% %\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/07/20 v1.3] -\RequirePackage{ifthen} -\RequirePackage{keyval} -% \end{macrocode} -% These commands need to be defined before the -% configuration file is loaded.\changes{1.3}{2007/7/19}{no -%longer using xspace package} -% -% Define the macro to format the |st|, |nd|, |rd| or |th| of an -% ordinal. -%\begin{macro}{\fmtord} -% \begin{macrocode} -\providecommand*{\fmtord}[1]{\textsuperscript{#1}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\padzeros} -%\begin{definition} -%\cs{padzeroes}\oarg{n} -%\end{definition} -% Specifies how many digits should be displayed for commands such as -% \cs{decimal} and \cs{binary}. -% \begin{macrocode} -\newcount\c@padzeroesN -\c@padzeroesN=1\relax -\providecommand*{\padzeroes}[1][17]{\c@padzeroesN=#1} -% \end{macrocode} -%\end{macro} -% Load appropriate language definition files: -%\changes{v1.1}{14 June 2007}{added check for UKenglish, -% british and USenglish babel settings} -% \begin{macrocode} -\@ifundefined{l@english}{}{\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{l@spanish}{}{\input{fc-spanish.def}} -\@ifundefined{l@portuges}{}{\input{fc-portuges.def}} -\@ifundefined{l@french}{}{\input{fc-french.def}} -\@ifundefined{l@german}{% -\@ifundefined{l@ngerman}{}{\input{fc-german.def}}}{% -\input{fc-german.def}} -% \end{macrocode} -%\begin{macro}{\fmtcount@french} -% 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} -%\end{macro} -% 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} -%\begin{macro}{\iffmtord@abbrv} -% 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} -%\end{macro} -%\begin{macro}{\fmtcountsetoptions} -% 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} -%\end{macro} -% 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} -%\begin{macro}{\@modulo} -%\begin{definition} -%\cs{@modulo}\marg{count reg}\marg{n} -%\end{definition} -% Sets the count register to be its value modulo \meta{n}. -% 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} -%\end{macro} -% 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} -%\begin{macro}{\binarynum} -% Converts a decimal number to binary, and display. -% \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} -%\end{macro} -%\begin{macro}{\octalnum} -% Converts a decimal number to octal, and displays. -% \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} -%\end{macro} -%\begin{macro}{\hexadecimalnum} -% Converts a decimal number to a lowercase hexadecimal number, -% and displays it. -% \begin{macrocode} -\newcommand*{\@@hexadecimal}[1]{\ifcase#10\or1\or2\or3\or4\or5\or -6\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} -%\end{macro} -%\begin{macro}{\Hexadecimalnum} -% 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} -%\end{macro} -%\begin{macro}{\aaalphnum} -% Lowercase 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} -%\end{macro} -%\begin{macro}{\AAAlphnum} -% 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} -%\end{macro} -%\begin{macro}{\abalphnum} -% Lowercase alphabetical representation -% \begin{macrocode} -\newcommand*{\@abalph}[1]{% -\ifnum#1>17576\relax -\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} -%\end{macro} -%\begin{macro}{\ABAlphnum} -% Uppercase alphabetical representation -% \begin{macrocode} -\newcommand*{\@ABAlph}[1]{% -\ifnum#1>17576\relax -\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} -%\end{macro} -%\begin{macro}{\@fmtc@count} -% 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} -%\end{macro} -%\begin{macro}{\@decimal} -% Format number as a decimal, possibly padded with zeroes in front. -% \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} -%\end{macro} -%\begin{macro}{\FCordinal} -%\begin{definition} -%\cs{FCordinal}\marg{number} -%\end{definition} -% This is a bit cumbersome. Previously \cs{@ordinal} -% was defined in a similar way to \cs{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. -% Note however, that putting the optional argument means that -% any spaces will be ignored after the command if the optional -% argument is omitted. -% Version 1.04 changed \cs{ordinal} to \cs{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} -%\end{macro} -%\begin{macro}{\ordinal} -% If \cs{ordinal} isn't defined make \cs{ordinal} a synonym -% for \cs{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} -%\end{macro} -%\begin{macro}{\ordinalnum} -% 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} -%\end{macro} -%\begin{macro}{\@ordinalnum} -% Display ordinal according to gender (neuter added in v1.1, -% \cs{xspace} added in v1.2, and removed in v1.3\footnote{I -%couldn't get it to work consistently both with and without the -%optional argument}): -% \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} -%\end{macro} -%\begin{macro}{\storeordinal} -% 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} -%\end{macro} -%\begin{macro}{\storeordinalnum} -% 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} -%\end{macro} -%\begin{macro}{\@storeordinalnum} -% 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} -%\end{macro} -%\begin{macro}{\FMCuse} -% Get stored information: -% \begin{macrocode} -\newcommand*{\FMCuse}[1]{\csname @fcs@#1\endcsname} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\ordinalstring} -% 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} -%\end{macro} -%\begin{macro}{\ordinalstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@ordinal@string} -% 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} -%\end{macro} -%\begin{macro}{\storeordinalstring} -% 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} -%\end{macro} -%\begin{macro}{\storeordinalstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@store@ordinal@string} -% 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} -%\end{macro} -%\begin{macro}{\Ordinalstring} -% 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} -%\end{macro} -%\begin{macro}{\Ordinalstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@Ordinal@string} -% 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} -%\end{macro} -%\begin{macro}{\storeOrdinalstring} -% 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} -%\end{macro} -%\begin{macro}{\storeOrdinalstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@store@Ordinal@string} -% 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} -%\end{macro} -% -%\begin{macro}{\storeORDINALstring} -% 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} -%\end{macro} -%\begin{macro}{\storeORDINALstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@store@ORDINAL@string} -% 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} -%\end{macro} -%\begin{macro}{\ORDINALstring} -% 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} -%\end{macro} -%\begin{macro}{\ORDINALstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@ORDINAL@string} -% 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} -%\end{macro} -%\begin{macro}{\storenumberstring} -% 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} -%\end{macro} -%\begin{macro}{\storenumberstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@store@number@string} -% 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} -%\end{macro} -%\begin{macro}{\numberstring} -% 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} -%\end{macro} -%\begin{macro}{\numberstringnum} -% 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} -%\end{macro} -% -%\begin{macro}{\@number@string} -% 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} -%\end{macro} -%\begin{macro}{\storeNumberstring} -% 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} -%\end{macro} -%\begin{macro}{\storeNumberstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@store@Number@string} -% 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} -%\end{macro} -%\begin{macro}{\Numberstring} -% 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} -%\end{macro} -%\begin{macro}{\Numberstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@Number@string} -% 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} -%\end{macro} -%\begin{macro}{\storeNUMBERstring} -% 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} -%\end{macro} -%\begin{macro}{\storeNUMBERstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@store@NUMBER@string} -% 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} -%\end{macro} -%\begin{macro}{\NUMBERstring} -% 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} -%\end{macro} -%\begin{macro}{\NUMBERstringnum} -% 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} -%\end{macro} -%\begin{macro}{\@NUMBER@string} -% 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} -%\end{macro} -%\begin{macro}{\binary} -% Number representations in other bases. Binary: -% \begin{macrocode} -\providecommand*{\binary}[1]{% -\expandafter\protect\expandafter\@binary{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\aaalph} -% 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} -%\end{macro} -%\begin{macro}{\AAAlph} -% As before, but upper case. -% \begin{macrocode} -\providecommand*{\AAAlph}[1]{% -\expandafter\protect\expandafter\@AAAlph{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\abalph} -% 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} -%\end{macro} -%\begin{macro}{\ABAlph} -% As above, but upper case. -% \begin{macrocode} -\providecommand*{\ABAlph}[1]{% -\expandafter\protect\expandafter\@ABAlph{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\hexadecimal} -% Hexadecimal: -% \begin{macrocode} -\providecommand*{\hexadecimal}[1]{% -\expandafter\protect\expandafter\@hexadecimal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\Hexadecimal} -% As above, but in upper case. -% \begin{macrocode} -\providecommand*{\Hexadecimal}[1]{% -\expandafter\protect\expandafter\@Hexadecimal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\octal} -% Octal: -% \begin{macrocode} -\providecommand*{\octal}[1]{% -\expandafter\protect\expandafter\@octal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -%\begin{macro}{\decimal} -% Decimal: -% \begin{macrocode} -\providecommand*{\decimal}[1]{% -\expandafter\protect\expandafter\@decimal{% -\expandafter\the\csname c@#1\endcsname}} -% \end{macrocode} -%\end{macro} -% -%\subsubsection{Multilinguage Definitions} -%\begin{macro}{\@setdef@ultfmtcount} -% 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} -%\end{macro} -%\begin{macro}{\@set@mulitling@fmtcount} -% This defines the number and ordinal string macros to use -% \cs{languagename}: -% \begin{macrocode} -\def\@set@mulitling@fmtcount{% -% \end{macrocode} -% The masculine version of \cs{numberstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The feminine version of \cs{numberstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The neuter version of \cs{numberstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The masculine version of \cs{Numberstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The feminine version of \cs{Numberstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The neuter version of \cs{Numberstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The masculine version of \cs{ordinal}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The feminine version of \cs{ordinal}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The neuter version of \cs{ordinal}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The masculine version of \cs{ordinalstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The feminine version of \cs{ordinalstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The neuter version of \cs{ordinalstring}: -% \begin{macrocode} -\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} -% The masculine version of \cs{Ordinalstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The feminine version of \cs{Ordinalstring}: -% \begin{macrocode} -\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}}% -% \end{macrocode} -% The neuter version of \cs{Ordinalstring}: -% \begin{macrocode} -\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} -%\end{macro} -% 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} -%</fmtcount.sty> -% \end{macrocode} -%\fi -%\iffalse -% \begin{macrocode} %<*fmtcount.perl> % \end{macrocode} %\fi @@ -8520,5 +9296,405 @@ sub load_fmtcount_cfg{ %</fmtcount.perl> % \end{macrocode} %\fi +%\iffalse +% \begin{macrocode} +%<*fc-lang.tex> +% \end{macrocode} +%\fi +% \begin{macrocode} + % This is an interactive script. Run it through \LaTeX + % and enter appropriate responses. (This won't work with + % LaTeX2HTML + +\documentclass[a4paper]{article} + +\usepackage[french,english,spanish,portuges,ngerman,italian]{babel} +\usepackage{fmtcount} + +\newcounter{startval} +\newcounter{endval} +\newcounter{stepsize} +\newcounter{N} +\newcount\myctr +\newcount\langid + +\begin{document} + +\section{Displaying the value of a counter} + +\typeout{This is an interactive script, testing the fmtcount package.} + +\langid=-1 + +\loop +\typeout{Which language?^^J} +\typeout{[1] English} +\typeout{[2] Portuguese} +\typeout{[3] Spanish} +\typeout{[4] French} +\typeout{[5] French (Swiss)} +\typeout{[6] French (Belgium)} +\typeout{[7] German} +\typeout{[8] Italian} + +\typein[\response]{} + +\ifthenelse{\equal{\response}{1}}{\langid=1}{ +\ifthenelse{\equal{\response}{2}}{\langid=2}{ +\ifthenelse{\equal{\response}{3}}{\langid=3}{ +\ifthenelse{\equal{\response}{4}}{\langid=4\fmtcountsetoptions{french}}{ +\ifthenelse{\equal{\response}{5}}{\langid=5\fmtcountsetoptions{french=swiss}}{ +\ifthenelse{\equal{\response}{6}}{\langid=6\fmtcountsetoptions{french=belgian}} +{\ifthenelse{\equal{\response}{7}}{\langid=7}{% +\ifthenelse{\equal{\response}{8}}{\langid=8}{% +\langid=-1 +\typeout{Invalid response '\response', please select a number from 1 to 6}}}}}}}}} +\ifnum\langid=-1 +\repeat + +\ifcase\langid +\or \selectlanguage{english} +Current language: English. +\or \selectlanguage{portuges} +Current language: Portuguese. +\or \selectlanguage{spanish} +Current language: Spanish. +\or \selectlanguage{french} +Current language: French. +\or \selectlanguage{french} +Current language: French (Swiss). +\or \selectlanguage{french} +Current language: French (Belgium). +\or \selectlanguage{ngerman} +Current language: German. +\or \selectlanguage{italian} +Current language: Italian. +\fi + +\def\startval{-1} + +\loop +\typein[\startval]{Start value? (Integer from 0 to 99999) +[Default 1]} +\ifthenelse{\equal{\startval}{}}{\def\startval{1}}{} +\ifnum\startval<0\def\startval{-1}\fi +\ifnum\startval>99999\def\startval{-1}\fi +\ifnum\startval=-1 +\repeat + +\def\endval{-1} + +\loop +\typein[\endval]{End value? (Integer from 0 to 99999) +[Default 1000]} +\ifthenelse{\equal{\endval}{}}{\def\endval{1000}}{} +\ifnum\endval<0\def\endval{-1}\fi +\ifnum\endval>99999\def\endval{-1}\fi +\ifnum\endval=-1 +\repeat + +\def\stepsize{0} + +\loop +\typein[\stepsize]{Step size? (Non zero integer) +[Default 1]} +\ifthenelse{\equal{\stepsize}{}}{\def\stepsize{1}}{} +\ifnum\stepsize=0 +\repeat + +\typeout{From {\startval} to {\endval} step {\stepsize}} + +\ifnum\startval<\endval +\ifnum\stepsize<0 +\PackageError{fc-lang}{Infinite loop not permitted!}{} +\def\endval{\startval} +\fi +\fi + +\ifnum\startval>\endval +\ifnum\stepsize>0 +\PackageError{fc-lang}{Infinite loop not permitted!}{} +\def\endval{\startval} +\fi +\fi + +\newcount\numformat + +\numformat=-1 +\loop +\typeout{Which format?^^J} +\typeout{[1] ordinalstring} +\typeout{[2] Ordinalstring} +\typeout{[3] ORDINALstring} +\typeout{[4] numberstring} +\typeout{[5] Numberstring} +\typeout{[6] NUMBERstring} + +\typein[\response]{Default: 1} + +\ifthenelse{\equal{\response}{}}{\def\response{1}}{}%default val +\ifthenelse{\equal{\response}{1}}{\numformat=1}{ +\ifthenelse{\equal{\response}{2}}{\numformat=2}{ +\ifthenelse{\equal{\response}{3}}{\numformat=3}{ +\ifthenelse{\equal{\response}{4}}{\numformat=4}{ +\ifthenelse{\equal{\response}{5}}{\numformat=5}{ +\ifthenelse{\equal{\response}{6}}{\numformat=6}{\numformat=-1 +\typeout{Invalid response '\response', please select a number from 1 to 4}}}}}}} +\ifnum\numformat=-1 +\repeat + +\ifcase\numformat +\or\def\stringtype{ordinalstring} +\or\def\stringtype{Ordinalstring} +\or\def\stringtype{ORDINALstring} +\or\def\stringtype{numberstring} +\or\def\stringtype{Numberstring} +\or\def\stringtype{NUMBERstring} +\fi + +\ifnum\langid>3\relax + \ifnum\langid<7\relax + \myctr=-1\relax + \loop + \typeout{Ordinal type?^^J} + \typeout{[1] eme} + \typeout{[2] e} + \typein[\response]{Default: 1} + \ifthenelse{\equal{\response}{}}% + {% + \def\response{1}% default + \myctr=1\relax + }% + {% + \ifthenelse{\equal{\response}{1}}% + {% + \fmtcountsetoptions{abbrv=false}\myctr=1\relax + }% + {% + \ifthenelse{\equal{\response}{2}}% + {% + \fmtcountsetoptions{abbrv}\myctr=2\relax + }% + {% + \myctr=-1\relax + }% + }% + }% + \ifnum\myctr=-1 + \repeat + \fi +\fi + +\myctr=-1 +\loop +\typeout{Ordinal format?^^J} +\typeout{[1] raised} +\typeout{[2] level} +\typein[\response]{Default: 1} +\ifthenelse{\equal{\response}{1}\or\equal{\response}{}}{% +\fmtcountsetoptions{fmtord=raise}\myctr=1}{% +\ifthenelse{\equal{\response}{2}}{% +\fmtcountsetoptions{fmtord=level}\myctr=2}{% +\myctr=-1}} +\ifnum\myctr=-1 +\repeat + +\ifnum\langid=1 +\myctr=1 +\else +\ifthenelse{\langid=7 \and \numformat>3}{}{% +\loop +\ifnum\langid=7 + \typein[\response]{Gender? (m, f or n) [Default: m]} + \ifthenelse{\equal{\response}{m}}{\myctr=1}{ + \ifthenelse{\equal{\response}{f}}{\myctr=2}{ + \ifthenelse{\equal{\response}{n}}{\myctr=3}{ + \ifthenelse{\equal{\response}{}}{\myctr=1}{% + \myctr=-1 + \typeout{Invalid response '\response'}}}}} +\else + \typein[\response]{Gender? (m or f) [Default: m]} + \ifthenelse{\equal{\response}{m}}{\myctr=1}{ + \ifthenelse{\equal{\response}{f}}{\myctr=2}{% + \ifthenelse{\equal{\response}{}}{\myctr=1}{% + \myctr=-1 + \typeout{Invalid response '\response'}}}} +\fi +\ifnum\myctr=-1 +\repeat +} +\fi + +\ifcase\myctr +\or \def\gender{m} +\or \def\gender{f} +\or \def\gender{n} +\fi + +\ifnum\langid=7 +\ifnum\startval>99 +\myctr=-1 +\loop +\typeout{einhundert/eintausend or hundert/tausend?^^J} +\typeout{[1] einhundert/eintausend} +\typeout{[2] hundert/tausend} +\typein[\response]{Default: 1} +\ifthenelse{\equal{\response}{}}{\def\response{1}}{}%default +\ifthenelse{\equal{\response}{1}}{% +\renewcommand{\einhundert}{einhundert} +\renewcommand{\eintausend}{eintausend} +\myctr=1}{% +\ifthenelse{\equal{\response}{2}}{% +\renewcommand{\einhundert}{hundert} +\renewcommand{\eintausend}{tausend} +\myctr=2}{% +\myctr=-1}} +\ifnum\myctr=-1 +\repeat +\fi +\fi + +\setcounter{startval}{\startval} +\setcounter{endval}{\endval} +\setcounter{stepsize}{\stepsize} + +\stepcounter{endval} +\begin{ttfamily} +\noindent +\makebox[0.25in][c]{N} +\makebox[0.5in][c]{ordinal}\quad +\stringtype +\par +\myctr=\value{startval} +\loop +\noindent +\setcounter{N}{\myctr} +\makebox[0.25in][r]{\arabic{N}} +\makebox[0.5in][r]{\ordinal{N}[\gender]}\quad +\csname\stringtype\endcsname{N}[\gender]. +\par +\advance\myctr by \value{stepsize}\relax +\ifnum\myctr<\value{endval} +\repeat + +\end{ttfamily} + +\end{document} +% \end{macrocode} +%\iffalse +% \begin{macrocode} +%</fc-lang.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*fc-samp.tex> +% \end{macrocode} +%\fi +% \begin{macrocode} +\documentclass[a4paper]{article} + +\usepackage{fmtcount} +\newcounter{N} + +\padzeroes[5] + +\newcommand{\printrow}[1]{% +\newline +\setcounter{N}{#1} +\makebox[0.75in][r]{\decimal{N}\quad} +\makebox[0.75in][r]{\hexadecimal{N}\quad} +\makebox[0.75in][r]{\ordinal{N}\quad} +\makebox[2in][l]{\numberstring{N}} +} + +\renewcommand{\thesection}{\ordinal{section}} + +\begin{document} + +\section{Displaying the value of a counter} +\label{ex} + +\begin{ttfamily} +\noindent +\makebox[0.75in][c]{decimal} +\makebox[0.75in][c]{hexadecimal} +\makebox[0.75in][c]{ordinal} +numberstring +\printrow{0} +\printrow{1} +\printrow{2} +\printrow{3} +\printrow{4} +\printrow{5} +\printrow{6} +\printrow{7} +\printrow{8} +\printrow{9} +\printrow{10} +\printrow{11} +\printrow{12} +\printrow{13} +\printrow{14} +\printrow{15} +\printrow{16} +\printrow{17} +\printrow{18} +\printrow{19} +\printrow{20} +\printrow{21} +\printrow{22} +\printrow{23} +\printrow{24} +\printrow{25} +\printrow{30} +\printrow{40} +\printrow{50} +\printrow{60} +\printrow{70} +\printrow{71} +\printrow{75} +\printrow{80} +\printrow{81} +\printrow{85} +\printrow{90} +\printrow{91} +\printrow{95} +\printrow{100} +\printrow{101} +\printrow{110} +\printrow{125} +\printrow{150} +\printrow{170} +\printrow{180} +\printrow{190} +\printrow{200} +\printrow{250} +\printrow{300} +\printrow{400} +\printrow{500} +\printrow{600} +\printrow{700} +\printrow{800} +\printrow{900} +\printrow{1000} +\printrow{99999} +\end{ttfamily} + +\section{Cross-Referencing} + +Referencing a label: \ref{ex}. + +Passing numbers explicitly: \ordinalnum{10}, +\Numberstringnum{10}, \NUMBERstringnum{10}, \Ordinalstringnum{10}, +\ORDINALstringnum{10}. + +\end{document} +% \end{macrocode} +%\iffalse +% \begin{macrocode} +%</fc-samp.tex> +% \end{macrocode} +%\fi %\Finale \endinput diff --git a/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins b/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins index ade931c60ae..ce3f24e2327 100644 --- a/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins +++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.ins @@ -1,10 +1,10 @@ -% fmtcount.ins generated using makedtx version 0.94b 2007/8/20 12:28 +% fmtcount.ins generated using makedtx version 0.94b 2009/10/2 18:35 \input docstrip \preamble fmtcount.dtx - Copyright 2007 Nicola Talbot + Copyright 2009 Nicola Talbot This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 @@ -18,13 +18,15 @@ The Current Maintainer of this work is Nicola Talbot. - This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. + This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. \endpreamble \askforoverwritefalse -\generate{\file{fc-british.def}{\usepreamble\defaultpreamble +\generate{\file{fmtcount.sty}{\usepreamble\defaultpreamble +\usepostamble\defaultpostamble\from{fmtcount.dtx}{fmtcount.sty,package}} +\file{fc-british.def}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-british.def,package}} \file{fc-english.def}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-english.def,package}} @@ -32,6 +34,8 @@ \usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-french.def,package}} \file{fc-german.def}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-german.def,package}} +\file{fc-italian.def}{\usepreamble\defaultpreamble +\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-italian.def,package}} \file{fc-portuges.def}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-portuges.def,package}} \file{fc-spanish.def}{\usepreamble\defaultpreamble @@ -40,9 +44,11 @@ \usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-UKenglish.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{fmtcount.perl}{\nopreamble\nopostamble\from{fmtcount.dtx}{fmtcount.perl}} +\file{fc-lang.tex}{\usepreamble\defaultpreamble +\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-lang.tex,package}} +\file{fc-samp.tex}{\usepreamble\defaultpreamble +\usepostamble\defaultpostamble\from{fmtcount.dtx}{fc-samp.tex,package}} } \endbatchfile diff --git a/Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl b/Master/texmf-dist/source/latex/fmtcount/fmtcount.perl index bc7d3b9fb4e..bc7d3b9fb4e 100644 --- a/Master/texmf-dist/doc/latex/fmtcount/fmtcount.perl +++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.perl diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-UKenglish.def b/Master/texmf-dist/tex/latex/fmtcount/fc-UKenglish.def index 2ae7b5c9d46..8ba1ed71ac7 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-UKenglish.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-UKenglish.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-UKenglish.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-USenglish.def b/Master/texmf-dist/tex/latex/fmtcount/fc-USenglish.def index ffe14d460f9..124ec302585 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-USenglish.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-USenglish.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-USenglish.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-british.def b/Master/texmf-dist/tex/latex/fmtcount/fc-british.def index ade516c7b12..26985cbf76a 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-british.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-british.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-british.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-english.def b/Master/texmf-dist/tex/latex/fmtcount/fc-english.def index 57350de33b0..1aafbd806fe 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-english.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-english.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-english.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-french.def b/Master/texmf-dist/tex/latex/fmtcount/fc-french.def index e517c002408..dedfca9b0c3 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-french.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-french.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-french.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-german.def b/Master/texmf-dist/tex/latex/fmtcount/fc-german.def index 53c1f488271..7908ebd398a 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-german.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-german.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-german.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-italian.def b/Master/texmf-dist/tex/latex/fmtcount/fc-italian.def new file mode 100644 index 00000000000..0c4bfa7ffda --- /dev/null +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-italian.def @@ -0,0 +1,771 @@ +%% +%% This is file `fc-italian.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fmtcount.dtx (with options: `fc-italian.def,package') +%% +%% fmtcount.dtx +%% Copyright 2009 Nicola Talbot +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license of (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Nicola Talbot. +%% +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. +%% +%% \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 \~} +\ProvidesFile{fc-italian.def}[2009/10/02 Italian support for fmtcount (Edoardo Pasca)] +\newcommand{\@@unitstringitalian}[1]{% +\ifcase#1\relax +zero% +\or uno% +\or due% +\or tre% +\or quattro% +\or cinque% +\or sei% +\or sette% +\or otto% +\or nove% +\fi +} + +\newcommand{\@@unitstringFitalian}[1]{% +\ifcase#1\relax +zero% +\or una% +\or doe% +\or tre% +\or quattro% +\or cinque% +\or sei% +\or sette% +\or otto% +\or nove% +\fi +} + +\newcommand{\@@tenstringitalian}[1]{% +\ifcase#1\relax +\or dieci% +\or venti% +\or trenta% +\or quaranta% +\or cinquanta% +\or sessanta% +\or settanta% +\or ottanta% +\or novanta% +\or cento% +\fi +} + +\newcommand{\@@teenstringitalian}[1]{% +\ifcase#1\relax +dieci% +\or undici% +\or dodici% +\or tredici% +\or quattordici% +\or quindici% +\or sedici% +\or diciassette% +\or diciotto% +\or diciannove% +\fi +} + +\newcommand{\@@twentystringitalian}[1]{% +\ifcase#1\relax +venti% +\or ventuno% +\or ventidue% +\or ventitre% +\or ventiquattro% +\or venticinque% +\or ventisei% +\or ventisette% +\or ventiotto% +\or ventinove% +\fi} + +\newcommand{\@@twentystringFitalian}[1]{% +\ifcase#1\relax +venti% +\or ventuna% +\or ventidue% +\or ventitre% +\or ventiquattro% +\or venticinque% +\or ventisei% +\or ventisette% +\or ventiotto% +\or ventinove% +\fi} + +\newcommand{\@@hundredstringitalian}[1]{% +\ifcase#1\relax +\or cento% +\or duecento% +\or trecento% +\or quattrocento% +\or cinquecento% +\or seicento% +\or settecento% +\or ottocento% +\or novecento% +\fi} + +\newcommand{\@@hundredstringFitalian}[1]{% +\ifcase#1\relax +\or cento% +\or duecento% +\or trecento% +\or quattrocento% +\or cinquecento% +\or seicento% +\or settecento% +\or ottocento% +\or novecento% +\fi} + +\newcommand{\@@Unitstringitalian}[1]{% +\ifcase#1\relax +Zero% +\or Uno% +\or Due% +\or Tre% +\or Quattro% +\or Cinque% +\or Sei% +\or Sette% +\or Otto% +\or Nove% +\fi +} + +\newcommand{\@@UnitstringFitalian}[1]{% +\ifcase#1\relax +Zero% +\or Una% +\or Due% +\or Tre% +\or Quattro% +\or Cinque% +\or Sei% +\or Sette% +\or Otto% +\or Nove% +\fi +} + +\newcommand{\@@Tenstringitalian}[1]{% +\ifcase#1\relax +\or Dieci% +\or Venti% +\or Trenta% +\or Quaranta% +\or Cinquanta% +\or Sessanta% +\or Settanta% +\or Ottanta% +\or Novanta% +\or Cento% +\fi +} + +\newcommand{\@@Teenstringitalian}[1]{% +\ifcase#1\relax +Dieci% +\or Undici% +\or Dodici% +\or Tredici% +\or Quattordici% +\or Quindici% +\or Sedici% +\or Diciassette% +\or Diciotto% +\or Diciannove% +\fi +} + +\newcommand{\@@Twentystringitalian}[1]{% +\ifcase#1\relax +Venti% +\or Ventuno% +\or Ventidue% +\or Ventitre% +\or Ventiquattro% +\or Venticinque% +\or Ventisei% +\or Ventisette% +\or Ventiotto% +\or Ventinove% +\fi} + +\newcommand{\@@TwentystringFitalian}[1]{% +\ifcase#1\relax +Venti% +\or Ventuno% +\or Ventidue% +\or Ventitre% +\or Ventiquattro% +\or Venticinque% +\or Ventisei% +\or Ventisette% +\or Ventiotto% +\or Ventinove% +\fi} + +\newcommand{\@@Hundredstringitalian}[1]{% +\ifcase#1\relax +\or Cento% +\or Duecento% +\or Trecento% +\or Quattrocento% +\or Cinquecento% +\or Seicento% +\or Settecento% +\or Ottocento% +\or Novecento% +\fi} + +\newcommand{\@@HundredstringFitalian}[1]{% +\ifcase#1\relax +\or Cento% +\or Duecento% +\or Trecento% +\or Quattrocento% +\or Cinquecento% +\or Seicento% +\or Settecento% +\or Ottocento% +\or Novecento% +\fi} + +\newcommand{\@numberstringMitalian}[2]{% +\let\@unitstring=\@@unitstringitalian +\let\@teenstring=\@@teenstringitalian +\let\@tenstring=\@@tenstringitalian +\let\@twentystring=\@@twentystringitalian +\let\@hundredstring=\@@hundredstringitalian +\def\@hundred{cien}\def\@thousand{mil}% +\def\@andname{y}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@numberstringFitalian}[2]{% +\let\@unitstring=\@@unitstringFitalian +\let\@teenstring=\@@teenstringitalian +\let\@tenstring=\@@tenstringitalian +\let\@twentystring=\@@twentystringFitalian +\let\@hundredstring=\@@hundredstringFitalian +\def\@hundred{cien}\def\@thousand{mil}% +\def\@andname{y}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@NumberstringMitalian}[2]{% +\let\@unitstring=\@@Unitstringitalian +\let\@teenstring=\@@Teenstringitalian +\let\@tenstring=\@@Tenstringitalian +\let\@twentystring=\@@Twentystringitalian +\let\@hundredstring=\@@Hundredstringitalian +\def\@andname{y}% +\def\@hundred{Cien}\def\@thousand{Mil}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@NumberstringFitalian}[2]{% +\let\@unitstring=\@@UnitstringFitalian +\let\@teenstring=\@@Teenstringitalian +\let\@tenstring=\@@Tenstringitalian +\let\@twentystring=\@@TwentystringFitalian +\let\@hundredstring=\@@HundredstringFitalian +\def\@andname{y}% +\def\@hundred{Cien}\def\@thousand{Mil}% +\@@numberstringitalian{#1}{#2}} + +\newcommand{\@ordinalstringMitalian}[2]{% +\let\@unitthstring=\@@unitthstringitalian +\let\@unitstring=\@@unitstringitalian +\let\@teenthstring=\@@teenthstringitalian +\let\@tenthstring=\@@tenthstringitalian +\let\@hundredthstring=\@@hundredthstringitalian +\def\@thousandth{millesimo}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@ordinalstringFitalian}[2]{% +\let\@unitthstring=\@@unitthstringFitalian +\let\@unitstring=\@@unitstringFitalian +\let\@teenthstring=\@@teenthstringFitalian +\let\@tenthstring=\@@tenthstringFitalian +\let\@hundredthstring=\@@hundredthstringFitalian +\def\@thousandth{millesima}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@OrdinalstringMitalian}[2]{% +\let\@unitthstring=\@@Unitthstringitalian +\let\@unitstring=\@@Unitstringitalian +\let\@teenthstring=\@@Teenthstringitalian +\let\@tenthstring=\@@Tenthstringitalian +\let\@hundredthstring=\@@Hundredthstringitalian +\def\@thousandth{Millesimo}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@OrdinalstringFitalian}[2]{% +\let\@unitthstring=\@@UnitthstringFitalian +\let\@unitstring=\@@UnitstringFitalian +\let\@teenthstring=\@@TeenthstringFitalian +\let\@tenthstring=\@@TenthstringFitalian +\let\@hundredthstring=\@@HundredthstringFitalian +\def\@thousandth{Millesima}% +\@@ordinalstringitalian{#1}{#2}} + +\newcommand{\@ordinalMitalian}[2]{\edef#2{#1\relax\noexpand\fmtord{o}}} +\newcommand{\@ordinalFitalian}[2]{\edef#2{#1\relax\noexpand\fmtord{a}}} + +\newcommand{\@@unitthstringitalian}[1]{% +\ifcase#1\relax +zero% +\or primo% +\or secondo% +\or terzo% +\or quarto% +\or quinto% +\or sesto% +\or settimo% +\or ottavo% +\or nono% +\fi +} + +\newcommand{\@@tenthstringitalian}[1]{% +\ifcase#1\relax +\or decimo% +\or ventesimo% +\or trentesimo% +\or quarantesimo% +\or cinquantesimo% +\or sessantesimo% +\or settantesimo% +\or ottantesimo% +\or novantesimo% +\fi +} + +\newcommand{\@@teenthstringitalian}[1]{% +\ifcase#1\relax +decimo% +\or undicesimo% +\or dodicesimo% +\or tredicesimo% +\or quattordicesimo% +\or quindicesimo% +\or sedicesimo% +\or diciassettesimo% +\or diciottesimo% +\or diciannovesimo% +\fi +} + +\newcommand{\@@hundredthstringitalian}[1]{% +\ifcase#1\relax +\or centesimo% +\or duecentesimo% +\or trecentesimo% +\or quattrocentesimo% +\or cinquecentesimo% +\or seicentesimo% +\or settecentesimo% +\or ottocentesimo% +\or novecentesimo% +\fi} + +\newcommand{\@@unitthstringFitalian}[1]{% +\ifcase#1\relax +zero% +\or prima% +\or seconda% +\or terza% +\or quarta% +\or quinta% +\or sesta% +\or settima% +\or ottava% +\or nona% +\fi +} + +\newcommand{\@@tenthstringFitalian}[1]{% +\ifcase#1\relax +\or decima% +\or ventesima% +\or trentesima% +\or quarantesima% +\or cinquantesima% +\or sessantesima% +\or settantesima% +\or ottantesima% +\or novantesima% +\fi +} + +\newcommand{\@@teenthstringFitalian}[1]{% +\ifcase#1\relax +decima% +\or undicesima% +\or dodicesima% +\or tredicesima% +\or quattordicesima% +\or quindicesima% +\or sedicesima% +\or diciassettesima% +\or diciottesima% +\or diciannovesima% +\fi +} + +\newcommand{\@@hundredthstringFitalian}[1]{% +\ifcase#1\relax +\or centesima% +\or duecentesima% +\or trecentesima% +\or quattrocentesima% +\or cinquecentesima% +\or seicentesima% +\or settecentesima% +\or ottocentesima% +\or novecentesima% +\fi} + +\newcommand{\@@Unitthstringitalian}[1]{% +\ifcase#1\relax +Zero% +\or Primo% +\or Secondo% +\or Terzo% +\or Quarto% +\or Quinto% +\or Sesto% +\or Settimo% +\or Ottavo% +\or Nono% +\fi +} + +\newcommand{\@@Tenthstringitalian}[1]{% +\ifcase#1\relax +\or Decimo% +\or Ventesimo% +\or Trentesimo% +\or Quarantesimo% +\or Cinquantesimo% +\or Sessantesimo% +\or Settantesimo% +\or Ottantesimo% +\or Novantesimo% +\fi +} + +\newcommand{\@@Teenthstringitalian}[1]{% +\ifcase#1\relax +Decimo% +\or Undicesimo% +\or Dodicesimo% +\or Tredicesimo% +\or Quattordicesimo% +\or Quindicesimo% +\or Sedicesimo% +\or Diciassettesimo% +\or Diciottesimo% +\or Diciannovesimo% +\fi +} + +\newcommand{\@@Hundredthstringitalian}[1]{% +\ifcase#1\relax +\or Centesimo% +\or Duecentesimo% +\or Trecentesimo% +\or Quattrocentesimo% +\or Cinquecentesimo% +\or Seicentesimo% +\or Settecentesimo% +\or Ottocentesimo% +\or Novecentesimo% +\fi} + +\newcommand{\@@UnitthstringFitalian}[1]{% +\ifcase#1\relax +Zero% +\or Prima% +\or Seconda% +\or Terza% +\or Quarta% +\or Quinta% +\or Sesta% +\or Settima% +\or Ottava% +\or Nona% +\fi +} + +\newcommand{\@@TenthstringFitalian}[1]{% +\ifcase#1\relax +\or Decima% +\or Ventesima% +\or Trentesima% +\or Quarantesima% +\or Cinquantesima% +\or Sessantesima% +\or Settantesima% +\or Ottantesima% +\or Novantesima% +\fi +} + +\newcommand{\@@TeenthstringFitalian}[1]{% +\ifcase#1\relax +Decima% +\or Undicesima% +\or Dodicesima% +\or Tredicesima% +\or Quattordicesima% +\or Quindicesima% +\or Sedicesima% +\or Diciassettesima% +\or Diciottesima% +\or Diciannovesima% +\fi +} + +\newcommand{\@@HundredthstringFitalian}[1]{% +\ifcase#1\relax +\or Centesima% +\or Duecentesima% +\or Trecentesima% +\or Quattrocentesima% +\or Cinquecentesima% +\or Seicentesima% +\or Settecentesima% +\or Ottocentesima% +\or Novecentesima% +\fi} + +\newcommand{\@@numberstringitalian}[2]{% +\def#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 +\@strctr=#1\relax \divide\@strctr by 1000\relax +\ifnum\@strctr>9\relax + \divide\@strctr by 10\relax + \ifnum\@strctr>1\relax + \edef#2{\@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}% + \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>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 +} + +\newcommand{\@@ordinalstringitalian}[2]{% +\@strctr=#1\relax +\def#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}% + \else + \ifnum\@strctr>999\relax + \divide\@strctr by 1000\relax + \ifnum\@strctr>1\relax + \ifnum\@strctr>9\relax + \@tmpstrctr=\@strctr + \ifnum\@strctr<20\relax + \@modulo{\@tmpstrctr}{10}% + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@teenthstring{\@tmpstrctr} }% + \else + \divide\@tmpstrctr by 10\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@tenthstring{\@tmpstrctr} }% + \@tmpstrctr=\@strctr + \@modulo{\@tmpstrctr}{10}% + \ifnum\@tmpstrctr>0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitthstring{\@tmpstrctr} }% + \fi + \fi + \else + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitstring{\@strctr} }% + \fi + \fi + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@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@numstr#2\relax + \edef#2{\@@fc@numstr\ }% + \fi + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@hundredthstring{\@tmpstrctr}}% + \fi + \@modulo{\@strctr}{100}% + \ifnum#1>99\relax + \ifnum\@strctr>0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\ }% + \fi + \fi + \ifnum\@strctr>19\relax + \@tmpstrctr=\@strctr + \divide\@tmpstrctr by 10\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@tenthstring{\@tmpstrctr}}% + \@tmpstrctr=\@strctr + \@modulo{\@tmpstrctr}{10}% + \ifnum\@tmpstrctr>0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\ \@unitthstring{\@tmpstrctr}}% + \fi + \else + \ifnum\@strctr>9\relax + \@modulo{\@strctr}{10}% + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@teenthstring{\@strctr}}% + \else + \ifnum\@strctr=0\relax + \ifnum#1=0\relax + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitstring{0}}% + \fi + \else + \let\@@fc@numstr#2\relax + \edef#2{\@@fc@numstr\@unitthstring{\@strctr}}% + \fi + \fi + \fi + \fi +\fi +} + +\endinput +%% +%% End of file `fc-italian.def'. diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-portuges.def b/Master/texmf-dist/tex/latex/fmtcount/fc-portuges.def index d455f008040..3dc4cf90d1e 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-portuges.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-portuges.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-portuges.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fc-spanish.def b/Master/texmf-dist/tex/latex/fmtcount/fc-spanish.def index f96f924b712..a7e513a5d27 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fc-spanish.def +++ b/Master/texmf-dist/tex/latex/fmtcount/fc-spanish.def @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fc-spanish.def,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 diff --git a/Master/texmf-dist/tex/latex/fmtcount/fmtcount.sty b/Master/texmf-dist/tex/latex/fmtcount/fmtcount.sty index 5b4748b6599..cc1dfb7819c 100644 --- a/Master/texmf-dist/tex/latex/fmtcount/fmtcount.sty +++ b/Master/texmf-dist/tex/latex/fmtcount/fmtcount.sty @@ -7,7 +7,7 @@ %% fmtcount.dtx (with options: `fmtcount.sty,package') %% %% fmtcount.dtx -%% Copyright 2007 Nicola Talbot +%% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.sty, fmtcount.perl. +%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fmtcount.sty, fc-british.def, fc-english.def, fc-french.def, fc-german.def, fc-italian.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def, fmtcount.perl, fc-lang.tex, fc-samp.tex. %% %% \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 @@ -39,9 +39,10 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{fmtcount}[2007/07/20 v1.3] +\ProvidesPackage{fmtcount}[2009/10/02 v1.31] \RequirePackage{ifthen} \RequirePackage{keyval} +\RequirePackage{amsgen} \providecommand*{\fmtord}[1]{\textsuperscript{#1}} \newcount\c@padzeroesN \c@padzeroesN=1\relax @@ -56,6 +57,7 @@ \@ifundefined{l@german}{% \@ifundefined{l@ngerman}{}{\input{fc-german.def}}}{% \input{fc-german.def}} +\@ifundefined{l@italian}{}{\input{fc-italian.def}} \def\fmtcount@french{france} \define@key{fmtcount}{french}[france]{% \@ifundefined{datefrench}{% @@ -328,7 +330,7 @@ or `user'}}} \advance\@DT@loopN by -\@strctr \ifnum\@DT@loopN>0\relax \@strctr=0\relax -\whiledo{\@strctr < \@DT@loopN}{0\advance\@strctr by 1}% +\whiledo{\@strctr < \@DT@loopN}{0\advance\@strctr by 1\relax}% \fi \number#1\relax } @@ -340,7 +342,7 @@ or `user'}}} \@ifundefined{ordinal}{\let\ordinal\FCordinal}{% \PackageWarning{fmtcount}{\string\ordinal \space already defined use \string\FCordinal \space instead.}} -\newcommand*{\ordinalnum}[1]{\@ifnextchar[{\@ordinalnum{#1}}{% +\newcommand*{\ordinalnum}[1]{\new@ifnextchar[{\@ordinalnum{#1}}{% \@ordinalnum{#1}[m]}} \def\@ordinalnum#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% @@ -379,7 +381,7 @@ Available options are m or f}}% \expandafter\protect\expandafter\ordinalstringnum{% \expandafter\the\csname c@#1\endcsname}} \newcommand{\ordinalstringnum}[1]{% -\@ifnextchar[{\@ordinal@string{#1}}{\@ordinal@string{#1}[m]}} +\new@ifnextchar[{\@ordinal@string{#1}}{\@ordinal@string{#1}[m]}} \def\@ordinal@string#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% \protect\@ordinalstringF{#1}{\@fc@ordstr}}{% @@ -409,7 +411,7 @@ Available options are m or f}}% \expandafter\protect\expandafter\Ordinalstringnum{% \expandafter\the\csname c@#1\endcsname}} \newcommand*{\Ordinalstringnum}[1]{% -\@ifnextchar[{\@Ordinal@string{#1}}{\@Ordinal@string{#1}[m]}} +\new@ifnextchar[{\@Ordinal@string{#1}}{\@Ordinal@string{#1}[m]}} \def\@Ordinal@string#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% \protect\@OrdinalstringF{#1}{\@fc@ordstr}}{% @@ -456,7 +458,7 @@ Available options are m or f}}% \expandafter\protect\expandafter\ORDINALstringnum{% \expandafter\the\csname c@#1\endcsname}} \newcommand*{\ORDINALstringnum}[1]{% -\@ifnextchar[{\@ORDINAL@string{#1}}{\@ORDINAL@string{#1}[m]}} +\new@ifnextchar[{\@ORDINAL@string{#1}}{\@ORDINAL@string{#1}[m]}} \def\@ORDINAL@string#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% \protect\@ordinalstringF{#1}{\@fc@ordstr}}{% @@ -487,7 +489,7 @@ Available options are m, f or n}}% \expandafter\protect\expandafter\numberstringnum{% \expandafter\the\csname c@#1\endcsname}} \newcommand*{\numberstringnum}[1]{% -\@ifnextchar[{\@number@string{#1}}{\@number@string{#1}[m]}% +\new@ifnextchar[{\@number@string{#1}}{\@number@string{#1}[m]}% } \def\@number@string#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% @@ -518,7 +520,7 @@ Available options are m, f or n}}% \expandafter\protect\expandafter\Numberstringnum{% \expandafter\the\csname c@#1\endcsname}} \newcommand*{\Numberstringnum}[1]{% -\@ifnextchar[{\@Number@string{#1}}{\@Number@string{#1}[m]}} +\new@ifnextchar[{\@Number@string{#1}}{\@Number@string{#1}[m]}} \def\@Number@string#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% \protect\@NumberstringF{#1}{\@fc@numstr}}{% @@ -549,7 +551,7 @@ Available options are m or f}}% \expandafter\protect\expandafter\NUMBERstringnum{% \expandafter\the\csname c@#1\endcsname}} \newcommand*{\NUMBERstringnum}[1]{% -\@ifnextchar[{\@NUMBER@string{#1}}{\@NUMBER@string{#1}[m]}} +\new@ifnextchar[{\@NUMBER@string{#1}}{\@NUMBER@string{#1}[m]}} \def\@NUMBER@string#1[#2]{{% \ifthenelse{\equal{#2}{f}}{% \protect\@numberstringF{#1}{\@fc@numstr}}{% |