%%% ==================================================================== %%% @LaTeX-style-file{ %%% author = "Enrico Bertolazzi", %%% version = "1.1", %%% date = "31-MAY-2001", %%% filename = "easy.sty", %%% address = "Dipartimento di Ingeneria Meccanica e Strutturale, %%% Trento University, %%% Via Mesiano 77, Trento, Italy", %%% FAX = "+39 (461) 882599", %%% email = "enrico.bertolazzi@ing.unitn.it (Internet)", %%% supported = "yes. Please send comments via E-mail", %%% %%% ==================================================================== %%% %%% INSTALLATION: %%% Put this file where your TeX looks for inputs. %%% %%% DOCUMENTATION: %%% no documentation %%% %%% Copyright 1999 Enrico Bertolazzi %%% %%% This program can be redistributed and/or modified under the terms %%% of the LaTeX Project Public License Distributed from CTAN %%% archives in directory macros/latex/base/lppl.txt; either %%% version 1 of the License, or any later version. %%% %%% } %%% ====================================================================%%% %%% ___ ____ ___ _ _ ___ ____ ___ _ _ %%% %%% / \ / / \ \ / / \ / / \ \ / %%% %%% /____/ /__ /____/ \/ /____/ /__ /____/ \/ %%% %%% / \ / / \ / / \ / / \ / %%% %%% /____/ /____ / \ / /____/ /____ / \ / %%% %%% ====================================================================%%% %%% %%% v1.0 30-AUG-1999 %%% v1.1 31-MAY-2001 changed \@roman with \romannumeral (thanks to Claudio Beccari) %%% added \easydashlen \easydashsep \def\filedate{2001/05/31} \def\fileversion{v1.1} \typeout{Document Style `easy' \fileversion\space<\filedate>.} %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{easy}[\filedate\space\fileversion] \def\@easy@disable@space{\catcode`\ =9\endlinechar=-1} \def\@easy@enable@space{\catcode`\ =10\endlinechar=`\^^M} \@easy@disable@space \newcount\@easy@level\@easy@level=\z@\relax \newcount\@easy@ncol \newcount\@easy@nrow \newcount\@easy@cnt % % define boxes for internal computation. % \@tempcnta=8\relax \@whilenum\@tempcnta>\z@\do{ \expandafter\global\expandafter\newbox\csname @easy@box\romannumeral\@tempcnta\endcsname \expandafter\global\expandafter\newdimen\csname @easy@minx\romannumeral\@tempcnta\endcsname \expandafter\global\expandafter\newdimen\csname @easy@miny\romannumeral\@tempcnta\endcsname \expandafter\global\expandafter\newdimen\csname @easy@maxx\romannumeral\@tempcnta\endcsname \expandafter\global\expandafter\newdimen\csname @easy@maxy\romannumeral\@tempcnta\endcsname \advance\@tempcnta by\m@ne } % % define dimens for internal computation. % \@tempcnta=30\relax \@whilenum\@tempcnta>\z@\do{% \expandafter\global\expandafter\newdimen\csname @easy@hsize\romannumeral\@tempcnta\endcsname% \expandafter\global\expandafter\newdimen\csname @easy@vsize\romannumeral\@tempcnta\endcsname% \advance\@tempcnta by\m@ne } \def\@easy@ifnextchar#1#2#3{% \let\reserved@d=#1% \def\reserved@a{#2} \def\reserved@b{#3}% \futurelet\@let@token\@easy@ifnch} \def\@easy@ifnch{% \ifx\@let@token\reserved@d \let\reserved@c\reserved@a \else \let\reserved@c\reserved@b \fi \reserved@c} \def\@easy@edef(#1)#2{\expandafter\edef\csname#1\endcsname{#2}} \def\@easy@xdef(#1)#2{\expandafter\xdef\csname#1\endcsname{#2}} \def\@easy@gdef(#1)#2{\expandafter\gdef\csname#1\endcsname{#2}} \def\@easy@def(#1)#2{\expandafter\def\csname#1\endcsname{#2}} \def\@easy@let(#1)#2{% \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname} \def\@easy@glet(#1)#2{% \expandafter\global\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname} % \@easy@rotate{\macro} % rotate the contens of a macro, for example: % % \def\macro{abc} % \@easy@rotate{\macro} % % now macro contains {bca} \def\@easy@rotate@#1#2\end{#2#1}% \def\@easy@rotate#1{\xdef#1{\expandafter\@easy@rotate@#1\end}}% % \@easy@firstchar{string} % get the first character of a string. % If the string is empty return `-' \def\@easy@firstchar@#1#2\end{#1}% \def\@easy@firstchar#1{\expandafter\@easy@firstchar@#1-\end}% \def\@easy@parse@cols#1{% \gdef\@easy@list@align{lrc}% \global\let\@easy@rules\@empty% \global\let\@easy@align\@empty% \expandafter\@easy@parsea#1\end% \@easy@xdef(@easy@col@align\romannumeral\@easy@level){`\@easy@align}% \@easy@xdef(@easy@col@rules\romannumeral\@easy@level){`\@easy@rules}% } \def\@easy@parse@rows#1{% \gdef\@easy@list@align{tbc}% \global\let\@easy@rules\@empty% \global\let\@easy@align\@empty% \expandafter\@easy@parsea#1\end% \@easy@xdef(@easy@row@align\romannumeral\@easy@level){`\@easy@align}% \@easy@xdef(@easy@row@rules\romannumeral\@easy@level){`\@easy@rules}% } % \@easy@list@align{string} % Parse a string with alignement definitions and separate % rules definition. % \@easy@list@align muist contains the possible alignments. % the rules coding is fixed as: % @ => no rule % . => dotted rule % ; => dot-dash rule % : => dased rule % | => solid rule % 0123456789 => solid rule 0 => thin 9 => thick % % The output are % \@easy@align: which will contain alignement string % \@easy@rules: which will contain rule definition string % % for example % \def\@easy@list@align{rcl} % \@easy@list@align{|r;cl} % results in % \@easy@align => rcl % \@easy@rules => |;@@ % \def\@easy@parsea{\futurelet\@tempb\@easy@parseb} \def\@easy@parseb{%parse column separator \def\next{\xdef\@easy@rules{@\@easy@rules}\@easy@parsec}% \@tfor\@tempa:=@.;:|0123456789\do{% \expandafter\ifx\expandafter\@tempb\@tempa% \xdef\@easy@rules{\@tempa\@easy@rules} \def\next##1{\@easy@parsec}% \@break@tfor% \fi% } \next} \def\@easy@parsec{\futurelet\@tempb\@easy@parsed} \def\@easy@parsed{% parse column alignment \def\next{\@easy@parse@error}% \ifx\@tempb\end% \def\next##1{}% eat end \else \expandafter\@tfor\expandafter\@tempa\expandafter:\expandafter=\@easy@list@align\do{% \expandafter\ifx\expandafter\@tempb\@tempa% \xdef\@easy@align{\@tempa\@easy@align}% \def\next##1{\@easy@parsea}% \@break@tfor% \fi% } \fi% \next} \@easy@enable@space \def\@easy@parse@error{% \PackageWarningNoLine{`easy'}% {unrecognized command \meaning\@tempb \space on line \the\inputlineno}} \@easy@disable@space \newdimen\@easy@dash@len \@easy@dash@len=5pt\relax \newdimen\@easy@dash@sep \@easy@dash@sep=2pt\relax \def\easydashlen#1{\@easy@dash@len=#1\relax} \def\easydashsep#1{\@easy@dash@sep=#1\relax} % \@easy@h@dash{height}{width}{sep} % +----+ | % #1 | | | % +----+ | % #2 #3 % \@easy@v@dash{width}{height}{sep} % #1 % +----+ % #2 | | % +----+ % #3 % ----- \def\@easy@h@dash#1#2#3{\hbox{\vrule\@width#2\@height#1\@depth\z@\kern#3}} \def\@easy@v@dash#1#2#3{\vbox{\hrule\@width#1\@height#2\@depth\z@\kern#3}} % \@easy@h@dashes{totalwidth}{height}{sep1}{width}{sep2} % |-------- totalwidth --------- | % +---+ +----------+ | % height | | | | | % +---+ +----------+ | % height sep1 width sep2 % \def\@easy@h@dashes#1#2#3#4#5{% \setbox\@tempboxa\hbox{}% \@tempdima=#1\relax% \@tempcnta=\@ne% \loop\advance\@tempcnta by\@ne% \ifodd\@tempcnta\setbox0\@easy@h@dash{#2}{#2}{#3}\else\setbox0\@easy@h@dash{#2}{#4}{#5}\fi% \@tempdimb=\wd\@tempboxa\relax\advance\@tempdimb by\wd0\relax \ifdim\@tempdimb<\@tempdima\relax% \setbox\@tempboxa\hbox{\unhbox\@tempboxa\unhbox0}% \repeat% \advance\@tempdima by -\wd\@tempboxa\relax% \@tempdimb=\ht\@tempboxa\relax% \hbox{\unhbox\@tempboxa\vrule\@width\@tempdima\@height\@tempdimb\@depth\z@} } \def\@easy@v@dashes#1#2#3#4#5{% \setbox\@tempboxa\vbox{}% \@tempdima=#1\relax% \@tempcnta=\@ne% \loop\advance\@tempcnta by\@ne% \ifodd\@tempcnta\setbox0\@easy@v@dash{#2}{#2}{#3}\else\setbox0\@easy@v@dash{#2}{#4}{#5}\fi% \@tempdimb=\ht\@tempboxa\relax\advance\@tempdimb by\ht0\relax% \ifdim\@tempdimb<\@tempdima\relax% \setbox\@tempboxa\vbox{\unvbox\@tempboxa\unvbox0}% \repeat% \advance\@tempdima by -\ht\@tempboxa\relax% \@tempdimb=\wd\@tempboxa\relax% \vbox{\unvbox\@tempboxa\hrule\@width\@tempdimb\@height\@tempdima\@depth\z@} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@easy@hdots(#1,#2){\@easy@h@dashes{#1}{#2}\@easy@dash@sep\z@\z@} \def\@easy@vdots(#1,#2){\@easy@v@dashes{#1}{#2}\@easy@dash@sep\z@\z@} \def\@easy@hdashes(#1,#2){\@easy@h@dashes{#1}{#2}\z@\@easy@dash@len\@easy@dash@sep} \def\@easy@vdashes(#1,#2){\@easy@v@dashes{#1}{#2}\z@\@easy@dash@len\@easy@dash@sep} \def\@easy@hdotdash(#1,#2){\@easy@h@dashes{#1}{#2}\@easy@dash@sep\@easy@dash@len\@easy@dash@sep} \def\@easy@vdotdash(#1,#2){\@easy@v@dashes{#1}{#2}\@easy@dash@sep\@easy@dash@len\@easy@dash@sep} \def\@easy@hrule(#1,#2){\hbox{\vrule\@width#1\@height#2\@depth\z@}} \def\@easy@vrule(#1,#2){\vbox{\hrule\@width#2\@height#1\@depth\z@}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@easy@h@draw#1#2{% \expandafter\ifx#1.\@easy@hdots(#2,\@easy@size@dash)\else% \expandafter\ifx#1;\@easy@hdotdash(#2,\@easy@size@dash)\else% \expandafter\ifx#1:\@easy@hdashes(#2,\@easy@size@dash)\else% \expandafter\ifx#1|\@easy@hrule(#2,\@easy@size@rule)\else% \expandafter\ifx#1-\@easy@hrule(#2,\@easy@size@rule)\else% \expandafter\ifx#1@\else% \@easy@set@size{#1} \@easy@hrule(#2,\@tempdima)% \fi\fi\fi\fi\fi\fi% } \def\@easy@v@draw#1#2{% \expandafter\ifx#1.\@easy@vdots(#2,\@easy@size@dash)\else% \expandafter\ifx#1;\@easy@vdotdash(#2,\@easy@size@dash)\else% \expandafter\ifx#1:\@easy@vdashes(#2,\@easy@size@dash)\else% \expandafter\ifx#1|\@easy@vrule(#2,\@easy@size@rule)\else% \expandafter\ifx#1@\else \@easy@set@size{#1} \@easy@vrule(#2,\@tempdima)% \fi\fi\fi\fi\fi% } \def\@easy@set@size#1{ \@tempdima=\@easy@size@rule\relax \ifcase\number#1 \divide\@tempdima5 \or\divide\@tempdima4 \or\divide\@tempdima3 \or\divide\@tempdima2 \or\divide\@tempdima1 \or\multiply\@tempdima2 \or\multiply\@tempdima3 \or\multiply\@tempdima4 \or\multiply\@tempdima5 \or\multiply\@tempdima6 \fi } \def\@easy@kern@size#1{% \expandafter\ifx#1.\@tempdima=\@easy@size@dash\else% \expandafter\ifx#1;\@tempdima=\@easy@size@dash\else% \expandafter\ifx#1:\@tempdima=\@easy@size@dash\else% \expandafter\ifx#1|\@tempdima=\@easy@size@rule\else% \expandafter\ifx#1-\@tempdima=\@easy@size@rule\else% \expandafter\ifx#1@\@tempdima=\z@\else\@easy@set@size{#1}% \fi\fi\fi\fi\fi\fi% } \def\@easy@kern#1{\@easy@kern@size{#1}\kern\@tempdima} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \@easy@hbox[halign,valign,width,heigth,sep,content] % \def\@easy@hbox[#1,#2,#3,#4,#5,#6]{% \hbox{\vbox to#4{\expandafter\ifx#2t\else\vss\fi% \kern#5\hbox to#3{% \expandafter\ifx#1l\else\hss\fi% \kern#5\vphantom{\copy#6}\unhbox#6\kern#5% \expandafter\ifx#1r\else\hss\fi}% \kern#5\expandafter\ifx#2b\else\vss\fi}}} % % evaluate dimensions of box of boxes, it return % \@easy@vsize max heigth + \@easy@spread % \@easy@hsize max width + \@easy@spread % \def\@easy@evaldim{% \@tempcnta=30\relax \@whilenum\@tempcnta>\z@\do{% \global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\z@% \global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\z@% \advance\@tempcnta by \m@ne}% \setbox0\vbox{% \unvcopy\@easy@mainbox% \global\@easy@nrow=\z@% \loop% \unskip\global\setbox\@ne\lastbox% \ifhbox\@ne% \global\advance\@easy@nrow\@ne%%%% \global\@easy@ncol=\z@ \@tempdima\dp\@ne\relax \advance\@tempdima\ht\@ne\relax \advance\@tempdima\@easy@spread\relax \advance\@tempdima\@easy@spread\relax \global\@nameuse{@easy@vsize\romannumeral\@easy@nrow}=\@tempdima% \setbox0=\hbox{% \unhbox\@ne% \loop% \unskip\global\setbox\tw@=\lastbox% \ifhbox\tw@% \global\advance\@easy@ncol\@ne%%%% \@tempdima\wd\tw@\relax \advance\@tempdima\@easy@spread\relax \advance\@tempdima\@easy@spread\relax \ifdim\@tempdima>\@nameuse{@easy@hsize\romannumeral\@easy@ncol}\relax \global\@nameuse{@easy@hsize\romannumeral\@easy@ncol}=\@tempdima% \fi% \repeat% }% \repeat% }% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@easy@loop@cols#1{\@tempcnta=\@easy@ncol\relax% \@whilenum\@tempcnta>\z@\do{#1\advance\@tempcnta by\m@ne}} \def\@easy@loop@rows#1{\@tempcnta=\@easy@nrow\relax% \@whilenum\@tempcnta>\z@\do{#1\advance\@tempcnta by\m@ne}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@easy@balance@cols#1{% \@tempdima=#1\relax% \@easy@loop@cols{\@tempdimb=\@nameuse{@easy@hsize\romannumeral\@tempcnta}\relax \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi} \@easy@loop@cols{\global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\@tempdima\relax} } \def\@easy@balance@rows#1{% \@tempdima=#1\relax% \@easy@loop@rows{\@tempdimb=\@nameuse{@easy@vsize\romannumeral\@tempcnta}\relax \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi} \@easy@loop@rows{\global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\@tempdima\relax} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@easy@balance@equalize#1{% \@tempdima=#1\relax% \@easy@loop@cols{\@tempdimb=\@nameuse{@easy@hsize\romannumeral\@tempcnta}\relax% \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi} \@easy@loop@rows{\@tempdimb=\@nameuse{@easy@vsize\romannumeral\@tempcnta}\relax% \ifdim\@tempdima<\@tempdimb\relax\@tempdima=\@tempdimb\fi} \@easy@loop@cols{\global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\@tempdima\relax} \@easy@loop@rows{\global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\@tempdima\relax} } \def\@easy@balance@row@col{% \expandafter\ifx\@easy@balance c\@easy@balance@cols{\@easy@minx}\else% \expandafter\ifx\@easy@balance r\@easy@balance@rows{\@easy@miny}\else% \expandafter\ifx\@easy@balance b\@easy@balance@cols{\@easy@minx}\@easy@balance@rows{\@easy@miny}\else% \expandafter\ifx\@easy@balance e\@easy@balance@equalize{\@easy@minx}% \else% no balancing \@tempdima=\@easy@minx\relax \@tempdimb=\@easy@miny\relax \@easy@loop@cols{\ifdim\@tempdima>\@nameuse{@easy@hsize\romannumeral\@tempcnta}% \global\@nameuse{@easy@hsize\romannumeral\@tempcnta}=\@tempdima\fi} \@easy@loop@rows{\ifdim\@tempdimb>\@nameuse{@easy@vsize\romannumeral\@tempcnta}% \global\@nameuse{@easy@vsize\romannumeral\@tempcnta}=\@tempdimb\fi} \fi\fi\fi\fi% % \ifdim\@easy@maxx>\z@ \@tempdimc=\@easy@maxx\relax \loop \@easy@rotate\@easy@col@rules% \edef\@tempc{\@easy@firstchar\@easy@col@rules}% \expandafter\ifx\@tempc`\else \@easy@kern@size\@tempc \advance\@tempdimc by -\@tempdima\relax \repeat \@easy@loop@cols{\advance\@tempdimc by -\@nameuse{@easy@hsize\romannumeral\@tempcnta}\relax} \divide\@tempdimc by\@easy@ncol\relax \ifdim\@tempdimc>\z@ \@easy@loop@cols{\global\advance\@nameuse{@easy@hsize\romannumeral\@tempcnta} by \@tempdimc\relax} \fi \fi % \ifdim\@easy@maxy>\z@ \@tempdimc=\@easy@maxy\relax \loop \@easy@rotate\@easy@row@rules% \edef\@tempc{\@easy@firstchar\@easy@row@rules}% \expandafter\ifx\@tempc`\else \@easy@kern@size\@tempc \advance\@tempdimc by -\@tempdima\relax \repeat \@easy@loop@rows{\advance\@tempdimc by -\@nameuse{@easy@vsize\romannumeral\@tempcnta}\relax} \divide\@tempdimc by\@easy@nrow\relax \ifdim\@tempdimc>\z@ \@easy@loop@rows{\global\advance\@nameuse{@easy@vsize\romannumeral\@tempcnta} by \@tempdimc\relax} \fi \fi } \def\@easy@buildbox{% \setbox0=\vbox{% \unvbox\@easy@mainbox% \@easy@rotate\@easy@row@rules% \edef\@tempc{\@easy@firstchar\@easy@row@rules}% \global\setbox\@easy@mainbox\vbox{\@easy@kern\@tempc}% \global\@easy@nrow=\z@% \loop% \unskip\global\setbox\@ne=\lastbox% \ifhbox\@ne% \global\advance\@easy@nrow\@ne% \@easy@rotate\@easy@row@rules% \@easy@rotate\@easy@row@align% \@easy@buildboxa% \edef\@tempc{\@easy@firstchar\@easy@row@rules}% \global\setbox\@easy@mainbox\vbox {\@easy@kern\@tempc\box\tw@\unvbox\@easy@mainbox}% \repeat \@easy@rotate\@easy@row@rules% elim ` \@easy@rotate\@easy@row@align% elim ` } } \def\@easy@buildboxa{% \setbox0\hbox{% \unhbox\@ne% \@easy@rotate\@easy@col@rules% \edef\@tempc{\@easy@firstchar\@easy@col@rules}% \global\setbox\tw@\hbox{\@easy@kern\@tempc}% \global\@easy@ncol=\z@% \loop% \unskip\global\setbox\@ne=\lastbox% \ifhbox\@ne% \global\advance\@easy@ncol\@ne% \@easy@rotate\@easy@col@rules% \@easy@rotate\@easy@col@align% \edef\@tempa{\@easy@firstchar\@easy@col@align}% \edef\@tempb{\@easy@firstchar\@easy@row@align}% \edef\@tempc{\@easy@firstchar\@easy@col@rules}% \global\setbox\tw@\hbox{% \@easy@kern\@tempc% \@easy@hbox[\@tempa,\@tempb,% \@nameuse{@easy@hsize\romannumeral\@easy@ncol},% \@nameuse{@easy@vsize\romannumeral\@easy@nrow},% \@easy@spread,\@ne]% \unhbox\tw@}% \repeat \@easy@rotate\@easy@col@rules% elim ` \@easy@rotate\@easy@col@align% elim ` } } %%%%%%%%%%%%%%% Vertical lines %%%%%%%%%%%%%%%%%% \def\@easy@vlines{% \@tempcntb=\z@% \@easy@rotate\@easy@col@rules% \edef\@tempc{\@easy@firstchar\@easy@col@rules} \global\setbox\@ne\hbox{\@easy@v@draw\@tempc{\ht\@easy@mainbox}}% \loop% \advance\@tempcntb\@ne% \@easy@rotate\@easy@col@rules% \edef\@tempc{\@easy@firstchar\@easy@col@rules}% \expandafter\ifx\@tempc`\relax\else% \global\setbox\@ne\hbox{% \@easy@v@draw\@tempc{\ht\@easy@mainbox} \kern\@nameuse{@easy@hsize\romannumeral\@tempcntb} \unhbox\@ne}% \repeat% } %%%%%%%%%%%%%%% Horizontal lines %%%%%%%%%%%%%%%%%% \def\@easy@hlines{% \@tempcntb=\z@% \@easy@rotate\@easy@row@rules% \edef\@tempc{\@easy@firstchar\@easy@row@rules}% \global\setbox\tw@\vbox{\@easy@h@draw\@tempc{\wd\@easy@mainbox}}% \loop% \advance\@tempcntb\@ne% \@easy@rotate\@easy@row@rules% \edef\@tempc{\@easy@firstchar\@easy@row@rules}% \expandafter\ifx\@tempc`\relax\else% \global\setbox\tw@\vbox{% \@easy@h@draw\@tempc{\wd\@easy@mainbox} \kern\@nameuse{@easy@vsize\romannumeral\@tempcntb} \unvbox\tw@}% \repeat% } %%%%%%%%%%%%%%% PATH COMMANDS %%%%%%%%%%%%%%% \def\addpath#1{\g@addto@macro\@easy@path{[#1]}} \def\@easy@dopath{%adjust size boxex \global\setbox\thr@@\hbox{} \@tempcntb=\z@% \@easy@rotate\@easy@col@rules% \edef\@tempc{\@easy@firstchar\@easy@col@rules} \@easy@kern@size\@tempc% \loop% \advance\@tempcntb\@ne% \global\advance\@nameuse{@easy@hsize\romannumeral\@tempcntb}\@tempdima \@easy@rotate\@easy@col@rules% \edef\@tempc{\@easy@firstchar\@easy@col@rules}% \expandafter\ifx\@tempc`\relax\else% \@easy@kern@size\@tempc \divide\@tempdima\tw@ \global\advance\@nameuse{@easy@hsize\romannumeral\@tempcntb}\@tempdima \repeat% \global\advance\@nameuse{@easy@hsize\romannumeral\@tempcntb}\@tempdima % \@tempcntb=\z@% \@easy@rotate\@easy@row@rules% \edef\@tempc{\@easy@firstchar\@easy@row@rules} \@easy@kern@size\@tempc% \loop% \advance\@tempcntb\@ne% \global\advance\@nameuse{@easy@vsize\romannumeral\@tempcntb}\@tempdima \@easy@rotate\@easy@row@rules% \edef\@tempc{\@easy@firstchar\@easy@row@rules}% \expandafter\ifx\@tempc`\relax\else% \@easy@kern@size\@tempc \divide\@tempdima\tw@ \global\advance\@nameuse{@easy@vsize\romannumeral\@tempcntb}\@tempdima \repeat% \global\advance\@nameuse{@easy@vsize\romannumeral\@tempcntb}\@tempdima \expandafter\@easy@do@path@parse\@easy@path`} \def\@easy@do@path@parse{\futurelet\@tempa\@easy@do@path@parsea} \def\@easy@do@path@parsea{% \ifx`\@tempa\expandafter\@gobble \else\expandafter\@easy@do@path\fi} \def\@easy@do@path[(#1,#2,#3)#4]{% \xdef\@easy@k@line{#3}% \global\@tempcnta\@easy@ncol% \global\advance\@tempcnta-#1% \global\@tempcntb#2% \expandafter\@easy@do@path@path#4`\@easy@do@path@parse} \def\@easy@do@path@path{\futurelet\@tempa\@easy@do@path@patha} \def\@easy@do@path@patha{% \def\next##1{\@easy@do@path@path} \ifx r\@tempa \ifnum\@tempcnta=\z@\global\@tempcnta\@easy@ncol\fi \global\advance\@tempcnta\m@ne \@easy@add@h@tobox \global\advance\@tempcnta\m@ne \else\ifx l\@tempa \@easy@add@h@tobox \else\ifx u\@tempa \@easy@add@v@tobox \else\ifx d\@tempa \ifnum\@tempcntb=\z@\global\@tempcntb\@easy@nrow\fi \global\advance\@tempcntb\m@ne \@easy@add@v@tobox \global\advance\@tempcntb\m@ne \else\def\next##1{} \fi\fi\fi\fi\next} \def\@easy@add@h@tobox{% \ifnum\@tempcnta=\@easy@ncol\global\@tempcnta\z@\fi \global\setbox\thr@@\hbox{% \rlap{\box\thr@@} \@easy@ycoord{\@tempcntb}\raise\@tempdimc \hb@xt@\z@{% \@easy@xcoord{\@tempcnta}\kern\@tempdimc \global\advance\@tempcnta\@ne \kern-\@nameuse{@easy@hsize\romannumeral\@tempcnta} \@easy@h@draw\@easy@k@line{\@nameuse{@easy@hsize\romannumeral\@tempcnta}}\hss} } } \def\@easy@add@v@tobox{% \ifnum\@tempcntb=\@easy@nrow\global\@tempcntb\z@\fi \global\setbox\thr@@\hbox{% \rlap{\box\thr@@} \@easy@ycoord{\@tempcntb}\raise\@tempdimc \hb@xt@\z@{% \@easy@xcoord{\@tempcnta}\kern\@tempdimc \global\advance\@tempcntb\@ne \@easy@v@draw\@easy@k@line{\@nameuse{@easy@vsize\romannumeral\@tempcntb}}\hss} } } \def\@easy@xcoord#1{% \@tempdimc=\wd\@easy@mainbox \@easy@cnt=\z@ \@whilenum\@easy@cnt<#1\do{% \advance\@easy@cnt\@ne \advance\@tempdimc-\@nameuse{@easy@hsize\romannumeral\@easy@cnt} }} \def\@easy@ycoord#1{% \@tempdimc=\z@\@easy@cnt=\z@ \@whilenum\@easy@cnt<#1\do{% \advance\@easy@cnt\@ne \advance\@tempdimc\@nameuse{@easy@vsize\romannumeral\@easy@cnt} }} \@easy@enable@space \endinput %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%