%%
%% This is file `calc.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% calc.dtx (with options: `package')
%%
%% IMPORTANT NOTICE:
%%
%% This file is a generated file from the sources of the `tools' bundle
%% in the LaTeX2e distribution.
%%
%% For the copyright notice see the source file(s).
%%
%% You are not allowed to modify this file.
%%
%% You are allowed to distribute this file if and only if
%% it is distributed with the corresponding source files in
%% the `tools' bundle.
%%
%% For the copying and distribution conditions of the source files,
%% see the file readme.txt distributed with the tools bundle.
%%
%% File `calc.dtx'.
%% Copyright (C) 1992--1995
%% Kresten Krab Thorup and Frank Jensen.
%% Copyright (C) 1997--1998
%% Kresten Krab Thorup, Frank Jensen and the LaTeX3 Project.
%%
%% The original authors ([email protected] and [email protected]) have
%% contributed this package to the LaTeX distribution.
%% Problems with this package should now be sent using latexbug.tex to
%% the normal LaTeX bug report address.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{calc}
[1998/06/07 v4.1a Infix arithmetic (KKT,FJ)]
\def\calc@assign@generic#1#2#3#4{\let\calc@A#1\let\calc@B#2%
\expandafter\calc@open\expandafter(#4!%
\global\calc@A\calc@B\endgroup#3\calc@B}
\def\calc@assign@count{\calc@assign@generic\calc@Acount\calc@Bcount}
\def\calc@assign@dimen{\calc@assign@generic\calc@Adimen\calc@Bdimen}
\def\calc@assign@skip{\calc@assign@generic\calc@Askip\calc@Bskip}
\newcount\calc@Acount \newcount\calc@Bcount
\newdimen\calc@Adimen \newdimen\calc@Bdimen
\newskip\calc@Askip \newskip\calc@Bskip
\def\setcounter#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}%
{\calc@assign@count{\global\csname c@#1\endcsname}{#2}}}
\def\addtocounter#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}%
{\calc@assign@count{\global\advance\csname c@#1\endcsname}{#2}}}
\DeclareRobustCommand\setlength{\calc@assign@skip}
\DeclareRobustCommand\addtolength[1]{\calc@assign@skip{\advance#1}}
\def\calc@pre@scan#1{%
\ifx(#1%
\let\calc@next\calc@open
\else
\ifx\widthof#1%
\expandafter\expandafter\expandafter\calc@textsize
\else
\calc@numeric% no \expandafter needed for this one.
\fi
\fi
#1}
\def\calc@open({\begingroup\aftergroup\calc@initB
\begingroup\aftergroup\calc@initB
\calc@pre@scan}
\def\calc@initB{\calc@B\calc@A}
\def\calc@numeric{\afterassignment\calc@post@scan \global\calc@A}
\newcommand\widthof{}
\let\widthof\ignorespaces
\newcommand\heightof{}
\let\heightof\ignorespaces
\newcommand\depthof{}
\let\depthof\ignorespaces
\def\calc@textsize #1#2{%
\begingroup
\let\widthof\wd
\let\heightof\ht
\let\depthof\dp
\@settodim #1%
{\global\calc@A}%
{%
\let\widthof\ignorespaces
\let\heightof\ignorespaces
\let\depthof\ignorespaces
#2}%
\endgroup
\calc@post@scan}
\def\calc@post@scan#1{%
\ifx#1!\let\calc@next\endgroup \else
\ifx#1+\let\calc@next\calc@add \else
\ifx#1-\let\calc@next\calc@subtract \else
\ifx#1*\let\calc@next\calc@multiplyx \else
\ifx#1/\let\calc@next\calc@dividex \else
\ifx#1)\let\calc@next\calc@close \else \calc@error#1%
\fi
\fi
\fi
\fi
\fi
\fi
\calc@next}
\def\calc@add{\calc@generic@add\calc@addAtoB}
\def\calc@subtract{\calc@generic@add\calc@subtractAfromB}
\def\calc@generic@add#1{\endgroup\global\calc@A\calc@B\endgroup
\begingroup\aftergroup#1\begingroup\aftergroup\calc@initB
\calc@pre@scan}
\def\calc@addAtoB{\advance\calc@B\calc@A}
\def\calc@subtractAfromB{\advance\calc@B-\calc@A}
\ifx\real\@undefined\let\real\relax\fi
\ifx\ratio\@undefined\let\ratio\relax\fi
\def\calc@ratio@x{\ratio}
\def\calc@real@x{\real}
\def\calc@multiplyx#1{\def\calc@tmp{#1}%
\ifx\calc@tmp\calc@ratio@x \let\calc@next\calc@ratio@multiply \else
\ifx\calc@tmp\calc@real@x \let\calc@next\calc@real@multiply \else
\let\calc@next\calc@multiply
\fi
\fi
\calc@next#1}
\def\calc@dividex#1{\def\calc@tmp{#1}%
\ifx\calc@tmp\calc@ratio@x \let\calc@next\calc@ratio@divide \else
\ifx\calc@tmp\calc@real@x \let\calc@next\calc@real@divide \else
\let\calc@next\calc@divide
\fi
\fi
\calc@next#1}
\def\calc@multiply{\calc@generic@multiply\calc@multiplyBbyA}
\def\calc@divide{\calc@generic@multiply\calc@divideBbyA}
\def\calc@generic@multiply#1{\endgroup\begingroup
\let\calc@A\calc@Acount \let\calc@B\calc@Bcount
\aftergroup#1\calc@pre@scan}
\def\calc@multiplyBbyA{\multiply\calc@B\calc@Acount}
\def\calc@divideBbyA{\divide\calc@B\calc@Acount}
\def\calc@close
{\endgroup\global\calc@A\calc@B
\endgroup\global\calc@A\calc@B
\calc@post@scan}
\def\calc@ratio@multiply\ratio{\calc@ratio@evaluate}
\def\calc@ratio@divide\ratio#1#2{\calc@ratio@evaluate{#2}{#1}}
\let\calc@numerator=\calc@Bcount
\newcount\calc@denominator
\def\calc@ratio@evaluate#1#2{%
\endgroup\begingroup
\calc@assign@dimen\calc@numerator{#1}%
\calc@assign@dimen\calc@denominator{#2}%
\gdef\calc@the@ratio{}%
\ifnum\calc@numerator<0 \calc@numerator-\calc@numerator
\gdef\calc@the@ratio{-}%
\fi
\ifnum\calc@denominator<0 \calc@denominator-\calc@denominator
\xdef\calc@the@ratio{\calc@the@ratio-}%
\fi
\calc@Acount\calc@numerator
\divide\calc@Acount\calc@denominator
\xdef\calc@the@ratio{\calc@the@ratio\number\calc@Acount.}%
\calc@next@digit \calc@next@digit \calc@next@digit
\calc@next@digit \calc@next@digit \calc@next@digit
\endgroup
\calc@multiply@by@real\calc@the@ratio
\begingroup
\calc@post@scan}
\def\calc@next@digit{%
\multiply\calc@Acount\calc@denominator
\advance\calc@numerator -\calc@Acount
\multiply\calc@numerator 10
\calc@Acount\calc@numerator
\divide\calc@Acount\calc@denominator
\xdef\calc@the@ratio{\calc@the@ratio\number\calc@Acount}}
\def\calc@multiply@by@real#1{\calc@Bdimen #1\calc@B \calc@B\calc@Bdimen}
\def\calc@real@multiply\real#1{\endgroup
\calc@multiply@by@real{#1}\begingroup
\calc@post@scan}
\def\calc@real@divide\real#1{\calc@ratio@evaluate{1pt}{#1pt}}
\def\calc@error#1{%
\PackageError{calc}%
{`#1' invalid at this point}%
{I expected to see one of: + - * / )}}
\endinput
%%
%% End of file `calc.sty'.
|