diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx | 1009 |
1 files changed, 668 insertions, 341 deletions
diff --git a/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx index 9293bdd287d..b4cbc52a536 100644 --- a/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx +++ b/Master/texmf-dist/source/latex/fmtcount/fmtcount.dtx @@ -5,7 +5,7 @@ % -doc "fmtcount-manual.tex" % -author "Nicola Talbot and Vincent Belaïche" % fmtcount -% Created on 2015/5/8 16:50 +% Created on 2017/6/15 19:28 %\fi %\iffalse %<*package> @@ -28,7 +28,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2015 Nicola Talbot and Vincent Belaïche, all rights reserved. +% Copyright (C) 2017 Nicola Talbot and Vincent Belaïche, all rights reserved. % \fi % \iffalse %<*driver> @@ -49,20 +49,19 @@ \newcommand*{\LanguagePackageOptionList}{{% \def\@tempf##1{\texttt{##1}}% how to format each option % we don't use \cs{newtoks} because anyway this is within a group - \toks0{}% - \def\@tempd{\toks0}% token in which we accumulate result - \def\@tempc{\toks1}% token in which we place next dialect + \toks0{}% token in which we accumulate result + % \toks1 token in which we place next dialect \count0 0 % to distinguish first and second iteration, we need to do tricks because we want to insert `and' % before the last item in the list. \def\@tempb##1{% \ifnum\count0=0 % \else\ifnum\count0=1 % - \expandafter\@tempd\expandafter{\the\toks1}% + \toks0\toks1 % \else \edef\@tempa{\the\toks0, \the\toks1}% - \expandafter\@tempd\expandafter{\@tempa}% + \toks0\expandafter{\@tempa}% \fi\fi - \expandafter\@tempc\expandafter{\@tempf{##1}}% + \toks1\expandafter{\@tempf{##1}}% \advance\count0 by 1 % }% \fc@iterate@on@languages\@tempb @@ -78,11 +77,19 @@ pdftitle={fmtcount.sty: Displaying the Values of LaTeX Counters}, pdfkeywords={LaTeX,counter}]{hyperref} -\CheckSum{9930} +\CheckSum{10157} \doxitem{Option}{option}{options} \newlength{\tabcolwidth} +\newlength{\coliwidth} +\newcommand*\cnab{\centering\arraybackslash} +\newcommand*\ColIRI[1]{} +\csname @ifpackageloaded\endcsname{tex4ht}{% +\newcommand*\ColIRII[1]{\parbox{\coliwidth}{\cnab #1}} +}{% +\newcommand*\ColIRII[1]{\multirow{-2}{\coliwidth}{\cnab #1}} +} \begin{document} \DocInput{fmtcount.dtx} @@ -97,7 +104,7 @@ % \url{www.dickimaw-books.com} % \and % Vincent Bela\"iche} -% \date{2015-05-05 (version 3.01)\relax +% \date{2016-01-12 (version 3.02)\relax %} % \maketitle % \tableofcontents @@ -712,24 +719,24 @@ %\setlength{\tabcolwidth}{\linewidth} %\addtolength{\tabcolwidth}{-10\tabcolsep} %\addtolength{\tabcolwidth}{-6\arrayrulewidth} +%\setlength{\coliwidth}{0.398\tabcolwidth} +%\addtolength{\coliwidth}{\arrayrulewidth} +%\addtolength{\coliwidth}{2\tabcolsep} %\noindent\begin{tabular*}{\linewidth}{|% % >{\centering\arraybackslash\ttfamily}p{\dimexpr0.204\tabcolwidth-\arrayrulewidth-\doublerulesep}||% % *{4}{>{\centering\arraybackslash\ttfamily}p{0.199\tabcolwidth}|}}\hline % \textrm{\meta{x} dans ``\meta{x} }plural\textrm{''}&traditional&reformed&traditional o&reformed o\\\hline % \hline -% vingt&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}\\\cline{1-1} +% vingt&\multicolumn{2}{c|}{\ColIRI{multiple l-last}}&\multicolumn{2}{c|}{\ColIRI{multiple lng-last}}\\\cline{1-1} % cent&% -% \multicolumn{2}{c|}{\multirow{-2}{\dimexpr0.398\tabcolwidth+\arrayrulewidth+2\tabcolsep}{\centering -% multiple l-last}}&% -% \multicolumn{2}{c|}{\multirow{-2}{\dimexpr0.398\tabcolwidth+\arrayrulewidth+2\tabcolsep}{\centering -% multiple lng-last}}\\\hline +% \multicolumn{2}{c|}{\ColIRII{multiple l-last}}&% +% \multicolumn{2}{c|}{\ColIRII{multiple lng-last}}\\\hline % mil&\multicolumn{4}{c|}{always}\\\hline -% n-illion&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}\\\cline{1-1} +% n-illion&\multicolumn{2}{c|}{\ColIRI{multiple}}&% +% \multicolumn{2}{c|}{\ColIRI{multiple ng-last}}\\\cline{1-1} % n-illiard&% -% \multicolumn{2}{c|}{\multirow{-2}{\dimexpr0.398\tabcolwidth+\arrayrulewidth+2\tabcolsep}{\centering -% multiple}}&% -% \multicolumn{2}{c|}{\multirow{-2}{\dimexpr0.398\tabcolwidth+\arrayrulewidth+2\tabcolsep}{\centering -% multiple ng-last}}\\\hline +% \multicolumn{2}{c|}{\ColIRII{multiple}}&% +% \multicolumn{2}{c|}{\ColIRII{multiple ng-last}}\\\hline %\end{tabular*} % %Les configurations qui respectent les règles d'orthographe sont les suivantes~: @@ -889,17 +896,18 @@ %<*fc-american.def> % \end{macrocode} %\fi +% \subsection{Language definition files} % \subsubsection{fc-american.def} % American English definitions % \begin{macrocode} -\ProvidesFCLanguage{american}[2013/08/17]% +\ProvidesFCLanguage{american}[2016/01/12]% % \end{macrocode} % Loaded fc-USenglish.def if not already loaded % \begin{macrocode} \FCloadlang{USenglish}% % \end{macrocode} % These are all just synonyms for the commands provided by -% fc-USenglish.def. +% \styfmt{fc-USenglish.def}. % \begin{macrocode} \global\let\@ordinalMamerican\@ordinalMUSenglish \global\let\@ordinalFamerican\@ordinalMUSenglish @@ -917,6 +925,9 @@ \global\let\@OrdinalstringFamerican\@OrdinalstringMUSenglish \global\let\@OrdinalstringNamerican\@OrdinalstringMUSenglish % \end{macrocode} +\iffalse Local variables: \fi +\iffalse mode: docTeX \fi +\iffalse End: \fi %\iffalse % \begin{macrocode} %</fc-american.def> @@ -968,7 +979,7 @@ % \subsubsection{fc-english.def} % English definitions % \begin{macrocode} -\ProvidesFCLanguage{english}[2013/08/17]% +\ProvidesFCLanguage{english}[2016/01/12]% % \end{macrocode} % Define macro that converts a number or count register (first % argument) to an ordinal, and stores the result in the @@ -1213,10 +1224,15 @@ this number}% }% \global\let\@@numberstringenglish\@@numberstringenglish % \end{macrocode} -% All lower case version, the second argument must be a -% control sequence. +% All lower case version, the second argument must be a control +% sequence.% +% \changes{3.02}{2016/01/12}{Replace \cs{DeclareRobustCommand} by +% \cs{newcommand*} as robustness is handled now at top level in +% \texttt{fmtcount.sty}, and we don't need \cs{long} macros. Concerned +% macros are \cs{@numberstringMenglish}, \cs{@ordinalstringMenglish}, +% and \cs{@OrdinalstringMenglish}} % \begin{macrocode} -\DeclareRobustCommand{\@numberstringMenglish}[2]{% +\newcommand*{\@numberstringMenglish}[2]{% \let\@unitstring=\@@unitstringenglish \let\@teenstring=\@@teenstringenglish \let\@tenstring=\@@tenstringenglish @@ -1485,7 +1501,7 @@ this number}% % All lower case version. Again, the second argument must be a % control sequence in which the resulting text is stored. % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMenglish}[2]{% +\newcommand*{\@ordinalstringMenglish}[2]{% \let\@unitthstring=\@@unitthstringenglish \let\@teenthstring=\@@teenthstringenglish \let\@tenthstring=\@@tenthstringenglish @@ -1507,7 +1523,7 @@ this number}% % \end{macrocode} % First letter of each word in upper case: % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMenglish}[2]{% +\newcommand*{\@OrdinalstringMenglish}[2]{% \let\@unitthstring=\@@Unitthstringenglish \let\@teenthstring=\@@Teenthstringenglish \let\@tenthstring=\@@Tenthstringenglish @@ -1527,6 +1543,9 @@ this number}% \global\let\@OrdinalstringFenglish=\@OrdinalstringMenglish \global\let\@OrdinalstringNenglish=\@OrdinalstringMenglish % \end{macrocode} +\iffalse Local variables: \fi +\iffalse mode: docTeX \fi +\iffalse End: \fi %\iffalse % \begin{macrocode} %</fc-english.def> @@ -1574,12 +1593,37 @@ this number}% % \subsubsection{fc-french.def} % Definitions for French. % \begin{macrocode} -\ProvidesFCLanguage{french}[2012/10/24]% +\ProvidesFCLanguage{french}[2017/06/15]% +% \end{macrocode} +% Package \styfmt{fcprefix} is needed to format the prefix \meta{$n$} +% in \meta{$n$}illion or \meta{$n$}illiard. Big numbers were +% developped based on reference: \uref +% {http://www.alain.be/boece/noms\_de\_nombre.html}. Package \styfmt +% {fcprefix} is now loaded by \styfmt{fmtcount}. +% +% First of all we define two macros \cs{fc@gl@let} and \cs{fc@gl@def} +% used in place of \cs{let} and \cs{def} within options setting +% macros. This way we can control from outside these macros whether +% the respective \cs{let} or \cs{def} is group-local or global. By +% default they are defined to be group-local. +% \changes{3.02}{2016/01/12}{First of all, make command definitions, as well as +% options initial setting global. That is mainly a matter of: +% \protect\begin{itemize} +% \protect\item using \cs{gdef} instead of \cs{def}, +% \protect\item using \cs{global}\cs{let} instead of \cs{let}, and +% \protect\item following \cs{newcommand*}\cs{\meta{foo}} by \cs{global}\cs{let}\cs{\meta{foo}}\cs{\meta{foo}}. +% \protect\item using \cs{fc@gl@let} and \cs{fc@gl@def} in place of \cs{let} +% \protect\item and \cs{def} within options setting macros in order to make intial +% \protect\item setting global. +% \protect\end{itemize} +% Second, replace any \cs{DeclareRobustCommand} by \cs{newcommand*} +% } +% \begin{macrocode} +\ifcsundef{fc@gl@let}{\global\let\fc@gl@let\let}{\PackageError{fmtcount}{Command already defined}{Command +\protect\fc@gl@let\space already defined.}} +\ifcsundef{fc@gl@def}{\global\let\fc@gl@def\def}{\PackageError{fmtcount}{Command already defined}{Command +\protect\fc@gl@def\space already defined.}} % \end{macrocode} -% Package \styfmt{fcprefix} is needed to format the prefix \meta{$n$} in \meta{$n$}illion or -% \meta{$n$}illiard. Big numbers were developped based on reference: -% \uref{http://www.alain.be/boece/noms\_de\_nombre.html} -% (Package now loaded by \styfmt{fmtcount}) % % Options for controlling plural mark. First of all we define some temporary macro \cs{fc@french@set@plural} % in order to factorize code that defines an plural mark option:\newline\noindent @@ -1592,45 +1636,45 @@ this number}% % \#6&configuration index for `\texttt{traditional o}'. % \end{tabularx} % \begin{macrocode} -\def\fc@french@set@plural#1#2#3#4#5#6{% +\gdef\fc@french@set@plural#1#2#3#4#5#6{% \ifthenelse{\equal{#2}{reformed}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#3}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{#3}% }{% \ifthenelse{\equal{#2}{traditional}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#4}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{#4}% }{% \ifthenelse{\equal{#2}{reformed o}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#5}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{#5}% }{% \ifthenelse{\equal{#2}{traditional o}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{#6}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{#6}% }{% \ifthenelse{\equal{#2}{always}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{0}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{0}% }{% \ifthenelse{\equal{#2}{never}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{1}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{1}% }{% \ifthenelse{\equal{#2}{multiple}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{2}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{2}% }{% \ifthenelse{\equal{#2}{multiple g-last}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{3}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{3}% }{% \ifthenelse{\equal{#2}{multiple l-last}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{4}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{4}% }{% \ifthenelse{\equal{#2}{multiple lng-last}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{5}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{5}% }{% \ifthenelse{\equal{#2}{multiple ng-last}}{% - \expandafter\def\csname fc@frenchoptions@#1@plural\endcsname{6}% + \expandafter\fc@gl@def\csname fc@frenchoptions@#1@plural\endcsname{6}% }{% \PackageError{fmtcount}{Unexpected argument}{% `#2' was unexpected: french option `#1 plural' expects `reformed', `traditional', `reformed o', `traditional o', `always', `never', `multiple', `multiple g-last', `multiple l-last', `multiple lng-last', or `multiple ng-last'.% - }}}}}}}}}}}}} + }}}}}}}}}}}}}% % \end{macrocode} % Now a shorthand \cs{@tempa} is defined just to define all the options controlling plural mark. This % shorthand takes into account that `\texttt{reformed}' and `\texttt{traditional}' have the same effect, and @@ -1640,7 +1684,17 @@ this number}% \define@key{fcfrench}{#1 plural}[reformed]{% \fc@french@set@plural{#1}{##1}{#2}{#2}{#3}{#3}% }% -} +% \end{macrocode} +% Macro \cs{@tempb} takes a macro as argument, and makes its current +% definition global. Like here it is useful when the macro name +% contains non-letters, and we have to resort to the +% \cs{csname}\ldots\cs{endcsname} construct. +% \begin{macrocode} + \expandafter\@tempb\csname KV@fcfrench@#1 plural\endcsname +}% +\def\@tempb#1{% + \global\let#1#1 +}% \@tempa{vingt}{4}{5} \@tempa{cent}{4}{5} \@tempa{mil}{0}{0} @@ -1656,7 +1710,8 @@ this number}% \csname KV@fcfrench@mil plural\endcsname{#1}% \csname KV@fcfrench@n-illion plural\endcsname{#1}% \csname KV@fcfrench@n-illiard plural\endcsname{#1}% -} +}% +\expandafter\@tempb\csname KV@fcfrench@all plural\endcsname % \end{macrocode} % Now options `\texttt{dash or space}', we have three possible key values:\newline\noindent % \begin{tabularx}{\linewidth}{@{}>{\raggedleft\arraybackslash\ttfamily}rX@{}} @@ -1685,7 +1740,7 @@ this number}% }% }% }% -} +}% % \end{macrocode} % Option `\texttt{scale}', can take 3 possible values:\newline\noindent % \begin{tabularx}{\linewidth}{@{}>{\raggedleft\arraybackslash\ttfamily}rX@{}} @@ -1712,7 +1767,7 @@ this number}% }% }% }% -} +}% % \end{macrocode} % Option `\texttt{n-illiard upto}' is ignored if `\texttt{scale}' is different from `\texttt{long}'. It can % take the following values:\newline\noindent @@ -1737,7 +1792,7 @@ this number}% \fi \def\fc@longscale@nilliard@upto{#1}% }}% -} +}% % \end{macrocode} % Now, the options `\texttt{france}', `\texttt{swiss}' and `\texttt{belgian}' are defined to select the % dialect to use. Macro \cs{@tempa} is just a local shorthand to define each one of this option. @@ -1746,15 +1801,15 @@ this number}% \define@key{fcfrench}{#1}[]{% \PackageError{fmtcount}{Unexpected argument}{French option with key `#1' does not take any value}}% - \expandafter\def\csname KV@fcfrench@#1@default\endcsname{% - \def\fmtcount@french{#1}}% + \csgdef{KV@fcfrench@#1@default}{% + \fc@gl@def\fmtcount@french{#1}}% }% \@tempa{france}\@tempa{swiss}\@tempa{belgian}% % \end{macrocode} % Make `\texttt{france}' the default dialect for `\texttt{french}' language % \changes{3.01}{2014-12-18}{Move French specific stuff from \styfmt{fmtcount.sty} to \styfmt{fc-french.def}.} % \begin{macrocode} -\def\fmtcount@french{france}% +\gdef\fmtcount@french{france}% % \end{macrocode} % Now, option `\texttt{dialect}' is now defined so that `\texttt{france}', `\texttt{swiss}' and % `\texttt{belgian}' can also be used as key values, which is more conventional although less concise. @@ -1766,29 +1821,61 @@ this number}% \def\fmtcount@french{#1}}{% \PackageError{fmtcount}{Invalid value `#1' to french option dialect key} {Option `french' can only take the values `france', - `belgian' or `swiss'}}} + `belgian' or `swiss'}}}% +\expandafter\@tempb\csname KV@fcfrench@dialect\endcsname % \end{macrocode} % The option \texttt{mil plural mark} allows to make the plural of \texttt{mil} to be regular, % i.e. \texttt{mils}, instead of \texttt{mille}. By default it is `\texttt{le}'. % \begin{macrocode} \define@key{fcfrench}{mil plural mark}[le]{% \def\fc@frenchoptions@mil@plural@mark{#1}} +\expandafter\@tempb\csname KV@fcfrench@mil plural mark\endcsname % \end{macrocode} % Definition of case handling macros. This should be moved somewhere else to be commonalized between all -% languages. +% languages.\newline +% \DescribeMacro{\fc@UpperCaseFirstLetter}The macro \cs{fc@UpperCaseFirstLetter} is such that +% \cs{fc@UpperCaseFirstLetter}\meta{word}\cs{@nil} expands to \cs{word} with first letter capitalized and +% remainder unchanged. % \begin{macrocode} -\def\fc@UpperCaseFirstLetter#1#2\@nil{% +\gdef\fc@UpperCaseFirstLetter#1#2\@nil{% \uppercase{#1}#2} - -\def\fc@CaseIden#1\@nil{% +% \end{macrocode} +% \DescribeMacro{\fc@CaseIden}The macro \cs{fc@CaseIden} is such that \cs{fc@CaseIden}\meta{word}\cs{@nil} +% expands to \cs{word} unchanged. +% \begin{macrocode} +\gdef\fc@CaseIden#1\@nil{% #1% -} -\def\fc@UpperCaseAll#1\@nil{% +}% +% \end{macrocode} +% \DescribeMacro{\fc@UpperCaseAll}The macro \cs{fc@UpperCaseAll} is such that \cs{fc@UpperCaseAll}\meta{word}\cs{@nil} +% expands to \cs{word} all capitalized. +% \begin{macrocode} +\gdef\fc@UpperCaseAll#1\@nil{% \uppercase{#1}% +}% +% \end{macrocode} +% \DescribeMacro{\fc@wcase}The macro \cs{fc@wcase} is the capitalizing macro for word-by-word +% capitalization. By default we set it to identity, ie.\ no capitalization. +% \begin{macrocode} +\global\let\fc@wcase\fc@CaseIden +% \end{macrocode} +% \DescribeMacro{\fc@gcase}The macro \cs{fc@gcase} is the capitalizing macro for global (the completed number) +% capitalization. By default we set it to identity, ie.\ no capitalization. +% \changes{3.02}{2017/06/15}{Create new macro \cs{fc@gcase} for solving +% \uref{http://github.com/nlct/fmtcount/issues/24}{Issue \#24} about capitalization in French.} +% \begin{macrocode} +\global\let\fc@gcase\fc@CaseIden +% \end{macrocode} +% \DescribeMacro{\fc@apply@gcase}The macro \cs{fc@apply@gcase} simply applies \cs{fc@gcase} to \cs{@tempa}, +% knowing that \cs{@tempa} is the macro containing the result of formatting. +% \begin{macrocode} +\gdef\fc@apply@gcase{% +% \end{macrocode} +% First of all we expand whatever \cs{fc@wcase}\ldots\cs{@nil} found within \cs{@tempa}. +% \begin{macrocode} + \protected@edef\@tempa{\@tempa}% + \protected@edef\@tempa{\expandafter\fc@gcase\@tempa\@nil}% } - -\let\fc@case\fc@CaseIden - % \end{macrocode} % \DescribeMacro{\@ordinalMfrench} % \changes{3.01}{2014-11-12}{Protect \cs{`}, for solving @@ -1814,6 +1901,7 @@ this number}% \protected@edef#2{\number#1\relax\noexpand\fmtord{\protect\`eme}}% \fi \fi} +\global\let\@ordinalMfrench\@ordinalMfrench % \end{macrocode} % \DescribeMacro{\@ordinalFfrench} % \changes{3.01}{2014-11-10}{Protect \cs{`}, for solving @@ -1838,15 +1926,16 @@ this number}% \protected@edef#2{\number#1\relax\noexpand\fmtord{\protect\`eme}}% \fi \fi} +\global\let\@ordinalFfrench\@ordinalFfrench % \end{macrocode} % In French neutral gender and masculine gender are formally identical. % \begin{macrocode} -\let\@ordinalNfrench\@ordinalMfrench +\global\let\@ordinalNfrench\@ordinalMfrench % \end{macrocode} % \DescribeMacro{\@@unitstringfrench} % \begin{macrocode} \newcommand*{\@@unitstringfrench}[1]{% -\noexpand\fc@case +\noexpand\fc@wcase \ifcase#1 % z\'ero% \or un% @@ -1860,12 +1949,13 @@ z\'ero% \or neuf% \fi \noexpand\@nil -} +}% +\global\let\@@unitstringfrench\@@unitstringfrench % \end{macrocode} % \DescribeMacro{\@@tenstringfrench} % \begin{macrocode} \newcommand*{\@@tenstringfrench}[1]{% -\noexpand\fc@case +\noexpand\fc@wcase \ifcase#1 % \or dix% \or vingt% @@ -1879,12 +1969,13 @@ z\'ero% \or cent% \fi \noexpand\@nil -} +}% +\global\let\@@tenstringfrench\@@tenstringfrench % \end{macrocode} % \DescribeMacro{\@@teenstringfrench} % \begin{macrocode} \newcommand*{\@@teenstringfrench}[1]{% -\noexpand\fc@case +\noexpand\fc@wcase \ifcase#1 % dix% \or onze% @@ -1893,12 +1984,13 @@ z\'ero% \or quatorze% \or quinze% \or seize% -\or dix\noexpand\@nil-\noexpand\fc@case sept% -\or dix\noexpand\@nil-\noexpand\fc@case huit% -\or dix\noexpand\@nil-\noexpand\fc@case neuf% +\or dix\noexpand\@nil-\noexpand\fc@wcase sept% +\or dix\noexpand\@nil-\noexpand\fc@wcase huit% +\or dix\noexpand\@nil-\noexpand\fc@wcase neuf% \fi \noexpand\@nil -} +}% +\global\let\@@teenstringfrench\@@teenstringfrench % \end{macrocode} % \DescribeMacro{\@@seventiesfrench} % \begin{macrocode} @@ -1910,7 +2002,8 @@ z\'ero% -% \fi \@teenstring{#1}% -} +}% +\global\let\@@seventiesfrench\@@seventiesfrench % \end{macrocode} % \DescribeMacro{\@@eightiesfrench}Macro \cs{@@eightiesfrench} is used to format numbers in the interval % \([80\intv 89]\). Argument as follows:\newline @@ -1928,7 +2021,7 @@ z\'ero% % \end{tabularx} % \begin{macrocode} \newcommand*\@@eightiesfrench[1]{% -\fc@case quatre\@nil-\noexpand\fc@case vingt% +\fc@wcase quatre\@nil-\noexpand\fc@wcase vingt% \ifnum#1>0 % \ifnum\fc@frenchoptions@vingt@plural=0 % vingt plural=always s% @@ -1967,279 +2060,312 @@ z\'ero% \fi \noexpand\@nil \fi -} +}% +\global\let\@@eightiesfrench\@@eightiesfrench \newcommand*{\@@ninetiesfrench}[1]{% -\fc@case quatre\@nil-\noexpand\fc@case vingt% +\fc@wcase quatre\@nil-\noexpand\fc@wcase vingt% \ifnum\fc@frenchoptions@vingt@plural=0 % vingt plural=always s% \fi \noexpand\@nil -\@teenstring{#1}% -} +}% +\global\let\@@ninetiesfrench\@@ninetiesfrench \newcommand*{\@@seventiesfrenchswiss}[1]{% \@tenstring{7}% \ifnum#1=1\ \@andname\ \fi \ifnum#1>1-\fi \ifnum#1>0 \@unitstring{#1}\fi -} +}% +\global\let\@@seventiesfrenchswiss\@@seventiesfrenchswiss \newcommand*{\@@eightiesfrenchswiss}[1]{% \@tenstring{8}% \ifnum#1=1\ \@andname\ \fi \ifnum#1>1-\fi \ifnum#1>0 \@unitstring{#1}\fi -} +}% +\global\let\@@eightiesfrenchswiss\@@eightiesfrenchswiss \newcommand*{\@@ninetiesfrenchswiss}[1]{% \@tenstring{9}% \ifnum#1=1\ \@andname\ \fi \ifnum#1>1-\fi \ifnum#1>0 \@unitstring{#1}\fi -} +}% +\global\let\@@ninetiesfrenchswiss\@@ninetiesfrenchswiss % \end{macrocode} % \DescribeMacro{\fc@french@common}Macro \cs{fc@french@common} does all the preliminary settings common to all % French dialects \& formatting options. % \begin{macrocode} \newcommand*\fc@french@common{% + \let\fc@wcase\fc@CaseIden \let\@unitstring=\@@unitstringfrench \let\@teenstring=\@@teenstringfrench \let\@tenstring=\@@tenstringfrench \def\@hundred{cent}% \def\@andname{et}% -} +}% +\global\let\fc@french@common\fc@french@common % \end{macrocode} % \begin{macrocode} -\DeclareRobustCommand{\@numberstringMfrenchswiss}[2]{% -\let\fc@case\fc@CaseIden +\newcommand*{\@numberstringMfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \let\fc@nbrstr@preamble\@empty \let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@numberstringMfrenchfrance}[2]{% -\let\fc@case\fc@CaseIden +\global\let\@numberstringMfrenchswiss\@numberstringMfrenchswiss +\newcommand*{\@numberstringMfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\@empty \let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@numberstringMfrenchbelgian}[2]{% -\let\fc@case\fc@CaseIden +\global\let\@numberstringMfrenchfrance\@numberstringMfrenchfrance +\newcommand*{\@numberstringMfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\@empty \let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} +\global\let\@numberstringMfrenchbelgian\@numberstringMfrenchbelgian \let\@numberstringMfrench=\@numberstringMfrenchfrance -\DeclareRobustCommand{\@numberstringFfrenchswiss}[2]{% -\let\fc@case\fc@CaseIden +\newcommand*{\@numberstringFfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble \let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@numberstringFfrenchfrance}[2]{% -\let\fc@case\fc@CaseIden +\global\let\@numberstringFfrenchswiss\@numberstringFfrenchswiss +\newcommand*{\@numberstringFfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble \let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@numberstringFfrenchbelgian}[2]{% -\let\fc@case\fc@CaseIden +\global\let\@numberstringFfrenchfrance\@numberstringFfrenchfrance +\newcommand*{\@numberstringFfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble \let\fc@nbrstr@postamble\@empty \@@numberstringfrench{#1}{#2}} -\let\@numberstringFfrench=\@numberstringFfrenchfrance -\let\@ordinalstringNfrench\@ordinalstringMfrench -\DeclareRobustCommand{\@NumberstringMfrenchswiss}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter +\global\let\@numberstringFfrenchbelgian\@numberstringFfrenchbelgian +\global\let\@numberstringFfrench=\@numberstringFfrenchfrance +\global\let\@ordinalstringNfrench\@ordinalstringMfrench +\newcommand*{\@NumberstringMfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \let\fc@nbrstr@preamble\@empty -\let\fc@nbrstr@postamble\@empty +\let\fc@nbrstr@postamble\fc@apply@gcase \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@NumberstringMfrenchfrance}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter +\global\let\@NumberstringMfrenchswiss\@NumberstringMfrenchswiss +\newcommand*{\@NumberstringMfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\@empty -\let\fc@nbrstr@postamble\@empty +\let\fc@nbrstr@postamble\fc@apply@gcase \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@NumberstringMfrenchbelgian}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter +\global\let\@NumberstringMfrenchfrance\@NumberstringMfrenchfrance +\newcommand*{\@NumberstringMfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\@empty -\let\fc@nbrstr@postamble\@empty +\let\fc@nbrstr@postamble\fc@apply@gcase \@@numberstringfrench{#1}{#2}} -\let\@NumberstringMfrench=\@NumberstringMfrenchfrance -\DeclareRobustCommand{\@NumberstringFfrenchswiss}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter +\global\let\@NumberstringMfrenchbelgian\@NumberstringMfrenchbelgian +\global\let\@NumberstringMfrench=\@NumberstringMfrenchfrance +\newcommand*{\@NumberstringFfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble -\let\fc@nbrstr@postamble\@empty +\let\fc@nbrstr@postamble\fc@apply@gcase \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@NumberstringFfrenchfrance}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter +\global\let\@NumberstringFfrenchswiss\@NumberstringFfrenchswiss +\newcommand*{\@NumberstringFfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble -\let\fc@nbrstr@postamble\@empty +\let\fc@nbrstr@postamble\fc@apply@gcase \@@numberstringfrench{#1}{#2}} -\DeclareRobustCommand{\@NumberstringFfrenchbelgian}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter +\global\let\@NumberstringFfrenchfrance\@NumberstringFfrenchfrance +\newcommand*{\@NumberstringFfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \let\fc@nbrstr@preamble\fc@@nbrstr@Fpreamble -\let\fc@nbrstr@postamble\@empty +\let\fc@nbrstr@postamble\fc@apply@gcase \@@numberstringfrench{#1}{#2}} -\let\@NumberstringFfrench=\@NumberstringFfrenchfrance -\let\@NumberstringNfrench\@NumberstringMfrench -\DeclareRobustCommand{\@ordinalstringMfrenchswiss}[2]{% -\let\fc@case\fc@CaseIden -\let\fc@first=\fc@@firstfrench +\global\let\@NumberstringFfrenchbelgian\@NumberstringFfrenchbelgian +\global\let\@NumberstringFfrench=\@NumberstringFfrenchfrance +\global\let\@NumberstringNfrench\@NumberstringMfrench +\newcommand*{\@ordinalstringMfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden +\let\fc@first\fc@@firstfrench \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \@@ordinalstringfrench{#1}{#2}% -} +}% +\global\let\@ordinalstringMfrenchswiss\@ordinalstringMfrenchswiss \newcommand*\fc@@firstfrench{premier} +\global\let\fc@@firstfrench\fc@@firstfrench % \end{macrocode} % \changes{3.01}{2014-11-10}{Protect \cs{`}, for solving % \uref{http://github.com/nlct/fmtcount/issues/15}{Issue \#15}} % \begin{macrocode} \newcommand*\fc@@firstFfrench{premi\protect\`ere} -\DeclareRobustCommand{\@ordinalstringMfrenchfrance}[2]{% -\let\fc@case\fc@CaseIden -\let\fc@first=\fc@@firstfrench +\global\let\fc@@firstFfrench\fc@@firstFfrench +\newcommand*{\@ordinalstringMfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden +\let\fc@first=\fc@@firstfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}} -\DeclareRobustCommand{\@ordinalstringMfrenchbelgian}[2]{% -\let\fc@case\fc@CaseIden -\let\fc@first=\fc@@firstfrench +\global\let\@ordinalstringMfrenchfrance\@ordinalstringMfrenchfrance +\newcommand*{\@ordinalstringMfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden +\let\fc@first=\fc@@firstfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance -\DeclareRobustCommand{\@ordinalstringFfrenchswiss}[2]{% -\let\fc@case\fc@CaseIden -\let\fc@first=\fc@@firstFfrench +}% +\global\let\@ordinalstringMfrenchbelgian\@ordinalstringMfrenchbelgian +\global\let\@ordinalstringMfrench=\@ordinalstringMfrenchfrance +\newcommand*{\@ordinalstringFfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden +\let\fc@first\fc@@firstFfrench \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \@@ordinalstringfrench{#1}{#2}% -} -\DeclareRobustCommand{\@ordinalstringFfrenchfrance}[2]{% -\let\fc@case\fc@CaseIden -\let\fc@first=\fc@@firstFfrench +}% +\global\let\@ordinalstringFfrenchswiss\@ordinalstringFfrenchswiss +\newcommand*{\@ordinalstringFfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden +\let\fc@first=\fc@@firstFfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\DeclareRobustCommand{\@ordinalstringFfrenchbelgian}[2]{% -\let\fc@case\fc@CaseIden -\let\fc@first=\fc@@firstFfrench +}% +\global\let\@ordinalstringFfrenchfrance\@ordinalstringFfrenchfrance +\newcommand*{\@ordinalstringFfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@CaseIden +\let\fc@first=\fc@@firstFfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance -\let\@ordinalstringNfrench\@ordinalstringMfrench -\DeclareRobustCommand{\@OrdinalstringMfrenchswiss}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter -\let\fc@first=\fc@@firstfrench +}% +\global\let\@ordinalstringFfrenchbelgian\@ordinalstringFfrenchbelgian +\global\let\@ordinalstringFfrench=\@ordinalstringFfrenchfrance +\global\let\@ordinalstringNfrench\@ordinalstringMfrench +\newcommand*{\@OrdinalstringMfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter +\let\fc@first=\fc@@firstfrench \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \@@ordinalstringfrench{#1}{#2}% -} -\DeclareRobustCommand{\@OrdinalstringMfrenchfrance}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter -\let\fc@first=\fc@@firstfrench +}% +\global\let\@OrdinalstringMfrenchswiss\@OrdinalstringMfrenchswiss +\newcommand*{\@OrdinalstringMfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter +\let\fc@first\fc@@firstfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\DeclareRobustCommand{\@OrdinalstringMfrenchbelgian}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter -\let\fc@first=\fc@@firstfrench +}% +\global\let\@OrdinalstringMfrenchfrance\@OrdinalstringMfrenchfrance +\newcommand*{\@OrdinalstringMfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter +\let\fc@first\fc@@firstfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance -\DeclareRobustCommand{\@OrdinalstringFfrenchswiss}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter -\let\fc@first=\fc@@firstfrench +}% +\global\let\@OrdinalstringMfrenchbelgian\@OrdinalstringMfrenchbelgian +\global\let\@OrdinalstringMfrench=\@OrdinalstringMfrenchfrance +\newcommand*{\@OrdinalstringFfrenchswiss}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter +\let\fc@first\fc@@firstfrench \let\@seventies=\@@seventiesfrenchswiss \let\@eighties=\@@eightiesfrenchswiss \let\@nineties=\@@ninetiesfrenchswiss \@@ordinalstringfrench{#1}{#2}% -} -\DeclareRobustCommand{\@OrdinalstringFfrenchfrance}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter -\let\fc@first=\fc@@firstFfrench +}% +\global\let\@OrdinalstringFfrenchswiss\@OrdinalstringFfrenchswiss +\newcommand*{\@OrdinalstringFfrenchfrance}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter +\let\fc@first\fc@@firstFfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\DeclareRobustCommand{\@OrdinalstringFfrenchbelgian}[2]{% -\let\fc@case\fc@UpperCaseFirstLetter -\let\fc@first=\fc@@firstFfrench +}% +\global\let\@OrdinalstringFfrenchfrance\@OrdinalstringFfrenchfrance +\newcommand*{\@OrdinalstringFfrenchbelgian}[2]{% \fc@french@common +\let\fc@gcase\fc@UpperCaseFirstLetter +\let\fc@first\fc@@firstFfrench \let\@seventies=\@@seventiesfrench \let\@eighties=\@@eightiesfrench \let\@nineties=\@@ninetiesfrench \@@ordinalstringfrench{#1}{#2}% -} -\let\@OrdinalstringFfrench=\@OrdinalstringFfrenchfrance -\let\@OrdinalstringNfrench\@OrdinalstringMfrench +}% +\global\let\@OrdinalstringFfrenchbelgian\@OrdinalstringFfrenchbelgian +\global\let\@OrdinalstringFfrench=\@OrdinalstringFfrenchfrance +\global\let\@OrdinalstringNfrench\@OrdinalstringMfrench % \end{macrocode} % \DescribeMacro{\fc@@do@plural@mark}Macro \cs{fc@@do@plural@mark} will expand to the plural mark of % \meta{$n$}illiard, \meta{$n$}illion, mil, cent or vingt, whichever is applicable. First check that the macro @@ -2301,7 +2427,8 @@ z\'ero% \fi \fi \fi -} +}% +\global\let\fc@@do@plural@mark\fc@@do@plural@mark % \end{macrocode} % \DescribeMacro{\fc@@nbrstr@Fpreamble}Macro \cs{fc@@nbrstr@Fpreamble} do the necessary preliminaries before % formatting a cardinal with feminine gender. @@ -2315,24 +2442,26 @@ z\'ero% \def\fc@@nbrstr@Fpreamble{% \fc@read@unit{\count1}{0}% \ifnum\count1=1 % - \let\fc@case@save\fc@case - \def\fc@case{\noexpand\fc@case}% + \let\fc@wcase@save\fc@wcase + \def\fc@wcase{\noexpand\fc@wcase}% \def\@nil{\noexpand\@nil}% \let\fc@nbrstr@postamble\fc@@nbrstr@Fpostamble \fi -} +}% +\global\let\fc@@nbrstr@Fpreamble\fc@@nbrstr@Fpreamble % \end{macrocode} % \DescribeMacro{\fc@@nbrstr@Fpostamble} % \begin{macrocode} \def\fc@@nbrstr@Fpostamble{% - \let\fc@case\fc@case@save + \let\fc@wcase\fc@wcase@save \expandafter\fc@get@last@word\expandafter{\@tempa}\@tempb\@tempc \def\@tempd{un}% \ifx\@tempc\@tempd \let\@tempc\@tempa - \edef\@tempa{\@tempb\fc@case une\@nil}% + \edef\@tempa{\@tempb\fc@wcase une\@nil}% \fi -} +}% +\global\let\fc@@nbrstr@Fpostamble\fc@@nbrstr@Fpostamble % \end{macrocode} % \DescribeMacro{\fc@@pot@longscalefrench}Macro \cs{fc@@pot@longscalefrench} is used to produce % powers of ten with long scale convention. The long scale convention is correct for French and elsewhere in @@ -2431,7 +2560,7 @@ z\'ero% % \begin{macrocode} \count10=\fc@frenchoptions@mil@plural\space \edef\@tempe{% - \noexpand\fc@case + \noexpand\fc@wcase mil% \fc@@do@plural@mark\fc@frenchoptions@mil@plural@mark \noexpand\@nil @@ -2448,7 +2577,7 @@ z\'ero% \count10=\csname fc@frenchoptions@n-illion@plural\endcsname\space \fi \edef\@tempe{% - \noexpand\fc@case + \noexpand\fc@wcase \@tempg \the\toks10 % \fc@@do@plural@mark s% @@ -2479,7 +2608,8 @@ z\'ero% \edef\@tempa{\the\toks0 \@temph \def\noexpand#3{\the\toks1}}% \expandafter }\@tempa -} +}% +\global\let\fc@@pot@longscalefrench\fc@@pot@longscalefrench % \end{macrocode} % \DescribeMacro{\fc@@pot@shortscalefrench}Macro \cs{fc@@pot@shortscalefrench} is used to produce % powers of ten with short scale convention. This convention is the US convention and is not correct for @@ -2529,7 +2659,7 @@ z\'ero% \expandafter\fc@@latin@cardinal@pefix\expandafter{\the\count2}\@tempg \count10=\csname fc@frenchoptions@n-illion@plural\endcsname\space \edef\@tempe{% - \noexpand\fc@case + \noexpand\fc@wcase \@tempg illion% \fc@@do@plural@mark s% @@ -2558,7 +2688,8 @@ z\'ero% \edef\@tempa{\the\toks0 \@temph \def\noexpand#3{\the\toks1}}% \expandafter }\@tempa -} +}% +\global\let\fc@@pot@shortscalefrench\fc@@pot@shortscalefrench % \end{macrocode} % \DescribeMacro{\fc@@pot@recursivefrench}Macro \cs{fc@@pot@recursivefrench} is used to produce % power of tens that are of the form ``million de milliards de milliards'' for \(10^{24}\). First we check @@ -2592,7 +2723,7 @@ z\'ero% \advance\count2 by -1 % \let\@tempe\@empty \edef\@tempf{\fc@frenchoptions@supermillion@dos - de\fc@frenchoptions@supermillion@dos\fc@case milliards\@nil}% + de\fc@frenchoptions@supermillion@dos\fc@wcase milliards\@nil}% \count11\count0 % \ifnum\count2>0 % \count3\count2 % @@ -2649,16 +2780,16 @@ z\'ero% \or mil\fc@@do@plural@mark\fc@frenchoptions@mil@plural@mark \noexpand\@nil\fc@frenchoptions@supermillion@dos - \noexpand\fc@case milliards% 4 + \noexpand\fc@wcase milliards% 4 \or million\fc@@do@plural@mark s% \noexpand\@nil\fc@frenchoptions@supermillion@dos - de\fc@frenchoptions@supermillion@dos\noexpand\fc@case milliards% 5 + de\fc@frenchoptions@supermillion@dos\noexpand\fc@wcase milliards% 5 \fi }% \edef\@tempe{% \ifx\@tempf\@empty\else - \expandafter\fc@case\@tempf\@nil + \expandafter\fc@wcase\@tempf\@nil \fi \@tempg }% @@ -2667,7 +2798,7 @@ z\'ero% \let\@tempe\@empty \fi % \end{macrocode} -% now place into \@cs{@tempa} the assignment of results \cs{@temph} and \cs{@tempe} to to \texttt{\#2} and +% Now place into \@cs{@tempa} the assignment of results \cs{@temph} and \cs{@tempe} to \texttt{\#2} and % \texttt{\#3} for further propagation after closing brace. % \begin{macrocode} \expandafter\toks\expandafter1\expandafter{\@tempe}% @@ -2675,7 +2806,8 @@ z\'ero% \edef\@tempa{\the\toks0 \@temph \def\noexpand#3{\the\toks1}}% \expandafter }\@tempa -} +}% +\global\let\fc@@pot@recursivefrench\fc@@pot@recursivefrench % \end{macrocode} % \DescribeMacro{\fc@muladdfrench}Macro \cs{fc@muladdfrench} is used to format the sum of a number \(a\) and % the product of a number \(d\) by a power of ten \(10^w\). Number \(d\) is made of three consecutive digits @@ -2773,6 +2905,7 @@ z\'ero% \expandafter }\@tempa }% +\global\let\fc@muladdfrench\fc@muladdfrench % \end{macrocode} % \DescribeMacro{\fc@lthundredstringfrench}Macro \cs{fc@lthundredstringfrench} is used to format a number in % interval \([0 \intv 99]\). First we check that it is not already defined. @@ -2875,7 +3008,8 @@ z\'ero% \expandafter\@tempb\expandafter{\@tempa}% \expandafter }\@tempa -} +}% +\global\let\fc@lthundredstringfrench\fc@lthundredstringfrench % \end{macrocode} % \DescribeMacro{\fc@ltthousandstringfrench}Macro \cs{fc@ltthousandstringfrench} is used to format a number in % interval \([0 \intv 999]\). First we check that it is not already defined. @@ -2939,10 +3073,10 @@ z\'ero% \ifnum\count2=0 % \else \ifnum\count2=1 % - \expandafter\fc@case\@hundred\@nil + \expandafter\fc@wcase\@hundred\@nil \else \@unitstring{\count2}\fc@frenchoptions@submillion@dos - \noexpand\fc@case\@hundred\@temps\noexpand\@nil + \noexpand\fc@wcase\@hundred\@temps\noexpand\@nil \fi \@tempb \fi @@ -2956,7 +3090,8 @@ z\'ero% \expandafter\@tempb\expandafter{\@tempa}% \expandafter }\@tempa -} +}% +\global\let\fc@ltthousandstringfrench\fc@ltthousandstringfrench % \end{macrocode} % \DescribeMacro{\@@numberstringfrench}Macro \cs{@@numberstringfrench} is the main engine for formatting % cadinal numbers in French. First we check that the control sequence is not yet defined. @@ -2987,7 +3122,7 @@ z\'ero% % \cs{fc@sign@case} expands to `\texttt{0}', then \cs{@tempa} is defined to `' (i.e. empty) rather than to % `\cs{relax}'. % \begin{macrocode} - \edef\@tempa{\ifcase\fc@sign@case\space\or\fc@case plus\@nil\or\fc@case moins\@nil\fi}% + \edef\@tempa{\ifcase\fc@sign@case\space\or\fc@wcase plus\@nil\or\fc@wcase moins\@nil\fi}% \fc@nbrstr@preamble \fc@@nbrstrfrench@inner \fc@nbrstr@postamble @@ -2998,7 +3133,8 @@ z\'ero% \expandafter\@tempb\expandafter{\@tempa}% \expandafter }\@tempa -} +}% +\global\let\@@numberstringfrench\@@numberstringfrench % \end{macrocode} % \DescribeMacro{\fc@@nbrstrfrench@inner}Common part of \cs{@@numberstringfrench} and \cs % {@@ordinalstringfrench}. Arguments are as follows:\newline\noindent @@ -3055,7 +3191,8 @@ z\'ero% \advance\count0 by -3 % \ifnum\count6>\count0 \else \repeat -} +}% +\global\let\fc@@nbrstrfrench@inner\fc@@nbrstrfrench@inner % \end{macrocode} % \DescribeMacro{\@@ordinalstringfrench}Macro \cs{@@ordinalstringfrench} is the main engine for formatting % ordinal numbers in French. First check it is not yet defined. @@ -3103,7 +3240,7 @@ z\'ero% % \changes{3.01}{2014-11-10}{Protect \cs{`}, for solving % \uref{http://github.com/nlct/fmtcount/issues/15}{Issue \#15}} % \begin{macrocode} - \protected@edef\@tempa{\expandafter\fc@case\fc@first\@nil}% + \protected@edef\@tempa{\expandafter\fc@wcase\fc@first\@nil}% \else % \end{macrocode} % Now we tamper a little bit with the plural handling options to ensure that there is no final plural mark. @@ -3133,10 +3270,10 @@ z\'ero% \@tempa{n-illion}% \@tempa{n-illiard}% % \end{macrocode} -% Now make \cs{fc@case} and \cs{@nil} non expandable +% Now make \cs{fc@wcase} and \cs{@nil} non expandable % \begin{macrocode} - \let\fc@case@save\fc@case - \def\fc@case{\noexpand\fc@case}% + \let\fc@wcase@save\fc@wcase + \def\fc@wcase{\noexpand\fc@wcase}% \def\@nil{\noexpand\@nil}% % \end{macrocode} % In the sequel, \cs{@tempa} is used to accumulate the formatted number. @@ -3144,9 +3281,9 @@ z\'ero% \let\@tempa\@empty \fc@@nbrstrfrench@inner % \end{macrocode} -% Now restore \cs{fc@case} +% Now restore \cs{fc@wcase} % \begin{macrocode} - \let\fc@case\fc@case@save + \let\fc@wcase\fc@wcase@save % \end{macrocode} % Now we add the ``i\`eme'' ending % \changes{3.01}{2014-11-10}{Protect \cs{`}, for solving @@ -3156,55 +3293,65 @@ z\'ero% \expandafter\fc@get@last@letter\expandafter{\@tempc}\@tempd\@tempe \def\@tempf{e}% \ifx\@tempe\@tempf - \protected@edef\@tempa{\@tempb\expandafter\fc@case\@tempd i\protect\`eme\@nil}% + \protected@edef\@tempa{\@tempb\expandafter\fc@wcase\@tempd i\protect\`eme\@nil}% \else \def\@tempf{q}% \ifx\@tempe\@tempf - \protected@edef\@tempa{\@tempb\expandafter\fc@case\@tempd qui\protect\`eme\@nil}% + \protected@edef\@tempa{\@tempb\expandafter\fc@wcase\@tempd qui\protect\`eme\@nil}% \else \def\@tempf{f}% \ifx\@tempe\@tempf - \protected@edef\@tempa{\@tempb\expandafter\fc@case\@tempd vi\protect\`eme\@nil}% + \protected@edef\@tempa{\@tempb\expandafter\fc@wcase\@tempd vi\protect\`eme\@nil}% \else - \protected@edef\@tempa{\@tempb\expandafter\fc@case\@tempc i\protect\`eme\@nil}% + \protected@edef\@tempa{\@tempb\expandafter\fc@wcase\@tempc i\protect\`eme\@nil}% \fi \fi \fi \fi % \end{macrocode} +% Apply \cs{fc@gcase} to the result. +% \begin{macrocode} + \fc@apply@gcase +% \end{macrocode} % Propagate the result --- i.e. expansion of \cs{@tempa} --- into macro \texttt{\#2} after closing brace. % \begin{macrocode} \def\@tempb##1{\def\@tempa{\def#2{##1}}}% \expandafter\@tempb\expandafter{\@tempa}% \expandafter }\@tempa -} +}% +\global\let\@@ordinalstringfrench\@@ordinalstringfrench % \end{macrocode} % Macro \cs{fc@frenchoptions@setdefaults} allows to set all options to default for the French. % \begin{macrocode} \newcommand*\fc@frenchoptions@setdefaults{% \csname KV@fcfrench@all plural\endcsname{reformed}% - \def\fc@frenchoptions@submillion@dos{-}% - \let\fc@frenchoptions@supermillion@dos\space - \let\fc@u@in@duo\@empty% Could be `u' - % \let\fc@poweroften\fc@@pot@longscalefrench - \let\fc@poweroften\fc@@pot@recursivefrench - \def\fc@longscale@nilliard@upto{0}% infinity - \def\fc@frenchoptions@mil@plural@mark{le}% -} -\fc@frenchoptions@setdefaults + \fc@gl@def\fc@frenchoptions@submillion@dos{-}% + \fc@gl@let\fc@frenchoptions@supermillion@dos\space + \fc@gl@let\fc@u@in@duo\@empty% Could be `u' + % \fc@gl@let\fc@poweroften\fc@@pot@longscalefrench + \fc@gl@let\fc@poweroften\fc@@pot@recursivefrench + \fc@gl@def\fc@longscale@nilliard@upto{0}% infinity + \fc@gl@def\fc@frenchoptions@mil@plural@mark{le}% +}% +\global\let\fc@frenchoptions@setdefaults\fc@frenchoptions@setdefaults +{% + \let\fc@gl@def\gdef + \def\fc@gl@let{\global\let}% + \fc@frenchoptions@setdefaults +}% % \end{macrocode} % Make some indirection to call the current French dialect corresponding macro. % \changes{3.01}{2014-12-18}{Move French specific stuff from \styfmt{fmtcount.sty} to \styfmt{fc-french.def}.} % \begin{macrocode} -\def\@ordinalstringMfrench{\csuse{@ordinalstringMfrench\fmtcount@french}}% -\def\@ordinalstringFfrench{\csuse{@ordinalstringFfrench\fmtcount@french}}% -\def\@OrdinalstringMfrench{\csuse{@OrdinalstringMfrench\fmtcount@french}}% -\def\@OrdinalstringFfrench{\csuse{@OrdinalstringFfrench\fmtcount@french}}% -\def\@numberstringMfrench{\csuse{@numberstringMfrench\fmtcount@french}}% -\def\@numberstringFfrench{\csuse{@numberstringFfrench\fmtcount@french}}% -\def\@NumberstringMfrench{\csuse{@NumberstringMfrench\fmtcount@french}}% -\def\@NumberstringFfrench{\csuse{@NumberstringFfrench\fmtcount@french}}% +\gdef\@ordinalstringMfrench{\csuse{@ordinalstringMfrench\fmtcount@french}}% +\gdef\@ordinalstringFfrench{\csuse{@ordinalstringFfrench\fmtcount@french}}% +\gdef\@OrdinalstringMfrench{\csuse{@OrdinalstringMfrench\fmtcount@french}}% +\gdef\@OrdinalstringFfrench{\csuse{@OrdinalstringFfrench\fmtcount@french}}% +\gdef\@numberstringMfrench{\csuse{@numberstringMfrench\fmtcount@french}}% +\gdef\@numberstringFfrench{\csuse{@numberstringFfrench\fmtcount@french}}% +\gdef\@NumberstringMfrench{\csuse{@NumberstringMfrench\fmtcount@french}}% +\gdef\@NumberstringFfrench{\csuse{@NumberstringFfrench\fmtcount@french}}% % \end{macrocode} \iffalse Local variables: \fi \iffalse mode: docTeX \fi @@ -3257,7 +3404,7 @@ z\'ero% % German definitions (thank you to K. H. Fricke for supplying % this information) % \begin{macrocode} -\ProvidesFCLanguage{german}[2014/06/09]% +\ProvidesFCLanguage{german}[2016/01/12]% % \end{macrocode} % Define macro that converts a number or count register (first % argument) to an ordinal, and stores the result in the @@ -3349,10 +3496,17 @@ z\'ero% }% \global\let\@@teenstringgerman\@@teenstringgerman % \end{macrocode} -% The results are stored in the second argument, but doesn't -% display anything. -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMgerman}[2]{% +% The results are stored in the second argument, but doesn't display +% anything.% +% \changes{3.02}{2016/01/12}{Replace \cs{DeclareRobustCommand} by +% \cs{newcommand*} as robustness is handled now at top level in +% \texttt{fmtcount.sty}, and we don't need \cs{long} macros. Concerned +% macros are \cs{@numberstringMgerman}, \cs{@NumberstringMgerman}, +% \cs{@ordinalstringMgerman}, \cs{@ordinalstringFgerman}, +% \cs{@ordinalstringNgerman}, \cs{@OrdinalstringMgerman}, +% \cs{@OrdinalstringFgerman}, and \cs{@OrdinalstringNgerman}.} +% \begin{macrocode} +\newcommand*{\@numberstringMgerman}[2]{% \let\@unitstring=\@@unitstringgerman \let\@teenstring=\@@teenstringgerman \let\@tenstring=\@@tenstringgerman @@ -3367,7 +3521,7 @@ z\'ero% % \end{macrocode} % As above, but initial letters in upper case: % \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMgerman}[2]{% +\newcommand*{\@NumberstringMgerman}[2]{% \@numberstringMgerman{#1}{\@@num@str}% \edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}% }% @@ -3380,7 +3534,7 @@ z\'ero% % \end{macrocode} % As above, but for ordinals. % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMgerman}[2]{% +\newcommand*{\@ordinalstringMgerman}[2]{% \let\@unitthstring=\@@unitthstringMgerman \let\@teenthstring=\@@teenthstringMgerman \let\@tenthstring=\@@tenthstringMgerman @@ -3395,7 +3549,7 @@ z\'ero% % \end{macrocode} % Feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFgerman}[2]{% +\newcommand*{\@ordinalstringFgerman}[2]{% \let\@unitthstring=\@@unitthstringFgerman \let\@teenthstring=\@@teenthstringFgerman \let\@tenthstring=\@@tenthstringFgerman @@ -3410,7 +3564,7 @@ z\'ero% % \end{macrocode} % Neuter form: % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringNgerman}[2]{% +\newcommand*{\@ordinalstringNgerman}[2]{% \let\@unitthstring=\@@unitthstringNgerman \let\@teenthstring=\@@teenthstringNgerman \let\@tenthstring=\@@tenthstringNgerman @@ -3425,7 +3579,7 @@ z\'ero% % \end{macrocode} % As above, but with initial letters in upper case. % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMgerman}[2]{% +\newcommand*{\@OrdinalstringMgerman}[2]{% \@ordinalstringMgerman{#1}{\@@num@str}% \edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}% }% @@ -3433,7 +3587,7 @@ z\'ero% % \end{macrocode} % Feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFgerman}[2]{% +\newcommand*{\@OrdinalstringFgerman}[2]{% \@ordinalstringFgerman{#1}{\@@num@str}% \edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}% }% @@ -3441,7 +3595,7 @@ z\'ero% % \end{macrocode} % Neuter form: % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringNgerman}[2]{% +\newcommand*{\@OrdinalstringNgerman}[2]{% \@ordinalstringNgerman{#1}{\@@num@str}% \edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}% }% @@ -3824,7 +3978,9 @@ z\'ero% % \begin{macrocode} \FCloadlang{germanb}% % \end{macrocode} - +\iffalse Local variables: \fi +\iffalse mode: docTeX \fi +\iffalse End: \fi %\iffalse % \begin{macrocode} %</fc-german.def> @@ -4018,7 +4174,7 @@ z\'ero% % \subsubsection{fc-portuges.def} % Portuguse definitions % \begin{macrocode} -\ProvidesFCLanguage{portuges}[2014/06/09]% +\ProvidesFCLanguage{portuges}[2016/01/12]% % \end{macrocode} % Define macro that converts a number or count register (first % argument) to an ordinal, and stores the result in the second @@ -4270,8 +4426,15 @@ z\'ero% % anything. Since it only affects internal macros, it shouldn't % affect documents created with older versions. (These internal % macros are not meant for use in documents.) -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMportuges}[2]{% +% \changes{3.02}{2016/01/12}{Replace \cs{DeclareRobustCommand} by % +\cs{newcommand*} as robustness is handled now at top level in % +\texttt{fmtcount.sty}, and we don't need \cs{long} macros. Concerned % +macros are \cs{@numberstringMportuges}, \cs{@numberstringFportuges}, +\cs{@NumberstringMportuges}, \cs{@NumberstringFportuges}, +\cs{@ordinalstringMportuges}, \cs{@ordinalstringFportuges}, +\cs{@OrdinalstringMportuges}, and \cs{@OrdinalstringFportuges}.} +% \begin{macrocode} +\newcommand*{\@numberstringMportuges}[2]{% \let\@unitstring=\@@unitstringportuges \let\@teenstring=\@@teenstringportuges \let\@tenstring=\@@tenstringportuges @@ -4284,7 +4447,7 @@ z\'ero% % \end{macrocode} % As above, but feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@numberstringFportuges}[2]{% +\newcommand*{\@numberstringFportuges}[2]{% \let\@unitstring=\@@unitstringFportuges \let\@teenstring=\@@teenstringportuges \let\@tenstring=\@@tenstringportuges @@ -4301,7 +4464,7 @@ z\'ero% % \end{macrocode} % As above, but initial letters in upper case: % \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMportuges}[2]{% +\newcommand*{\@NumberstringMportuges}[2]{% \let\@unitstring=\@@Unitstringportuges \let\@teenstring=\@@Teenstringportuges \let\@tenstring=\@@Tenstringportuges @@ -4314,7 +4477,7 @@ z\'ero% % \end{macrocode} % As above, but feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFportuges}[2]{% +\newcommand*{\@NumberstringFportuges}[2]{% \let\@unitstring=\@@UnitstringFportuges \let\@teenstring=\@@Teenstringportuges \let\@tenstring=\@@Tenstringportuges @@ -4331,7 +4494,7 @@ z\'ero% % \end{macrocode} % As above, but for ordinals. % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMportuges}[2]{% +\newcommand*{\@ordinalstringMportuges}[2]{% \let\@unitthstring=\@@unitthstringportuges \let\@unitstring=\@@unitstringportuges \let\@teenthstring=\@@teenthstringportuges @@ -4344,7 +4507,7 @@ z\'ero% % \end{macrocode} % Feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFportuges}[2]{% +\newcommand*{\@ordinalstringFportuges}[2]{% \let\@unitthstring=\@@unitthstringFportuges \let\@unitstring=\@@unitstringFportuges \let\@teenthstring=\@@teenthstringportuges @@ -4361,7 +4524,7 @@ z\'ero% % \end{macrocode} % As above, but initial letters in upper case (masculine): % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMportuges}[2]{% +\newcommand*{\@OrdinalstringMportuges}[2]{% \let\@unitthstring=\@@Unitthstringportuges \let\@unitstring=\@@Unitstringportuges \let\@teenthstring=\@@teenthstringportuges @@ -4374,7 +4537,7 @@ z\'ero% % \end{macrocode} % Feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFportuges}[2]{% +\newcommand*{\@OrdinalstringFportuges}[2]{% \let\@unitthstring=\@@UnitthstringFportuges \let\@unitstring=\@@UnitstringFportuges \let\@teenthstring=\@@teenthstringportuges @@ -4815,6 +4978,9 @@ this number}% }% \global\let\@@ordinalstringportuges\@@ordinalstringportuges % \end{macrocode} +\iffalse Local variables: \fi +\iffalse mode: docTeX \fi +\iffalse End: \fi %\iffalse % \begin{macrocode} %</fc-portuges.def> @@ -4865,7 +5031,7 @@ this number}% % \subsubsection{fc-spanish.def} % Spanish definitions % \begin{macrocode} -\ProvidesFCLanguage{spanish}[2013/08/17]% +\ProvidesFCLanguage{spanish}[2016/01/12]% % \end{macrocode} % Define macro that converts a number or count register (first % argument) to an ordinal, and stores the result in the @@ -5183,8 +5349,15 @@ this number}% % Since it only affects internal macros, it shouldn't affect % documents created with older versions. (These internal macros % are not meant for use in documents.) -% \begin{macrocode} -\DeclareRobustCommand{\@numberstringMspanish}[2]{% +% \changes{3.02}{2016/01/12}{Replace \cs{DeclareRobustCommand} by +% \cs{newcommand*} as robustness is handled now at top level in +% \texttt{fmtcount.sty}, and we don't need \cs{long} macros. Concerned +% macros as \cs{@numberstringMspanish}, \cs{@numberstringFspanish}, +% \cs{@NumberstringFspanish}, \cs{@ordinalstringMspanish}, +% \cs{@ordinalstringFspanish}, \cs{@OrdinalstringMspanish}, and +% \cs{@OrdinalstringFspanish}.} +% \begin{macrocode} +\newcommand*{\@numberstringMspanish}[2]{% \let\@unitstring=\@@unitstringspanish \let\@teenstring=\@@teenstringspanish \let\@tenstring=\@@tenstringspanish @@ -5200,7 +5373,7 @@ this number}% %\changes{2.0}{2012-06-18}{changed andname to `b' (correction %provided by Fernando Maldonado)} % \begin{macrocode} -\DeclareRobustCommand{\@numberstringFspanish}[2]{% +\newcommand*{\@numberstringFspanish}[2]{% \let\@unitstring=\@@unitstringFspanish \let\@teenstring=\@@teenstringspanish \let\@tenstring=\@@tenstringspanish @@ -5218,7 +5391,7 @@ this number}% % \end{macrocode} % As above, but initial letters in upper case: % \begin{macrocode} -\DeclareRobustCommand{\@NumberstringMspanish}[2]{% +\newcommand*{\@NumberstringMspanish}[2]{% \let\@unitstring=\@@Unitstringspanish \let\@teenstring=\@@Teenstringspanish \let\@tenstring=\@@Tenstringspanish @@ -5234,7 +5407,7 @@ this number}% %\changes{2.0}{2012-06-18}{changed andname to `b' (correction %provided by Fernando Maldonado)} % \begin{macrocode} -\DeclareRobustCommand{\@NumberstringFspanish}[2]{% +\newcommand*{\@NumberstringFspanish}[2]{% \let\@unitstring=\@@UnitstringFspanish \let\@teenstring=\@@Teenstringspanish \let\@tenstring=\@@Tenstringspanish @@ -5252,7 +5425,7 @@ this number}% % \end{macrocode} % As above, but for ordinals. % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringMspanish}[2]{% +\newcommand*{\@ordinalstringMspanish}[2]{% \let\@unitthstring=\@@unitthstringspanish \let\@unitstring=\@@unitstringspanish \let\@teenthstring=\@@teenthstringspanish @@ -5265,7 +5438,7 @@ this number}% % \end{macrocode} % Feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@ordinalstringFspanish}[2]{% +\newcommand*{\@ordinalstringFspanish}[2]{% \let\@unitthstring=\@@unitthstringFspanish \let\@unitstring=\@@unitstringFspanish \let\@teenthstring=\@@teenthstringFspanish @@ -5282,7 +5455,7 @@ this number}% % \end{macrocode} % As above, but with initial letters in upper case. % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringMspanish}[2]{% +\newcommand*{\@OrdinalstringMspanish}[2]{% \let\@unitthstring=\@@Unitthstringspanish \let\@unitstring=\@@Unitstringspanish \let\@teenthstring=\@@Teenthstringspanish @@ -5295,7 +5468,7 @@ this number}% % \end{macrocode} % Feminine form: % \begin{macrocode} -\DeclareRobustCommand{\@OrdinalstringFspanish}[2]{% +\newcommand*{\@OrdinalstringFspanish}[2]{% \let\@unitthstring=\@@UnitthstringFspanish \let\@unitstring=\@@UnitstringFspanish \let\@teenthstring=\@@TeenthstringFspanish @@ -5804,8 +5977,9 @@ this number}% }% \global\let\@@ordinalstringspanish\@@ordinalstringspanish % \end{macrocode} - -%\iffalse +\iffalse Local variables: \fi +\iffalse mode: docTeX \fi +\iffalse End: \fi%\iffalse % \begin{macrocode} %</fc-spanish.def> % \end{macrocode} @@ -5895,7 +6069,7 @@ this number}% %\subsection{fcnumparser.sty} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{fcnumparser}[2012/09/28] +\ProvidesPackage{fcnumparser}[2017/06/15] % \end{macrocode} % \cs{fc@counter@parser} is just a shorthand to parse a number held in a counter. % \begin{macrocode} @@ -6368,26 +6542,26 @@ this number}% \def\fc@get@last@word#1#2#3{% {% % \end{macrocode} -% First we split \texttt{\#1} into two parts: everything that is upto \cs{fc@case} exclusive goes to -% \cs{toks0}, and evrything from \cs{fc@case} exclusive upto the final \cs{@nil} exclusive goes to \cs{toks1}. +% First we split \texttt{\#1} into two parts: everything that is upto \cs{fc@wcase} exclusive goes to +% \cs{toks0}, and evrything from \cs{fc@wcase} exclusive upto the final \cs{@nil} exclusive goes to \cs{toks1}. % \begin{macrocode} - \def\@tempa##1\fc@case##2\@nil\fc@end{% + \def\@tempa##1\fc@wcase##2\@nil\fc@end{% \toks0{##1}% % \end{macrocode} -% Actually a dummy \cs{fc@case} is appended to \cs{toks1}, because that makes easier further checking that it -% does not contains any other \cs{fc@case}. +% Actually a dummy \cs{fc@wcase} is appended to \cs{toks1}, because that makes easier further checking that it +% does not contains any other \cs{fc@wcase}. % \begin{macrocode} - \toks1{##2\fc@case}% + \toks1{##2\fc@wcase}% }% \@tempa#1\fc@end % \end{macrocode} % Now leading part upto last word should be in \cs{toks0}, and last word should be in \cs{toks1}. However we -% need to check that this is really the last word, i.e. we need to check that there is no \cs{fc@case} inside +% need to check that this is really the last word, i.e. we need to check that there is no \cs{fc@wcase} inside % \cs{toks1} other than the tailing dummy one. To that purpose we will loop while we find that \cs{toks1} -% contains some \cs{fc@case}. First we define \cs{@tempa} to split \cs{the}\cs{toks1} between parts before and -% after some potential \cs{fc@case}. +% contains some \cs{fc@wcase}. First we define \cs{@tempa} to split \cs{the}\cs{toks1} between parts before and +% after some potential \cs{fc@wcase}. % \begin{macrocode} - \def\@tempa##1\fc@case##2\fc@end{% + \def\@tempa##1\fc@wcase##2\fc@end{% \toks2{##1}% \def\@tempb{##2}% \toks3{##2}% @@ -6403,7 +6577,7 @@ this number}% \expandafter\@tempa\the\toks1 \fc@end \ifx\@tempb\@empty % \end{macrocode} -% \cs{@tempb} empty means that the only \cs{fc@case} found in \cs{the}\cs{toks1} is the dummy one. So we end +% \cs{@tempb} empty means that the only \cs{fc@wcase} found in \cs{the}\cs{toks1} is the dummy one. So we end % the loop here, \cs{toks2} contains the last word. % \begin{macrocode} \let\next\relax @@ -6414,7 +6588,7 @@ this number}% \expandafter\expandafter\expandafter\@tempt \expandafter\expandafter\expandafter{% \expandafter\the\expandafter\@tempt - \expandafter\fc@case\the\toks2}% + \expandafter\fc@wcase\the\toks2}% \toks1\toks3 % \fi \next @@ -7081,11 +7255,12 @@ this number}% %<*fmtcount.sty> % \end{macrocode} %\fi + %\subsection{fmtcount.sty} % This section deals with the code for |fmtcount.sty| % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{fmtcount}[2015/05/05 v3.01] +\ProvidesPackage{fmtcount}[2016/01/12 v3.02] \RequirePackage{ifthen} % \end{macrocode} % \changes{3.01}{2014-12-18}{Use \styfmt{xkeyval} instead of \styfmt{keyval}, so that we do not get in trouble @@ -7463,7 +7638,7 @@ italian} %\end{option} %\begin{macro}{\fmtcountsetoptions} % Define command to set options. -% \changes{3.01}{2014-12-18}{ Move French specific stuff to \styfmt{french.def}.} +% \changes{3.01}{2014-12-18}{Move French specific stuff to \styfmt{french.def}.} % \begin{macrocode} \def\fmtcountsetoptions{% \def\fmtcount@fmtord{}% @@ -7569,8 +7744,9 @@ italian} % \end{macrocode} %\begin{macro}{\binarynum} % Converts a decimal number to binary, and display. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@binary}[1]{% +\newrobustcmd*{\@binary}[1]{% \@DT@padzeroestrue \@DT@loopN=17\relax \@strctr=\@DT@loopN @@ -7600,8 +7776,9 @@ italian} %\end{macro} %\begin{macro}{\octalnum} % Converts a decimal number to octal, and displays. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@octal}[1]{% +\newrobustcmd*{\@octal}[1]{% \ifnum#1>32768 \PackageError{fmtcount}% {Value of counter too large for \protect\@octal} @@ -7645,8 +7822,9 @@ italian} %\begin{macro}{\hexadecimalnum} % Converts a decimal number to a lowercase hexadecimal number, % and displays it. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@hexadecimal}[1]{% +\newrobustcmd*{\@hexadecimal}[1]{% \@DT@padzeroestrue \@DT@loopN=5\relax \@strctr=\@DT@loopN @@ -7683,8 +7861,9 @@ italian} %\end{macro} %\begin{macro}{\Hexadecimalnum} % Uppercase hexadecimal +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@Hexadecimal}[1]{% +\newrobustcmd*{\@Hexadecimal}[1]{% \@DT@padzeroestrue \@DT@loopN=5\relax \@strctr=\@DT@loopN @@ -7713,8 +7892,9 @@ italian} %\end{macro} %\begin{macro}{\aaalphnum} % Lowercase alphabetical representation (a \ldots\ z aa \ldots\ zz) +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@aaalph}[1]{% +\newrobustcmd*{\@aaalph}[1]{% \@DT@loopN=#1\relax \advance\@DT@loopN by -1\relax \divide\@DT@loopN by 26\relax @@ -7737,8 +7917,9 @@ italian} %\end{macro} %\begin{macro}{\AAAlphnum} % Uppercase alphabetical representation (a \ldots\ z aa \ldots\ zz) +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@AAAlph}[1]{% +\newrobustcmd*{\@AAAlph}[1]{% \@DT@loopN=#1\relax \advance\@DT@loopN by -1\relax \divide\@DT@loopN by 26\relax @@ -7761,8 +7942,9 @@ italian} %\end{macro} %\begin{macro}{\abalphnum} % Lowercase alphabetical representation +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@abalph}[1]{% +\newrobustcmd*{\@abalph}[1]{% \ifnum#1>17576\relax \PackageError{fmtcount}% {Value of counter too large for \protect\@abalph}% @@ -7794,8 +7976,9 @@ italian} %\end{macro} %\begin{macro}{\ABAlphnum} % Uppercase alphabetical representation +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\@ABAlph}[1]{% +\newrobustcmd*{\@ABAlph}[1]{% \ifnum#1>17576\relax \PackageError{fmtcount}% {Value of counter too large for \protect\@ABAlph}% @@ -7840,8 +8023,9 @@ italian} %\begin{macro}{\@decimal} %\changes{1.31}{2009/10/02}{fixed unwanted space.} % Format number as a decimal, possibly padded with zeroes in front. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand{\@decimal}[1]{% +\newrobustcmd*{\@decimal}[1]{% \@strctr=0\relax \expandafter\@fmtc@count\number#1\relax \@DT@loopN=\c@padzeroesN @@ -7875,10 +8059,12 @@ italian} % argument is omitted. % Version 1.04 changed \cs{ordinal} to \cs{FCordinal} % to prevent it clashing with the memoir class. +% \changes{3.02}{2015/08/01}{Suppress useless \cs{expandafter}'s and and use \cs{value} instead tweaking with +% \cs{csname}. Do not use any longer \cs{protect} as \cs{ordinalnum} is made robust.} % \begin{macrocode} \newcommand{\FCordinal}[1]{% - \expandafter\protect\expandafter\ordinalnum{% - \expandafter\the\csname c@#1\endcsname}% + \ordinalnum{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} @@ -7903,8 +8089,9 @@ italian} % count register instead of a counter: %\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with %\cs{new@ifnextchar}} +% \changes{3.02}{2015-08-01}{Make \cs{ordinalnum} robust.} % \begin{macrocode} -\newcommand*{\ordinalnum}[1]{% +\DeclareRobustCommand*{\ordinalnum}[1]{% \new@ifnextchar[% {\@ordinalnum{#1}}% {\@ordinalnum{#1}[m]}% @@ -7947,10 +8134,16 @@ italian} %\begin{macro}{\storeordinal} % Store the ordinal (first argument % is identifying name, second argument is a counter.) +% \changes{3.02}{2015-08-01}{Suppress useless \cs{expandafter}'s and and use \cs{value} instead tweaking with +% \cs{csname}. Do not use any longer \cs{protect} as \cs{storeordinalnum} is made robust.} +% \changes{3.02}{2016/01/08}{Expand \cs{the}\cs{value}\texttt{\{\#2\}} once before passing to \cs{storeordinalnum}} % \begin{macrocode} \newcommand*{\storeordinal}[2]{% - \expandafter\protect\expandafter\storeordinalnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + {% + \toks0{\storeordinalnum{#1}}% + \expandafter + }\the\toks0\expandafter{% + \the\value{#2}}% } % \end{macrocode} %\end{macro} @@ -7958,8 +8151,9 @@ italian} % Store ordinal (first argument % is identifying name, second argument is a number or % count register.) +% \changes{3.02}{2016/01/08}{Make \cs{storeordinalnum} robust with etoolbox \cs{newrobustcmd}.} % \begin{macrocode} -\newcommand*{\storeordinalnum}[2]{% +\newrobustcmd*{\storeordinalnum}[2]{% \@ifnextchar[% {\@storeordinalnum{#1}{#2}}% {\@storeordinalnum{#1}{#2}[m]}% @@ -8001,11 +8195,16 @@ italian} % \end{macrocode} %\end{macro} %\begin{macro}{\ordinalstring} -% Display ordinal as a string (argument is a counter) +% Display ordinal as a string (argument is a counter) +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use +% any longer \cs{protect} as \cs{ordinalstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{ordinalstringnum}} % \begin{macrocode} \newcommand*{\ordinalstring}[1]{% - \expandafter\protect\expandafter\ordinalstringnum{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\ordinalstringnum\expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} @@ -8015,8 +8214,9 @@ italian} %\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with %\cs{new@ifnextchar}} %\changes{1.33}{2009/10/15}{Made robust} +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand{\ordinalstringnum}[1]{% +\newrobustcmd*{\ordinalstringnum}[1]{% \new@ifnextchar[% {\@ordinal@string{#1}}% {\@ordinal@string{#1}[m]}% @@ -8060,18 +8260,26 @@ italian} % Store textual representation of number. First argument is % identifying name, second argument is the counter set to the % required number. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{storeordinalstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#2\}} once before +% passing to \cs{storeordinalstringnum}} % \begin{macrocode} \newcommand*{\storeordinalstring}[2]{% - \expandafter\protect\expandafter\storeordinalstringnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + {% + \toks0{\storeordinalstringnum{#1}}% + \expandafter + }\the\toks0\expandafter{\the\value{#2}}% } % \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. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\storeordinalstringnum}[2]{% +\newrobustcmd*{\storeordinalstringnum}[2]{% \@ifnextchar[% {\@store@ordinal@string{#1}{#2}}% {\@store@ordinal@string{#1}{#2}[m]}% @@ -8111,10 +8319,15 @@ italian} %\begin{macro}{\Ordinalstring} % Display ordinal as a string with initial letters in upper case % (argument is a counter) +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{Ordinalstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{Ordinalstringnum}} % \begin{macrocode} \newcommand*{\Ordinalstring}[1]{% - \expandafter\protect\expandafter\Ordinalstringnum{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\Ordinalstringnum\expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} @@ -8123,8 +8336,9 @@ italian} % (argument is a number or count register) %\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with %\cs{new@ifnextchar}} +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\Ordinalstringnum}[1]{% +\newrobustcmd*{\Ordinalstringnum}[1]{% \new@ifnextchar[% {\@Ordinal@string{#1}}% {\@Ordinal@string{#1}[m]}% @@ -8167,10 +8381,17 @@ italian} % upper case. First argument is identifying name, second argument % is the counter set to the % required number. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{storeOrdinalstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{storeOrdinalstringnum}} % \begin{macrocode} \newcommand*{\storeOrdinalstring}[2]{% - \expandafter\protect\expandafter\storeOrdinalstringnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + {% + \toks0{\storeOrdinalstringnum{#1}}% + \expandafter + }\the\toks0\expandafter{\the\value{#2}}% } % \end{macrocode} %\end{macro} @@ -8178,8 +8399,9 @@ italian} % Store textual representation of number, with initial letters in % upper case. First argument is identifying name, second argument % is a count register or number. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\storeOrdinalstringnum}[2]{% +\newrobustcmd*{\storeOrdinalstringnum}[2]{% \@ifnextchar[% {\@store@Ordinal@string{#1}{#2}}% {\@store@Ordinal@string{#1}{#2}[m]}% @@ -8219,18 +8441,26 @@ italian} %\begin{macro}{\storeORDINALstring} % Store upper case textual representation of ordinal. The first % argument is identifying name, the second argument is a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{storeORDINALstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#2\}} once before +% passing to \cs{storeORDINALstringnum}.} % \begin{macrocode} \newcommand*{\storeORDINALstring}[2]{% - \expandafter\protect\expandafter\storeORDINALstringnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + {% + \toks0{\storeORDINALstringnum{#1}}% + \expandafter + }\the\toks0\expandafter{\the\value{#2}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\storeORDINALstringnum} % As above, but the second argument is a count register or a % number. +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\storeORDINALstringnum}[2]{% +\newrobustcmd*{\storeORDINALstringnum}[2]{% \@ifnextchar[% {\@store@ORDINAL@string{#1}{#2}}% {\@store@ORDINAL@string{#1}{#2}[m]}% @@ -8273,10 +8503,15 @@ italian} %\begin{macro}{\ORDINALstring} % Display upper case textual representation of an ordinal. The % argument must be a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{ORDINALstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{ORDINALstringnum}} % \begin{macrocode} \newcommand*{\ORDINALstring}[1]{% - \expandafter\protect\expandafter\ORDINALstringnum{% - \expandafter\the\csname c@#1\endcsname + \expandafter\ORDINALstringnum\expandafter{% + \the\value{#1}% }% } % \end{macrocode} @@ -8285,8 +8520,9 @@ italian} % 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}} +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\ORDINALstringnum}[1]{% +\newrobustcmd*{\ORDINALstringnum}[1]{% \new@ifnextchar[% {\@ORDINAL@string{#1}}% {\@ORDINAL@string{#1}[m]}% @@ -8327,10 +8563,15 @@ italian} % Convert number to textual respresentation, and store. First % argument is the identifying name, second argument is a counter % containing the number. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{storenumberstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#2\}} once before +% passing to \cs{storenumberstringnum}} % \begin{macrocode} \newcommand*{\storenumberstring}[2]{% \expandafter\protect\expandafter\storenumberstringnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + \expandafter\the\value{#2}}% } % \end{macrocode} %\end{macro} @@ -8375,10 +8616,15 @@ italian} %\begin{macro}{\numberstring} % Display textual representation of a number. The argument % must be a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{numberstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{numberstringnum}} % \begin{macrocode} \newcommand*{\numberstring}[1]{% - \expandafter\protect\expandafter\numberstringnum{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\numberstringnum\expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} @@ -8386,8 +8632,9 @@ italian} % 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}} +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\numberstringnum}[1]{% +\newrobustcmd*{\numberstringnum}[1]{% \new@ifnextchar[% {\@number@string{#1}}% {\@number@string{#1}[m]}% @@ -8428,10 +8675,17 @@ italian} %\begin{macro}{\storeNumberstring} % Store textual representation of number. First argument is % identifying name, second argument is a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{storeNumberstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#2\}} once before +% passing to \cs{storeNumberstringnum}} % \begin{macrocode} \newcommand*{\storeNumberstring}[2]{% - \expandafter\protect\expandafter\storeNumberstringnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + {% + \toks0{\storeNumberstringnum{#1}}% + \expandafter + }\the\toks0\expandafter{\the\value{#2}}% } % \end{macrocode} %\end{macro} @@ -8476,10 +8730,15 @@ italian} %\begin{macro}{\Numberstring} % Display textual representation of number. The argument must be % a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{Numberstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{Numberstringnum}} % \begin{macrocode} \newcommand*{\Numberstring}[1]{% - \expandafter\protect\expandafter\Numberstringnum{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\Numberstringnum\expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} @@ -8487,8 +8746,9 @@ italian} % As above, but the argument is a count register or number. %\changes{1.31}{2009/10/02}{replaced \cs{@ifnextchar} with %\cs{new@ifnextchar}} +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\Numberstringnum}[1]{% +\newrobustcmd*{\Numberstringnum}[1]{% \new@ifnextchar[% {\@Number@string{#1}}% {\@Number@string{#1}[m]}% @@ -8528,10 +8788,17 @@ italian} %\begin{macro}{\storeNUMBERstring} % Store upper case textual representation of number. The first % argument is identifying name, the second argument is a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{storeNUMBERstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#2\}} once before +% passing to \cs{storeNUMBERstringnum}.} % \begin{macrocode} \newcommand{\storeNUMBERstring}[2]{% - \expandafter\protect\expandafter\storeNUMBERstringnum{#1}{% - \expandafter\the\csname c@#2\endcsname}% + {% + \toks0{\storeNUMBERstringnum{#1}}% + \expandafter + }\the\toks0\expandafter{\the\value{#2}}% } % \end{macrocode} %\end{macro} @@ -8579,10 +8846,15 @@ italian} %\begin{macro}{\NUMBERstring} % Display upper case textual representation of a number. The % argument must be a counter. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{NUMBERstringnum} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{NUMBERstringnum}.} % \begin{macrocode} \newcommand*{\NUMBERstring}[1]{% - \expandafter\protect\expandafter\NUMBERstringnum{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\NUMBERstringnum\expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} @@ -8590,8 +8862,9 @@ italian} % 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}} +%\changes{3.02}{2016/01/08}{Made robust using \texttt{etoolbox} \cs{newrobustcmd}} % \begin{macrocode} -\newcommand*{\NUMBERstringnum}[1]{% +\newrobustcmd*{\NUMBERstringnum}[1]{% \new@ifnextchar[% {\@NUMBER@string{#1}}% {\@NUMBER@string{#1}[m]}% @@ -8630,89 +8903,143 @@ italian} %\end{macro} %\begin{macro}{\binary} % Number representations in other bases. Binary: +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@binary} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@binary}} % \begin{macrocode} \providecommand*{\binary}[1]{% - \expandafter\protect\expandafter\@binary{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@binary + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\aaalph} % Like \ics{alph}, but goes beyond 26. % (a \ldots\ z aa \ldots zz \ldots) +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@aaalph} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@aaalph}.} % \begin{macrocode} \providecommand*{\aaalph}[1]{% - \expandafter\protect\expandafter\@aaalph{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@aaalph + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\AAAlph} % As before, but upper case. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@AAAlph} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@AAAlph}.} % \begin{macrocode} \providecommand*{\AAAlph}[1]{% - \expandafter\protect\expandafter\@AAAlph{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@AAAlph + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\abalph} % Like \ics{alph}, but goes beyond 26. % (a \ldots\ z ab \ldots az \ldots) +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@abalph} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@abalph}.} % \begin{macrocode} \providecommand*{\abalph}[1]{% - \expandafter\protect\expandafter\@abalph{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@abalph + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\ABAlph} % As above, but upper case. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@ABAlph} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@ABAlph}.} % \begin{macrocode} \providecommand*{\ABAlph}[1]{% - \expandafter\protect\expandafter\@ABAlph{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@ABAlph + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\hexadecimal} % Hexadecimal: +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@hexadecimal} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@hexadecimal}.} % \begin{macrocode} \providecommand*{\hexadecimal}[1]{% - \expandafter\protect\expandafter\@hexadecimal{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@hexadecimal + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\Hexadecimal} % As above, but in upper case. +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@Hexadecimal} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@Hexadecimal}.} % \begin{macrocode} \providecommand*{\Hexadecimal}[1]{% - \expandafter\protect\expandafter\@Hexadecimal{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@Hexadecimal + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\octal} % Octal: +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@octal} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@octal}} % \begin{macrocode} \providecommand*{\octal}[1]{% - \expandafter\protect\expandafter\@octal{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@octal + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\decimal} % Decimal: +% \changes{3.02}{2016/01/08}{Suppress useless \cs{expandafter}'s and +% and use \cs{value} instead tweaking with \cs{csname}. Do not use any +% longer \cs{protect} as \cs{@decimal} is made +% robust. Expand \cs{the}\cs{value}\texttt{\{\#1\}} once before +% passing to \cs{@decimal}} % \begin{macrocode} \providecommand*{\decimal}[1]{% - \expandafter\protect\expandafter\@decimal{% - \expandafter\the\csname c@#1\endcsname}% + \expandafter\@decimal + \expandafter{% + \the\value{#1}}% } % \end{macrocode} %\end{macro} % -%\subsection{Multilinguage Definitions} +%\subsubsection{Multilinguage Definitions} %\begin{macro}{\@setdef@ultfmtcount} % If multilingual support is provided, make \cs{@numberstring} % etc use the correct language (if defined). |