diff options
author | Karl Berry <karl@freefriends.org> | 2010-10-24 23:51:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-10-24 23:51:23 +0000 |
commit | b825cb134198cb32fb898588af07b41508d6b961 (patch) | |
tree | 42becf1269fd14d9442411b65412d368fc4e00a0 /Master/texmf-dist/tex/latex/sepnum | |
parent | 04619e858364afd7d195d2d63c1ae2156e46b659 (diff) |
sepnum own pkg + doc (24oct10)
git-svn-id: svn://tug.org/texlive/trunk@20186 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/sepnum')
-rw-r--r-- | Master/texmf-dist/tex/latex/sepnum/sepnum.sty | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/sepnum/sepnum.sty b/Master/texmf-dist/tex/latex/sepnum/sepnum.sty new file mode 100644 index 00000000000..5d81c61680e --- /dev/null +++ b/Master/texmf-dist/tex/latex/sepnum/sepnum.sty @@ -0,0 +1,218 @@ +%% This is file `sepnum.sty' -- separated numbers +%% +%% (C) 1995, 1996, 2001 Bernd Raichle +%% Raichle@Informatik.Uni-Stuttgart.de +%% +%% This package provides a means of formatting numbers +%% with (a) a decimal separator different of the default (`.') +%% and (b) a separator (default `,') every three digits. +%% +%% First version of this package was posted to the newsgroup +%% `de.comp.tex' November 6th, 1995 (as `printnum.sty'). +%% +%% +%% -- LICENSING CONDITION -- +%% +%% This program may be redistributed and/or modified under the terms +%% of the LaTeX Project Public License, either version 1.0 of this +%% license, or (at your option) any later version. +%% The latest version of this license is in +%% CTAN:macros/latex/base/lppl.txt. +%% +%% +%% -- USAGE -- +%% +%% The macro +%% +%% \sepnum{<c>}{<sbc>}{<sac>}{<number>} +%% +%% produces the <number> with the decimal point replaced by <c> +%% and the separator <sbc> every three digits in the integer part, +%% the separator <sac> every three digits in the fractional part +%% of <number>. \sepnum is _fully expandable_ and _not_ fragile, +%% unless one of <c>, <sbc>, or <sac> is. +%% +%% Example: +%% - a non realistic example to show the capabilities of \sepnum +%% \sepnum{,}{*}{-}{1234.5678} => 1*234,567-8 +%% - to print a number inserting small spaces each three digits +%% \sepnum{.}{\,}{\,}{1234.5678} => 1\,234.567\,8 +%% +%% +%% Additionally this package provides +%% +%% \sepnumform{<c>}{<sbc>}{<sac>}{<LaTeX-counter>} +%% +%% to use \sepnum with a LaTeX counter. +%% +%% Example (with a decimal comma in the print form \the<counter>): +%% \newcounter{money} +%% \renewcommand{\themoney}{\sepnumform{,}{.}{}{money}} +%% +%% \setcounter{money}{-1000} +%% You have \themoney{} left. +%% +%% +%% (For compatibility with `printnum.sty', the macros +%% \printnum{<number>} and \printnumKomma/\printnumTrenner +%% still exist.) +%% +%% +%% -- SEE ALSO -- +%% +%% * Package ``comma.sty'' by David Carlisle which provides +%% similar features for integers only, i.e. it misses support +%% for the decimal point/comma in fixed point numbers. +%% * Package ``numprint.sty'' by Harald Harders supporting +%% formatting of numbers given as 1234e5 in addition. +%% +%% +\begingroup \expandafter\expandafter\expandafter\endgroup +\expandafter\ifx \csname ProvidesPackage\endcsname\relax \else + \ProvidesPackage{sepnum}% + [1996/09/05 v2.0 Insert a separator every three digits (br)] +\fi + + +% +% auxiliary macros for loops: +% +\newcommand{\sepnumReturnFi}{} +\newcommand{\sepnumReturnElseFi}{} +\newcommand{\sepnumReturnOrFi}{} + +\def\sepnumReturnFi#1\fi{\fi #1} +\def\sepnumReturnElseFi#1\else#2\fi{\fi #1} +\def\sepnumReturnOrFi#1\or#2\fi{\fi #1} + +% +% \sepnum@DoNothing #1 +% don't change #1 (removes braces around argument token list!) +% +\newcommand{\sepnum@DoNothing}[1]{#1} + +% +% \sepnum@ReverseNumber #1 #2 +% reverses all tokens in #2 and calls #1{#2} afterwards +% +\newcommand{\sepnum@ReverseNumber}[2]{% + \sepnum@DoReverseNumber{#1}{}#2\relax} +\newcommand{\sepnum@DoReverseNumber}[3]{% + \ifx\relax#3\sepnumReturnElseFi{#1{#2}}% + \else\sepnumReturnFi{\sepnum@DoReverseNumber{#1}{#3#2}}% + \fi} + +% +% \sepnum@ThreeDigits #1 #2 #3 +% reverses #3, inserts #1 every three tokens/digits +% (you have to reverse #3 again using \sepnum@ReverseNumber!), +% calls #2{#3} afterwards +% +\newcommand{\sepnum@ThreeDigits}[3]{% + \sepnum@DoThreeDigits{#1}{#2}{}0#3\relax} +\newcommand{\sepnum@DoThreeDigits}[5]{% + \ifx\relax#5\sepnumReturnElseFi{#2{#3}}% + \else\sepnumReturnFi{% + \ifcase#4\noexpand\sepnum@DoNothing{}% 0 + \sepnumReturnOrFi{\sepnum@DoThreeDigits{#1}{#2}{#5#3}1}% + \or % 1 + \sepnumReturnOrFi{\sepnum@DoThreeDigits{#1}{#2}{#5#3}2}% + \or % 2 + \sepnumReturnElseFi{\sepnum@DoThreeDigits{#1}{#2}{#5#3}3}% + \else % 3 ==> insert #1 + \sepnumReturnFi{\sepnum@DoThreeDigits{#1}{#2}{#5#1#3}1}% + \fi}% + \fi} + +% +% \sepnum@BeforeComma #1 #2 +% \sepnum@AfterComma #1 #2 +% call \sepnum@ReverseNumber and \sepnum@DoThreeDigits +% to correctly group the number #2 every three digits +% either with or without reversing first or afterwards. +% +\newcommand{\sepnum@BeforeComma}[2]{% + \sepnum@ReverseNumber{\sepnum@ThreeDigits{#1}\sepnum@DoNothing}{#2}} +\newcommand{\sepnum@AfterComma}[2]{% + \sepnum@ThreeDigits{#1}{\sepnum@ReverseNumber\sepnum@DoNothing}{#2}} + +% +%%%%%%%%%% USER MACRO %%%%%%%%%% +% +% \sepnum #1 #2 #3 #4 +% +% #1 decimal comma +% #2 separator for three digits groups before comma +% #3 separator for three digits groups after comma +% #4 number +% +\newcommand{\sepnum}[4]{% + \sepnum@Sign{#1}{#2}{#3}#4.\relax} +% +% look first for sign `+' or `-', divide given number in +% digits before and after `.', insert #1 as decimal comma +% (in \sepnum@SepComma) +% +\newcommand{\sepnum@Sign}[4]{% + \ifx\relax#4% + 0% + \else \sepnumReturnFi{% + \ifx -#4% + \sepnumReturnElseFi{-\sepnum@SepComma{#1}{#2}{#3}}% + \else \sepnumReturnFi{% + \ifx +#4% + \sepnumReturnElseFi{+\sepnum@SepComma{#1}{#2}{#3}}% + \else + \sepnumReturnFi{\sepnum@SepComma{#1}{#2}{#3}#4}% + \fi}% + \fi}% + \fi} + +\newcommand{\sepnum@SepComma}{} +\def\sepnum@SepComma#1#2#3#4.#5\relax{% + \ifx$#4$0% no digits before `.' => add 0 for "0.xxx" + \else \sepnumReturnFi{\sepnum@BeforeComma{#2}{#4}}\fi + \ifx$#5$% no digits after `.' + \else \sepnumReturnFi{#1\sepnum@DoSepComma{#3}#5\relax}\fi} + +% remove `.' inserted in \sepnum +\def\sepnum@DoSepComma#1#2.#3\relax{% + \sepnum@AfterComma{#1}{#2}} + + +% +%%%%%%%%%% USER MACRO %%%%%%%%%% +% +% \sepnumform #1 #2 #3 #4 +% +% like \sepnum but #4 is the name of a LaTeX counter +% +\newcommand{\sepnumform}[4]{% + \expandafter\sepnum@doform + \expandafter{\number\value{#4}}{#1}{#2}{#3}} +\newcommand{\sepnum@doform}[4]{% + \sepnum{#2}{#3}{#4}{#1}} + + +% +%%%%%%%%%% USER MACRO %%%%%%%%%% +% +% For compatibility with `printnum.sty': +% +% \printnum #1 +% +\newcommand{\printnum}[1]{% + \sepnum{\printnumKomma}{\printnumTrenner}{\printnumTrenner}{#1}} +% +% Macros to specify comma and separator (default to get +% european style numbers, e.g. "123.456,78" for "123456.78"): +% +% \printnumKomma => , +% \printnumTrenner => . +% +\newcommand{\printnumKomma}{,} +\newcommand{\printnumTrenner}{.} + +\endinput +%% +%% End of file `sepnum.sty'. |