% \iffalse META-COMMENT % % The rccol package for use with TeX / LaTeX % Copyright 2000-2004 % Eckhart Guthoehrlein % e-mail % % 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{}.}} % \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} % % \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{,} % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \Finale % \PrintIndex % \PrintChanges % % \endinput