diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/dialogl/cnvunits.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/dialogl/cnvunits.tex | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/dialogl/cnvunits.tex b/Master/texmf-dist/doc/latex/dialogl/cnvunits.tex new file mode 100644 index 00000000000..adf6e79165e --- /dev/null +++ b/Master/texmf-dist/doc/latex/dialogl/cnvunits.tex @@ -0,0 +1,134 @@ +\newdimen\zdim \newdimen\tempdim \newdimen\tempdima + +% Conversion factors: +% +% According Scaled Rational Prime +% Unit to TeX Points Form Factorization +%----------------------------------------------------------------- +% 1 sp 0.00002 pt 1 1/65536 pt 1 / 2^16 +% 1 mm 2.84526 pt 186467 7227/2540 pt 3*3*11*73 / 2*2*5*127 +% 1 cm 28.45274 pt 1864679 7227/254 pt 3*3*11*73 / 2*127 +% 1 pt 1.0 pt 65536 100/7227 in 2*2*5*5 / 3*3*11*73 +% 1 pc 12.0 pt 786432 12/1 pt +% 1 dd 1.07 pt 70124 1238/1157 pt 2*619 / 13*89 +% 1 cc 12.8401 pt 841489 14856/1157 pt 2*2*2*3*619 / 13*89 +% 1 bp 1.00374 pt 65781 803/800 pt 11*73 / 2*2*2*2*2*5*5 +% [1/72 in] +% 1 in 72.2699 pt 4736286 7227/100 pt 3*3*11*73 / 2*2*5*5 +% [2.54 cm] [254/100 cm] + +\def\points#1#2#3{\tempdim#2\relax + \edef#3{\csname cnvunits#1\expandafter\endcsname\the\tempdim}% +} + +\def\inches#1#2#3{% + \tempdim=#2\relax + \tempdima=\ifdim\tempdim<\zdim -\fi\tempdim % absolute value + \roundup\tempdima{#1}{in}% +% In the interest of maximum accuracy we push \tempdima as near +% to \maxdimen as possible before dividing, using the prime +% factorization of the fraction 7227/100 which is the +% points/inches conversion factor. + \ifdim\tempdima<.01\maxdimen + \multiply\tempdima 100 \divide\tempdima 7227 + \else + \ifdim\tempdima<.1\maxdimen + \multiply\tempdima 10 \divide\tempdima 11 + \multiply\tempdima 10 \divide\tempdima 657 + \else + \divide\tempdima 9 \multiply\tempdima 5 + \divide\tempdima 803 \multiply\tempdima 20 + \fi + \fi + \tempdim=\ifdim\tempdim<\zdim -\fi \tempdima + \edef#3{% + \csname cnvunits#1\expandafter\endcsname\the\tempdim}% +} + +% Function \roundup for rounding upward. #1 must be a dimension +% register. If it holds a negative value it will be rounded +% `outward' away from zero rather than `upward' toward zero. #3 +% is a TeX units string such as "pt" or "in". If #2 = 0 then +% this will round up to the nearest tenth; if #2 = 00, nearest +% hundredth; and so forth (up to 5 zeros). If #2 is empty then +% full accuracy up to TeX's limits will be used. +% +% The rounded result will be returned in the dimension register +% #1. + +\def\roundup#1#2#3{% + \if .#2.\else + \begingroup + \ifdim#1>\zdim + \advance#1-\maxdimen \advance#1.#25#3\relax + \fi + \ifdim#1<\zdim + \endgroup + \advance#1.#25#3 + \else + \endgroup + \fi + \fi +} + +\begingroup +\catcode`\P=12 \catcode`\T=12 +\lowercase{% +\expandafter\gdef\csname cnvunits\endcsname#1PT{#1} +\expandafter\gdef\csname cnvunits0\endcsname#1.#2PT{% + #1.\takeone#20\takeone} +\expandafter\gdef\csname cnvunits00\endcsname#1.#2PT{% + #1.\taketwo#200\taketwo} +\expandafter\gdef\csname cnvunits000\endcsname#1.#2PT{% + #1.\takethree#2000\takethree} +\expandafter\gdef\csname cnvunits0000\endcsname#1.#2PT{% + #1.\takefour#20000\takefour} +\expandafter\gdef\csname cnvunits00000\endcsname#1.#2PT{% + #1.\takefive#200000\takefive} +}% +\endgroup + +\def\takeone#1#2\takeone{#1} +\def\taketwo#1#2#3\taketwo{#1#2} +\def\takethree#1#2#3#4\takethree{#1#2#3} +\def\takefour#1#2#3#4#5\takefour{#1#2#3#4} +\def\takefive#1#2#3#4#5#6\takefive{#1#2#3#4#5} + +\def\showinches#1{\inches{00}{#1}\converted + \immediate\write16{% + #1 = (after conversion) \converted\space inches}} + +\showinches{0in} \showinches{1in} \showinches{2.0in} +\showinches{2.2in} \showinches{8.5in} \showinches{1pc} +\showinches{6pc} \showinches{1cm} \showinches{1mm} +\showinches{1bp} \showinches{72bp} \showinches{1cc} +\showinches{1dd} \showinches{72dd} \showinches{5000pt} +\showinches{-5000pt} \showinches{\maxdimen} +\showinches{-\maxdimen} \showinches{.999\maxdimen} +\showinches{1pt} \showinches{.01pt} + +\endinput + +% From the TeX log: + +0in = (after conversion) 0.00 inches +1in = (after conversion) 1.00 inches +2.0in = (after conversion) 2.00 inches +2.2in = (after conversion) 2.20 inches +8.5in = (after conversion) 8.50 inches +1pc = (after conversion) 0.17 inches +6pc = (after conversion) 1.00 inches +1cm = (after conversion) 0.39 inches +1mm = (after conversion) 0.04 inches +1bp = (after conversion) 0.01 inches +72bp = (after conversion) 1.00 inches +1cc = (after conversion) 0.18 inches +1dd = (after conversion) 0.01 inches +72dd = (after conversion) 1.07 inches +5000pt = (after conversion) 69.18 inches +-5000pt = (after conversion) -69.18 inches +\maxdimen = (after conversion) 226.70 inches +-\maxdimen = (after conversion) -226.70 inches +.999\maxdimen = (after conversion) 226.48 inches +1pt = (after conversion) 0.01 inches +.01pt = (after conversion) 0.00 inches |