% \iffalse META-COMMENT
%
% The rccol package for use with TeX / LaTeX
% Copyright 2000-2004
% Eckhart Guthoehrlein
% e-mail <e_w_g@web.de>
%
% This program may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.2 or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% This program consists of the files 'rccol.dtx', 'rccol.ins'
% and 'readme_rccol.txt'.
%
% The package provides a special column type for tables.
% Numbers are centered to the title and flush right to each other,
% as well as rounded to a given accuracy. It needs the
% array package (sould be part of your LaTeX-distribution)
% and the fltpoint package (by the author, available from CTAN, 
% directory /tex-archive/macros/latex/contrib/supported/fltpoint).
%
% Run TeX over rccol.ins to produce the docstripped version
% of the file. The documentation can be typeset by running
% LaTeX over rccol.dtx. You can use the docstrip utility
% with option 'driver' to generate a separate file for the
% generation of the user guide.
%
% Comments and bug-reports are welcome under the above
% e-mail address.
%
%                 E.W.G.
%
%
% \fi ^^A end meta-comment
% \CheckSum{408}
% \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         \~}
%
% 
% ^^A The often-used and not very interesting example table...
% \newcommand{\tabexample}{%
%  \hline
%  \multicolumn{1}{c}{Value 1} & \multicolumn{1}{c}{Value 2} &
%  \multicolumn{1}{c}{Value 3}\tabularnewline
%  \hline
%  2345,765 & 1,6 & 21   \tabularnewline
%    45,130 & 0,2 &  1,65\tabularnewline 
%   543,99  & 2   &  9,9 \tabularnewline
%  \hline 
%  \end{tabular}}
%
%
% \DoNotIndex{\def,\edef,\xdef,\gdef,\let,\global,\if,\ifx,\else,\fi,
%  \loop,\repeat,\noexpand,\expandafter,\newtoks,\newif,\ignorespaces,
%  \unskip,\setbox,\dimen,\count,\advance,\multiply,\divide,\wd,
%  \relax,\hskip,\the,\hfil,\hfill,\hbox,\ifnum,
%  \@ifnextchar,\tabularnewline,\documentclass,\usepackage,
%  \OnlyDescription,\AlsoImplementation,\EnableCrossrefs,
%  \DisableCrossrefs,\CodelineIndex,\RecordChanges,\DocInput,
%  \begin,\end,\NeedsTeXFormat,\DeclareOption,\ProvidesPackage,
%  \AtBeginDocument,\ProcessOptions,\RequirePackage,
%  \ar@getul,\ar@getll,\llap,\newdimen,\number}
%
% \MakeShortVerb{\"}
% \catcode`\@=11
%
% \changes{v1.0a}{2000/08/23}{First public release.}
% \changes{v1.1a}{2000/09/05}{Minor corrections.
%     Better support for different decimal signs.}            
% \changes{v1.2b}{2004/11/12}{Some fixes, development freeze.}
%         
% \GetFileInfo{rccol.sty}
% \title{The \texttt{rccol} package\thanks{This
%  file has version number \fileversion{} dated \filedate.}}
% \author{Eckhart Guth\"ohrlein\thanks{Send comments
%  or bug-reports to the author via e-mail \texttt{<e\_w\_g@web.de>}.}}
% \date{Printed \today}
% \maketitle
%
% \begin{abstract}
% This package provides a new
% \lq right-centered\rq\ tabular column type \texttt{R}. Numbers
% are centered with respect to other entries, but flushed right
% to each other so that corresponding digits are vertically
% aligned. Furthermore, numbers can be rounded
% to the desired precision. 
% \end{abstract}
%
%
%
% \section{Introduction}
%
% It is often desirable to produce tables like the following.
% \begin{center}
%   \begin{tabular}{R{4}{3}R{1}{1}R{2}{2}}
%   \tabexample
% \end{center}
% You can see what is ment by \lq right-centered\rq\ columns:
% The center of the largest number is centered with
% the title, while the numbers are aligned with their corresponding
% decimal places. This is, at least to the author's
% opinion, the most aesthetic way to typeset numbers in a table.
% 
% This package provides a general and easy-to-use solution for this 
% problem. In addition, the numbers given as alignment entries can be
% rounded to a given precision and formatted in several ways.
%
% The next section deals with the various possibilities
% to typeset numbers in tables with and without this package.
% After that, the additional facilities of \texttt{rccol} and
% their usage are described.
%
%
% \section{Numbers in tables}
%
% The typesetting of numbers in tables needs special care.
% Most importantly, the vertical alignment of corresponding 
% decimal places in a column should be ensured.
% Furthermore, it is desirable to achieve a proper placement
% (centering normally looks best)
% with respect to the column title and other entries 
% which are not numbers.
%
% First, let us discuss the possibilities
% available with and without this package, a small example
% for each one is given below.
% \begin{itemize}
%  \item Centered columns. This does not allow a vertical
%  alignment of corresponding digits, except if all numbers
%  have the exactly the same number of digits before and
%  after the decimal sign.
%  \item Flushed right columns. If the numbers have the same
%  number of digits after the decimal sign, the alignment
%  of corresponding digits will be correct. However, in any
%  case the placement with respect to the title will not
%  look good.
%  \item Flushed left columns. Similar restrictions as for
%  flushed right ones.
%  \item Use two columns with the decimal sign inserted between
%  them, e.\,g.\ "r@{,}l",
%  and typeset the title with "\multicolumn{2}{c}{Title}".
%  This provides correct alignment for corresponding digits, but
%  no proper placement with respect to the title if it is wider
%  than the numbers.
%  \item Use the \texttt{dcolumn} package~\cite{dcolumn}.
%  With version 1.03a,
%  the syntax has been extended so that both correct alignment
%  of digits and centering to other entries is possible.
%  \item Use the \texttt{rccol} package. Both correct alignment
%  and centering to other entries are possible. Furthermore,
%  other features like rounding of numbers are provided.
% \end{itemize}
%
% Let us have a look at an example of these possibilities.
% The following table shows the first four ones.
% \begin{center}
%  \begin{tabular}{|c|r|l|r@{,}l|}
%  Column type \texttt{c} & Column type \texttt{r} &
%  Column type \texttt{l} &
%  \multicolumn{2}{c|}{Spaltentyp \texttt{r@\{,\}l}}
%  \tabularnewline
%  100,5 & 100,5 & 100,5 & 100&5\tabularnewline
%  7,93 & 7,93 & 7,93 & 7&93\tabularnewline
%  17,123 & 17,123 & 17,123 & 17&123\tabularnewline
%  3141,592 & 3141,592 & 3141,592 & 3141&592\tabularnewline
%  13 & 13 & 13 & \multicolumn{1}{r@{}}{13} &\tabularnewline
%  0,00017 & 0,00017 & 0,00017 & 0&00017\tabularnewline
%  \end{tabular}
% \end{center}
%
% Obviously, none of the results is satisfying. The following
% table shows the result with
% the \texttt{dcolumn} and with the \texttt{rccol} package.
% \begin{center}
%  \rcRoundingfalse
%  \begin{tabular}{|D{,}{,}{4.5}|R{4}{5}|}
%  \multicolumn{1}{|c|}{Column type \texttt{D\{,\}\{,\}\{4.5\}}} &
%  \multicolumn{1}{c|}{Column type \texttt{R\{4\}\{5\}}}\tabularnewline
%  100,5 & 100,5\tabularnewline
%  7,93 & 7,93\tabularnewline
%  17,123 & 17,123\tabularnewline
%  3141,592 & 3141,592\tabularnewline
%  13 & 13\tabularnewline
%  0,00017 & 0,00017\tabularnewline
%  \end{tabular}
% \end{center}
%
% None of the special features of \texttt{rccol} have been used in
% this example. As you can see, the final results of the two packages
% are identical in this case. So, as long as you do not need the 
% features described in the next section, you can work equally well 
% with either of the two packages.
%
% \section{User interface}
% The new column type "R" is used as normally in the preamble of a
% \LaTeX\ table. It takes two mandatory arguments: the number of
% digits before and the number of digits after the decimal sign.
% The example table above has been produced by
% \begin{verbatim}
% \begin{tabular}{R{4}{3}R{1}{1}R{2}{2}}
% \hline
% \multicolumn{1}{c}{Value 1} & \multicolumn{1}{c}{Value 2} &
% \multicolumn{1}{c}{Value 3}\tabularnewline
% \hline
% 2345,765 & 1,6 & 21   \tabularnewline
%   45,130 & 0,2 &  1,65\tabularnewline 
%  543,99  & 2   &  9,9 \tabularnewline
% \hline 
% \end{tabular}
% \end{verbatim}
%
% \DescribeMacro\rcRoundingtrue\DescribeMacro\rcRoundingfalse
% By default, numbers are rounded to the given number of digits
% after the decimal sign, and trailing zeros are appended if they are
% missing in the input file. This behaviour can be toggled
% with the switch "\rcRoundingtrue"/"\rcRoundingfalse", obeying
% the normal grouping rules, and with the package options
% \texttt{rounding} or \texttt{norounding} (see below.)
% With "\rcRoundingfalse", the above input results into the following
% result. Numbers are not rounded or altered in any way; trailing
% zeros are not appended.
% \begin{center}
%  \rcRoundingfalse
%   \begin{tabular}{R{4}{3}R{1}{1}R{2}{2}}
%   \tabexample
% \end{center}
%
% The "R" column specifier also takes optional arguments
% (thanks go to Rolf Niepraschk for suggesting this and
% encouraging me). The optional parameters
% determine the characters used for the decimal sign in the
% input (\texttt{.tex}) and the output file (\texttt{.dvi} or
% perhaps \texttt{.pdf}), so the full syntax for the "R" column is
% \begin{flushleft}
% "\begin{tabular}{...R["\meta{character}"]["\meta{character}"]{"%
% \meta{number}"}{"\meta{number}"}...}"
% \end{flushleft}
% For example, "R[,][.]{1}{1}" will produce a column centered for
% numbers with one digit before and one after the decimal sign, which
% is a comma in the input file, but a point in the output.
% If only one optional parameter is given, this character will be used
% for input and output, so "R[!]{1}{1}" is equivalent to
% "R[!][!]{1}{1}".
%
% Another optional parameter is a "-" character after the "R" as in
% "R-{4}{0}". In this case, the width of a preceding negative sign (to
% be exact, the width of "$-$") will be taken into account when
% centering.
%
% \DescribeMacro\rcDecimalSign\DescribeMacro\rcDecimalSignInput
% \DescribeMacro\rcDecimalSignOutput
% The decimal sign can be changed with the commands "\rcDecimalSign",
% affecting both input and output. It can be changed separately 
% for input and output with 
% "\rcDecimalSignInput" and "\rcDecimalSignOutput". These commands 
% obey the normal grouping rules. Furthermore, there are some
% package options for setting the defaults (see below).
% To give an example, let's typeset the above table once again, but with
% "\rcDecimalSignOutput{\ensuremath{\cdot}}".
% \begin{center}
%  \rcDecimalSignOutput{\ensuremath{\cdot}}
%   \begin{tabular}{R{4}{3}R{1}{1}R{2}{2}}
%   \tabexample
% \end{center}
%
%
% \section{Package Options}
% The \texttt{rccol} package can be loaded as any \LaTeX\ package via
% \begin{flushleft}
% "\usepackage["\meta{option list}"]{rccol}"
% \end{flushleft}
% with the following options.
% \begin{description}
% \item[rounding] Enable rounding, equivalent to
%  "\rcRoundingtrue" at the beginning of the document.
%  This is the default, so explicitly using this option is not
%  necessary.
% \item[norounding] Disable rounding by default, equivalent to
%  "\rcRoundingfalse" at the beginning of the document.
% \item[comma] Use a comma as the decimal sign, equivalent to
%  "\rcDecimalSign{,}" at the beginning of the document. This is 
%  the default, so it is normally not necessary to explicitly
%  give this option.
% \item[german] See comma.
% \item[english] Use a point as the decimal sign, equivalent
%  to "\rcDecimalSign{.}" at the beginning of the document.
% \item[USenglish] See english.
% \item[point] See english.
% \end{description}
%
%
% \section{Additional hints and remarks}
%
% \begin{itemize}
%
% \item Any tokens in the alignment entries which are not digits
%  are put in front of the alignment entry. This can be used
%  to switch to bold face or to add something like `$>$' before the
%  number. If the tokens have any width, it is your job
%  to correct this, e.\,g.\ by putting them into a "\makebox[0pt][r]".
%  You must enclose commands with arguments inside an extra pair
%  of curly braces to keep them together, otherwise error messages
%  will occur. Example:
% \begin{verbatim}
% \begin{tabular}{R{4}{3}R{1}{1}R{2}{2}}
% \hline
% \multicolumn{1}{c}{Value 1} & \multicolumn{1}{c}{Value 2} &
% \multicolumn{1}{c}{Value 3}\tabularnewline
% \hline
% 2345,765 & {\mathversion{bold}} 1,6   & 21    \tabularnewline
%   45,130 & 0,2                        &  1,65 \tabularnewline 
%  543,99  & {\makebox[0mm][r]{$>{}$}}2 &  9,9  \tabularnewline
% \hline 
% \end{tabular}
% \end{verbatim}
% Result:
% \begin{center}
% \begin{tabular}{R{4}{3}R{1}{1}R{2}{2}}
% \hline
% \multicolumn{1}{c}{Value 1} & \multicolumn{1}{c}{Value 2} &
% \multicolumn{1}{c}{Value 3}\tabularnewline
% \hline
% 2345,765 & {\mathversion{bold}} 1,6   & 21    \tabularnewline
%   45,130 & 0,2                        &  1,65 \tabularnewline 
%  543,99  & {\makebox[0mm][r]{$>{}$}}2 &  9,9  \tabularnewline
% \hline 
% \end{tabular}
% \end{center}
%
% \item Negative values are allowed as arguments for the \texttt{R}
% column. This makes it possible to round to multiples of ten, for
% example, by giving `\texttt{-2}' as the second mandatory argument.
% In general, rounding is performed to a precision
% of $10^{-n}$, if $n$ is the second mandatory argument of
% \texttt{R}.
%
% \item The first mandatory argument of the \texttt{R} column 
% specifier does not need to be the real number of digits 
% before the decimal point.
% You can shift the output to the left or to the right by 
% changing this value if you are not satisfied by the centered
% result. Negative values are legal.
%
% \item As with any macro, single token arguments can be given without
% braces. This means that `"R{4}{3}"' is equivalent to `"R43"'. Maybe 
% you will prefer the shorter alternative.
% \end{itemize}
%
% \section{Requirements}
% The \texttt{rccol} package needs the \texttt{array}~\cite{array}
% and the \texttt{fltpoint}~\cite{fltpoint} packages.
%
% \section{Final Remarks}
% There are some open problems and desirable features concerning this
% package, e.\,g.\ formatted output of numbers. However, I have ceased
% using \LaTeX, so I don't think that I will make further extensions to
% {\tt rccol}. You are free to do it yourself -- the license is LPPL.
% Furthermore, you might be interested in the following packages,
% available from CTAN if not already included in your distribution:
% \begin{itemize}
% \item {\tt dcolumn} of course,
% \item {\tt numprint} for formatting of numbers,
% \item {\tt fp} for calculations inside \TeX.
% \end{itemize}
%
% \StopEventually{%
%  \begin{thebibliography}{1}
%     \bibitem{dcolumn} David Carlisle, ``The \texttt{dcolumn}
%     package''. The \texttt{dcolumn} package is part of the standard
%     \LaTeX\ distribution.
%     \bibitem{array} Frank Mittelbach, David Carlisle, ``A new 
%      implementation of \LaTeX's \texttt{tabular} and \texttt{array}
%      environment''. The \texttt{array} package is part of the standard
%      \LaTeX\ distribution.
%     \bibitem{fltpoint} Eckhart Guth\"ohrlein, ``The \texttt{fltpoint}
%      package'', v1.1b, last revised 2004/11/12. The \texttt{fltpoint}
%      package is available from CTAN.
%  \end{thebibliography}%
% }
%
% \section{Implementation}
%
% \subsection{DriverFile}
% The \texttt{docstrip} utility can be used to generate
% a driver file producing the documentation.
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\usepackage{dcolumn}
\usepackage{rccol}
\AtBeginDocument{\DeleteShortVerb{\|}} % the default is not needed
%\OnlyDescription    % typeset only user documentation
\AlsoImplementation  % typeset implementation details
\EnableCrossrefs    % say \DisableCrossrefs if index is ready
%\DisableCrossrefs
\CodelineIndex      % index using codeline numbers
\RecordChanges      % keep change log
%\OldMakeindex       % use if your Makeindes is pre-v2.9
\begin{document}
   \DocInput{rccol.dtx}
\end{document}
%</driver>
%    \end{macrocode}
%
% \subsection{\LaTeX\ package info and options}
% \changes{v1.1b}{2000/09/08}{Added ngerman, austrian and naustrian
%                             package options.}
%    \begin{macrocode}
%<*rcmain>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{rccol}[2004/11/12 v1.2b right-centered columns]
\DeclareOption{rounding}{\AtBeginDocument{\rcRoundingtrue}}
\DeclareOption{norounding}{\AtBeginDocument{\rcRoundingfalse}}
\DeclareOption{USenglish}{\AtBeginDocument{\rcDecimalSign.}}
\DeclareOption{english}{\AtBeginDocument{\rcDecimalSign.}}
\DeclareOption{point}{\AtBeginDocument{\rcDecimalSign.}}
\DeclareOption{german}{\AtBeginDocument{\rcDecimalSign,}}
\DeclareOption{ngerman}{\AtBeginDocument{\rcDecimalSign,}}
\DeclareOption{austrian}{\AtBeginDocument{\rcDecimalSign,}}
\DeclareOption{naustrian}{\AtBeginDocument{\rcDecimalSign,}}
\DeclareOption{comma}{\AtBeginDocument{\rcDecimalSign,}}
\ProcessOptions*\relax
%    \end{macrocode}
% \subsection{Require packages}
% To work properly, \texttt{rccol} needs the \texttt{array} and
% the \texttt{fltpoint} packages. An up-to-date version of
% \texttt{fltpoint} is necessary.
%    \begin{macrocode}
\RequirePackage{array}
\RequirePackage{fltpoint}[2004/11/12]
%    \end{macrocode}
%
%
% \subsection{Registers \& Co}
%
% \begin{macro}{\rc@preskip}
% \begin{macro}{\rc@postskip}
% Allocate dimen registers "\rc@preskip" and "\rc@postskip".
%    \begin{macrocode}
\newdimen\rc@preskip
\newdimen\rc@postskip
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\rc@digits}
% \changes{v1.1a}{2000/09/95}{Read all digits into one register,
%     no more separation of pre- and afterpoint digits.}
% \begin{macro}{\rc@preothertoks}
% \changes{v1.1b}{2000/09/08}{Separation of other tokens inserted^^A
%     before and after the number, now saved in "\rc@preothertoks"^^A
%     and "\rc@postothertoks".}
% \begin{macro}{\rc@postothertoks}
% Allocate token registers "\rc@digits", "\rc@preothertoks" 
% and "\rc@postothertoks".
%    \begin{macrocode}
\newtoks\rc@digits
\newtoks\rc@preothertoks
\newtoks\rc@postothertoks
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifrcRounding}
% \changes{v1.1a}{2000/09/05}{Rounding switch prefixed with `rc'.}
% Initialize "\ifrcRounding" as \texttt{true}.
%    \begin{macrocode}
\newif\ifrcRounding
\rcRoundingtrue
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Definition of the \texttt{R} column}
%
% \changes{v1.1a}{2000/09/05}{Optional parameters for the column
%        specifier.}
% \begin{macro}{\NC@rewrite@R}
% \begin{macro}{\rc@rewrite@}
% \begin{macro}{\rc@rewrite@@}
% \begin{macro}{\rc@rewrite@@@}
% The "\newcolumntype" mechanism of \texttt{array.sty} is used
% to set up the new column type. In order to have optional
% parameters, the rewrite macro is redefined to take one or
% two optional parameters, read by "\rc@rewrite@" and
% "\rc@rewrite@@". The optional parameters are used
% to change the decimal sign inside the column if this is
% desired. An appropriate "\fpDecimalSign" is put into
% the token registers "\rc@digits" (input) and "\rc@preothertoks"
% (output), which are somewhat misused for that purpose.
% The macro "\rc@rewrite@@@" reads the two mandatory arguments
% (the number of digits before and after the decimal point)
% and appends everything to the preamble so far. At the
% end "\NC@find" is called to continue the rewriting
% process (see~\cite{array} for further details).
%    \begin{macrocode}
\newcolumntype{R}{}
\def\NC@rewrite@R{%
   \rc@digits{}%
   \rc@preothertoks{}%
   \@ifnextchar-{\rc@rewrite}{\rc@rewrite\relax}}
\def\rc@rewrite#1{%
   \ifx#1-%
      \def\rc@withsign{{\setbox0\hbox{$-$}\hskip\wd0}}%
   \else
      \def\rc@withsign{}%
   \fi
   \@ifnextchar[{\rc@rewrite@}{\rc@rewrite@@@}}
\def\rc@rewrite@[#1]{%
   \rc@digits{\rcDecimalSignInput{#1}}%
   \@ifnextchar[{\rc@rewrite@@}%
      {\rc@preothertoks{\rcDecimalSignOutput{#1}}\rc@rewrite@@@}}
\def\rc@rewrite@@[#1]{%
   \rc@preothertoks{\rcDecimalSignOutput{#1}}\rc@rewrite@@@}
\def\rc@rewrite@@@#1#2{%
   \edef\rc@rewrite@scratch{\the\@temptokena>{\the\rc@digits
      \rc@withsign\noexpand\rc@begin}c<{\noexpand\rc@end
      \the\rc@preothertoks\noexpand\rc@write{#1}{#2}}}
   \@temptokena\expandafter{\rc@rewrite@scratch}%
   \NC@find}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \subsection{Macros for reading and processing the numbers}
%
% \begin{macro}{\rc@begin}
% The macro "\rc@begin" is inserted in front of every "R" alignment
% entry. It initializes the token registers "\rc@digits" and
% "\rc@othertoks" and calls "\rc@getnexttok" to read the following
% tokens.
%    \begin{macrocode}
\def\rc@begin{%
   \rc@digits={}%
   \rc@preothertoks={}%
   \rc@postothertoks={}%
   \let\rc@othertoks\rc@preothertoks
   \rc@getnexttok
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rc@getnexttok}
% \begin{macro}{\rc@savedigit}
% \begin{macro}{\rc@savetok}
% The macro "\rc@getnexttok" is used to read the alignment entry
% token after token. The macros "\rc@savedigit" and "\rc@savetok"
% are used to store digits and other tokens in the respective
% token register ("\rc@digits" or "\rc@othertoks").
% "\rc@savedigit" switches "\rc@othertoks" form
% "\rc@preothertoks" to "\rc@postothertoks".
% After processing the token, "\rc@next" is called
% which has been "\let" equal to the appropriate next action.
%    \begin{macrocode}
\def\rc@savedigit#1{\let\rc@othertoks\rc@postothertoks
   \edef\rc@scratch{\the\rc@digits#1}%
   \rc@digits=\expandafter{\rc@scratch}}
\def\rc@savetok#1{\rc@othertoks=\expandafter{\the\rc@othertoks#1}}
\def\rc@getnexttok#1{%
%    \end{macrocode}
% First, check if "\tabularnewline" or "\rc@end" follows.
%    \begin{macrocode}
   \ifx#1\tabularnewline
      \let\rc@next\tabularnewline
   \else
      \ifx#1\rc@end
         \let\rc@next\rc@end
      \else
%    \end{macrocode}
% If not, further tokens have to be read. If the current token
% is allowed by the syntax of fp numbers, save it in "\rc@digits",
% otherwise and if it is neither "\ignorespaces" nor "\unskip",
% save it in "\rc@othertoks".
%    \begin{macrocode}
         \let\rc@next\rc@getnexttok
         \ifx#10\rc@savedigit#1\else\ifx#11\rc@savedigit1\else\ifx#12%
            \rc@savedigit2\else\ifx#13\rc@savedigit3\else\ifx#14%
            \rc@savedigit4\else\ifx#15\rc@savedigit5\else\ifx#16%
            \rc@savedigit6\else\ifx#17\rc@savedigit7\else\ifx#18%
            \rc@savedigit8\else\ifx#19\rc@savedigit9\else%
            \if\noexpand#1\fp@decimalsign\rc@savedigit\fp@decimalsign%
            \else\ifx#1-\rc@savedigit-\else\ifx#1+\rc@savedigit+%
            \else\ifx#1e\rc@savedigit e\else\ifx#1E\rc@savedigit E%
         \else
            \ifx#1\ignorespaces\else
               \ifx#1\unskip\else
                  \rc@savetok{#1}%
               \fi
            \fi
         \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
      \fi
   \fi
%    \end{macrocode}
% Call "\rc@next".
%    \begin{macrocode}
   \rc@next
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\rc@end}
% This macro marks the end of the alignment entry and reads
% the contents of "\rc@digits" into a \texttt{fltpoint} register.
%    \begin{macrocode}
\def\rc@end{\fpDecimalSign{\rc@decimalsigninput}%
   \fp@regread@raw{rc@temp}{\the\rc@digits}}%
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\rc@output}
% The macro "\rc@output" is called by "\rc@write". It takes one argument:
% the text to be typeset. It checks if the material is to be visible,
% and in this case if negative space has to be inserted, or if only
% positive space with the same width as the text has to be output.
% Any text to be finally output is appended to "\rc@number".
%    \begin{macrocode}
\def\rc@output#1{%
%    \end{macrocode}
% Set a box with the text in it to get its width.
%    \begin{macrocode}
   \setbox0=\hbox{#1}%
%    \end{macrocode}
% If the current position is greater than the first digit of the number,
% append nothing and increase "\rc@preskip".
%    \begin{macrocode}
   \ifnum\fp@loopcount>\ar@getul{rc@temp}\relax
      \def\rc@toappend{}%
      \advance\rc@preskip by \wd0
%    \end{macrocode}
% Similarly, if the last digit of the number has a position greater than
% the actual one, do the following: if rouinding is enabled,
% append "#1", if not, append nothing and increase "\rc@postskip".
%    \begin{macrocode}
   \else
      \ifnum\fp@loopcount<\ar@getll{rc@temp}\relax
         \ifrcRounding
            \def\rc@toappend{#1}%
         \else
            \def\rc@toappend{}%
            \advance\rc@postskip by \wd0
         \fi
%    \end{macrocode}
% Otherwise, append "#1". If the position is greater than the desired number of
% digits before the decimal sign, decrease "\rc@preskip". Accordingly, decrease
% "\rc@postskip" if necessary.
%    \begin{macrocode}
      \else
         \def\rc@toappend{#1}%
         \ifnum\fp@loopcount>\rc@outmax\relax
            \advance\rc@preskip by -\wd0
         \else
            \ifnum\fp@loopcount<\rc@outmin\relax
               \advance\rc@postskip by -\wd0
            \fi
         \fi
      \fi
   \fi
%    \end{macrocode}
% Append to "\rc@number" what is to be appended.
%    \begin{macrocode}
   \edef\rc@number{\rc@number\rc@toappend}%
} % end \rc@output
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rc@write}
% The macro "\rc@write" takes two arguments: the number of digits before and
% after the decimal sign.
%    \begin{macrocode}
\def\rc@write#1#2{%
%    \end{macrocode}
% Initialize "\rc@preskip" and "\rc@postskip". Initialize "\rc@number".
%    \begin{macrocode}
   \rc@preskip=0pt
   \rc@postskip=0pt
   \def\rc@number{}%
%    \end{macrocode}
% At the beginning, the tokens to be inserted in front of the
% number, saved in "\rc@preothertoks". This gives the user the possibility
% to change parameters locally for one alignment entry.
%    \begin{macrocode}
   \the\rc@preothertoks
%    \end{macrocode}
% If rounding is enabled, do it.
%    \begin{macrocode}
   \ifrcRounding
      \fp@reground{rc@temp}{-#2}%
   \fi
   \fpDecimalSign{\rc@decimalsignoutput}%
%    \end{macrocode}
% Determine start and end position for the output loop. Save the desired number
% of digits in "\rc@outmax" and "\rc@outmin". The loop starts at
% the desired maximal position or at the upper limit of the number,
% depending on which is greater. The final value is determined accordingly.
% The correction of $-1$ for "#1"
% is necessary because the first digit of a number with $n$ digits before the
% decimal sign means \lq multiple of $10^{(n-1)}$\rq.
%    \begin{macrocode}
   \fp@tempcount=#1\relax
   \advance\fp@tempcount by -1
   \edef\rc@outmax{\number\fp@tempcount}%
   \edef\rc@outmin{\number-#2}%
   \fp@loopcount=\rc@outmax\relax
   \fp@settomax{\fp@loopcount}{\fp@loopcount}{\ar@getul{rc@temp}}%
   \fp@settomin{\fp@loopcountii}{\rc@outmin}{\ar@getll{rc@temp}}%
%    \end{macrocode}
% The main loop follows. For output, "\rc@output" is used to append
% anything to "\rc@number". The thousand separator is inserted in the
% appropriate places, that means if
% $(n\bmod3=2)\vee \left((n\bmod3=-1)\wedge (n\neq-1)\right)$
% with $n$ standing for the value of "\fp@loopcount". The decimal sign
% is inserted in front of the digit if $n=-1$.
%    \begin{macrocode}
   \loop
      \fp@modulo{\fp@loopcount}{3}%
      \ifnum\fp@param=2
         \rc@output{\fp@thousandsep}%
      \else
         \ifnum\fp@param=-1
            \ifnum\fp@loopcount=-1\else
               \rc@output{\fp@thousandsep}%
            \fi
         \fi
      \fi
      \ifnum\fp@loopcount=-1
         \rc@output{\fp@decimalsign}%
      \fi
      \fp@getdigit{rc@temp}{\fp@loopcount}%
      \rc@output{\fp@param}%
   \ifnum\fp@loopcount>\fp@loopcountii
      \advance\fp@loopcount by -1
   \repeat
%    \end{macrocode}
% If the number is smaller than zero, a minus sign is put in front
% of it. The usage of a token register prevents further expansion.
%    \begin{macrocode}
   \fp@regcomp{rc@temp}{@0}%
   \if\fp@param<%
      \rc@digits={\llap{$-$}}%
      \edef\rc@number{\the\rc@digits\rc@number}%
   \fi
%    \end{macrocode}
% "\rc@number" is preceded by the computed white space
% and by any tokens that have been found in the alignment entry and
% stored in "\rc@preothertoks" or "\rc@postothertoks".
%    \begin{macrocode}
	 \hfill
   \hskip\rc@preskip
   \rc@number
   \hskip\rc@postskip
   \the\rc@postothertoks
	 \hfill
}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Parameters and configuration}
%
% \begin{macro}{\rcDecimalSign}
% \changes{v1.1b}{2000/09/08}{Use "\def" instead of "\let".}
% \begin{macro}{\rcDecimalSignInput}
% \begin{macro}{\rcDecimalSignOutput}
% The macros "\rcDecimalSignInput" and "\rcDecimalSignOutput" can be 
% used to change the default use of a comma as the decimal sign.
% This can be done separately for input and output. 
% "\rcDecimalSign" changes both.
%    \begin{macrocode}
\def\rcDecimalSign#1{\rcDecimalSignInput{#1}\rcDecimalSignOutput{#1}}
\def\rcDecimalSignInput#1{\edef\rc@decimalsigninput{#1}}
\def\rcDecimalSignOutput#1{\edef\rc@decimalsignoutput{#1}}
\rcDecimalSign{,}
%</rcmain>
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \Finale
% \PrintIndex
% \PrintChanges
%
% \endinput
