diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rccol |
Initial commit
Diffstat (limited to 'macros/latex/contrib/rccol')
-rw-r--r-- | macros/latex/contrib/rccol/README | 30 | ||||
-rw-r--r-- | macros/latex/contrib/rccol/rccol.dtx | 809 | ||||
-rw-r--r-- | macros/latex/contrib/rccol/rccol.ins | 6 | ||||
-rw-r--r-- | macros/latex/contrib/rccol/rccol.pdf | bin | 0 -> 165217 bytes |
4 files changed, 845 insertions, 0 deletions
diff --git a/macros/latex/contrib/rccol/README b/macros/latex/contrib/rccol/README new file mode 100644 index 0000000000..1b8246d622 --- /dev/null +++ b/macros/latex/contrib/rccol/README @@ -0,0 +1,30 @@ +The rccol package for use with LaTeX +Current Version: 1.2c dated 2005/05/17 +Copyright 2000-2005 +License: LPPL, see rccol.dtx for more details +Eckhart Guthoehrlein +e-mail <e_w_g@web.de> + +The rccol package introduces a new column specifier 'R' for use within +the preamble of a LaTeX package. In 'R' columns, numbers will be +aligned with their corresponding digits, but centered with respect to +the total column width. Furthermore, numbers can be rounded to any +desired precision without changing the input. + +Please note that there is no further development of rccol. +Do it yourself according to the license. + +Small example: +\begin{tabular}{R{2}{1}R{3}{1}} + \multicolumn{1}{c}{Title of column 1} & + \multicolumn{1}{c}{Title of column 2}\tabularnewline + 10.0 & 20 \tabularnewline + 1.7 & 1.7\tabularnewline + -5 & 133 \tabularnewline +\end{tabular} +will roughly look like: + + Title of column 1 Title of column 2 + 10.0 20.0 + 1.7 1.7 + -5.0 133.0 diff --git a/macros/latex/contrib/rccol/rccol.dtx b/macros/latex/contrib/rccol/rccol.dtx new file mode 100644 index 0000000000..9e469c81b2 --- /dev/null +++ b/macros/latex/contrib/rccol/rccol.dtx @@ -0,0 +1,809 @@ +% \iffalse META-COMMENT +% +% The rccol package for use with TeX / LaTeX +% Copyright 2000-2005 +% 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'. +% +% 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). +% +% 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. +% +% Please note that there is no further development of rccol. +% Do it yourself according to the license. +% +% 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.} +% \changes{v1.2c}{2005/05/17}{Small fix for decimal sign input/output.} +% +% \GetFileInfo{rccol.sty} +% \title{The \texttt{rccol} package\thanks{This +% file has version number \fileversion{} dated \filedate.}} +% \author{Eckhart Guth\"ohrlein} +% \date{} +% \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. +% +% Please note that there is no further development of rccol. +% Do it yourself according to the license. +% \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}[2005/05/17 v1.2c 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\rc@decimalsigninput\rc@savedigit\rc@decimalsigninput% + \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{\rc@decimalsignoutput}% + \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 diff --git a/macros/latex/contrib/rccol/rccol.ins b/macros/latex/contrib/rccol/rccol.ins new file mode 100644 index 0000000000..1c804d45ec --- /dev/null +++ b/macros/latex/contrib/rccol/rccol.ins @@ -0,0 +1,6 @@ +\input docstrip +\keepsilent +%\generate{\file{rcuser.tex}{\from{rccol.dtx}{driver}}} +\usedir{tex/latex/rccol} +\generate{\file{rccol.sty}{\from{rccol.dtx}{rcmain}}} +\endbatchfile diff --git a/macros/latex/contrib/rccol/rccol.pdf b/macros/latex/contrib/rccol/rccol.pdf Binary files differnew file mode 100644 index 0000000000..ad3a5527ef --- /dev/null +++ b/macros/latex/contrib/rccol/rccol.pdf |