% PTMATRIX.TEX VERSION 2.0 % COPYRIGHT (C) 1991 BY THE TEXPLORATORS CORPORATION % ALL RIGHTS RESERVED % THIS FILE SHOULD NOT BE CHANGED IN ANY WAY. \catcode`\@=11 \let\alloc@\alloc@@ \newif\ifformat@ \newcount\ptmrowcount@ \newcount\ptmcolcount@ \newcount\ptmColcount@ \newcount\maxptmrow@ \newbox\ptmbox@ \def\qstrut@{\ifnum\ptmrowcount@<\@ne\Mathstrut@\fi} \def\GAM@{\global\advance\ptmcolcount@\@ne} \newif\iflastmrow@ \def\partition\matrix{\global\format@false\bgroup \let\endmatrix\ptmendmatrix@ \null\,\vcenter\bgroup\hbox\bgroup$\global\setbox\ptmbox@\vbox\bgroup \Let@\vspace@\normalbaselines\openup\spreadmlines@ \global\ptmrowcount@\m@ne\global\ptmcolcount@\z@\global\ptmColcount@\z@ \everycr{\noalign{\iflastmrow@\else\global\advance\ptmrowcount@\@ne \ifnum\ptmcolcount@<\ptmColcount@\else\global\ptmColcount@\ptmcolcount@ \global\maxptmrow@\ptmrowcount@\fi\global\ptmcolcount@\z@\fi}}% \tabskip\z@skip\halign\bgroup\hfil\qstrut@$\m@th##$\hfil\GAM@ &&\quad\hfil$\m@th##$\hfil\GAM@\crcr} \def\format{\crcr\egroup\iffalse{\fi\ifnum`}=\z@\fi \global\advance\ptmrowcount@\m@ne \global\format@true\format@} \def\format@#1\\{\def\preamble@{#1}% \def\l{\noexpand\qstrut@$\m@th\the\hashtoks@$\hfil\noexpand\GAM@}% \def\c{\noexpand\qstrut@\hfil$\m@th\the\hashtoks@$\hfil\noexpand\GAM@}% \def\r{\noexpand\qstrut@\hfil$\m@th\the\hashtoks@$\noexpand\GAM@}% \edef\Preamble@{\preamble@}\global\let\Preamble@@\Preamble@ \ifnum`{=\z@\fi\iffalse}\fi\tabskip\z@skip\halign\bgroup\span\Preamble@\crcr} \def\formatmatrixgap@{\global\let\matrixgap@\empty \setbox4=\vbox{\ialign{\span\Preamble@@\cr\the\toks@\cr}}% \setbox4=\vbox{\unvbox4 \setboxzl@ \setboxz@h{\unhbox\z@\count@\z@ \loop\unskip\setboxzl@\ifvoid\z@\else {\let\or\relax\xdef\matrixgap@{\matrixgap@ \ifnum\count@=\z@\else\or\fi\the\wdz@}}% \advance\count@\@ne \repeat}% {\let\or\relax \xdef\matrixgap@##1{\noexpand\ifcase##1 \matrixgap@\noexpand\fi}}% }% } \newcount\mcolcount@ \newcount\bordercount@ \def\ptmendmatrix@{\crcr\noalign{\global\lastmrow@true}\Mathstrut@\crcr \noalign{\global\lastmrow@false\kern-\baselineskip}% \egroup\egroup \bordercount@\ptmrowcount@\advance\bordercount@\m@ne \setbox\z@\vbox {\unvcopy\ptmbox@\unkern\setboxzl@\unskip\setboxzl@ \count@\ptmrowcount@ \loop \ifnum\count@>\maxptmrow@ \unskip\setboxzl@\advance\count@\m@ne \repeat \global\let\matrixgap@\empty\global\mcolcount@\tw@ \setbox\tw@\hbox {\unhcopy\z@\unskip\setboxzl@\unskip\setboxzl@ \loop\unskip\setboxzl@ \ifvoid\z@\else\global\advance\mcolcount@\@ne {\let\or\relax\xdef\matrixgap@{\matrixgap@\or10pt}}% \repeat}% {\let\or\relax\xdef\matrixgap@##1{\noexpand \ifcase##1 10pt\matrixgap@\or0pt\noexpand\fi}}% \ifformat@ \toks@{&}\count@\tw@ \loop \ifnum\count@<\mcolcount@\advance\count@\@ne \toks@\expandafter{\the\toks@&}% \repeat \formatmatrixgap@ \fi \xdef\rowbot@{\ifdim\dp\z@>\dp\Mathstrutbox@-\the\dp\z@\else -\the\dp\Mathstrutbox@\fi}% \xdef\rowtop@{\ifdim\ht\z@>\ht\Mathstrutbox@\the\ht\z@ \else\the\ht\Mathstrutbox@\fi}% \xdef\midrow@{\the\ht\z@}\xdef\midcol@{0pt}% \dimen@\z@ \setbox\tw@\hbox {\unhbox\z@ \count@\z@ \loop \unskip\setboxzl@ \ifvoid\z@\else \advance\dimen@\wdz@ \dimen@ii\matrixgap@\count@ \advance\dimen@-.5\dimen@ii {\let\or\relax\xdef\midcol@{\the\dimen@\or\midcol@}}% \advance\dimen@-.5\dimen@ii {\let\or\relax\xdef\leftcol@{\the\dimen@\ifnum\count@=\z@\else \or\leftcol@\fi}}% {\advance\dimen@-\wdz@\advance\dimen@\dimen@ii\let\or\relax \xdef\rightcol@{\the\dimen@\ifnum\count@=\z@\else\or\rightcol@\fi}}% \advance\dimen@\dimen@ii\advance\count@\@ne \repeat }% \global\let\matrixgap@\relax {\let\or\relax\xdef\midcol@##1{\noexpand \ifcase##1 \midcol@\noexpand\else\noexpand\Err@{##1 too large}% \noexpand\fi}% \xdef\leftcol@##1{\noexpand\ifcase##1 \noexpand\or\leftcol@\noexpand\fi}% \xdef\rightcol@##1{\noexpand\ifcase##1 \noexpand\or\rightcol@\noexpand\fi}% }% }% \setbox\z@\vbox {\unvcopy\ptmbox@\unkern\setboxzl@\unskip \setboxzl@ \xdef\rowbl@{0pt}% \dimen@ii\ht\z@ \dimen@\midrow@\relax\skip@\lastskip\unskip \advance\skip@\lastskip\unskip \advance\dimen@.5\skip@\xdef\midrow@{\the\dimen@}% \loop \setboxzl@ \ifvoid\z@\else \advance\dimen@ii\skip@ {\let\or\relax\xdef\rowbot@{\rowbot@\or\the\dimen@ii}}% \advance\dimen@ii\dp\z@ {\let\or\relax\xdef\rowbl@{\rowbl@\or\the\dimen@ii}}% \advance\dimen@ii\ht\z@ {\let\or\relax\xdef\rowtop@{\rowtop@\or\the\dimen@ii}}% \advance\dimen@.5\skip@ \advance\dimen@\dp\z@\advance\dimen@\ht\z@ \skip@\lastskip\unskip\advance\skip@\lastskip\unskip \advance\dimen@.5\skip@ {\let\or\relax\xdef\midrow@{\midrow@\or\the\dimen@}}% \repeat {\let\or\relax\xdef\midrow@##1{\noexpand \ifcase##1 0pt\or\midrow@\noexpand\else \noexpand\Err@{##1 too large}\noexpand\fi}% \xdef\rowbot@##1{\noexpand\ifcase##1 \or\rowbot@\noexpand\fi}% \xdef\rowbl@##1{\noexpand\ifcase##1 \or\rowbl@\noexpand\fi}% \xdef\rowtop@##1{\noexpand\ifcase##1 \or\rowtop@\noexpand\fi}% }% }% \box\ptmbox@ \let\midcol\midcol@\global\let\midcol@\relax \let\midrow\midrow@\global\let\midrow@\relax } \def\endpartition{$\egroup\egroup\,\egroup \global\let\leftcol@\relax \global\let\rightcol@\relax \global\let\rowbot@\relax \global\let\rowtop@\relax \global\let\rowbl@\relax} \newcount\count@@@@@ \edef\countdimen@#1{\setboxz@h{\def\noexpand\next@{\global\dimen@i}% \afterassignment\noexpand\next@\global \count@@@@@\noexpand\strip@#1 \space0pt}} \def\hsolid{\ifnum\catcode`\:=\active\expandafter\hsolidA@\else \expandafter\hsolidO@\fi} \def\hsolidO@#1:#2#3{\hsolid@{#1}{#2}{#3}} \def\hsolid@#1#2#3{\def\HLEADERS{\hsolidleaders}\HPARTITION{#1}{#2}{#3}} \def\hdashed{\ifnum\catcode`\:=\active\expandafter\hdashedA@\else \expandafter\hdashedO@\fi} \def\hdashedO@#1:#2#3{\hdashed@{#1}{#2}{#3}} \def\hdashed@#1#2#3{\def\HLEADERS{\hdashedleaders}\HPARTITION{#1}{#2}{#3}} \def\HPARTITION#1#2#3{\countdimen@{#1}\dimen@\midrow\count@@@@@ \advance\dimen@\dimen@i\advance\dimen@\dp\Mathstrutbox@ \smash{\llap{\raise\dimen@ \hbox{\countdimen@{#2}\dimen@\midcol\count@@@@@\advance\dimen@-\dimen@i \countdimen@{#3}\dimen@ii\midcol\count@@@@@\advance\dimen@ii-\dimen@i \advance\dimen@-\dimen@ii \HLEADERS\hskip\dimen@\hskip\dimen@ii}}}} \def\vsolid{\ifnum\catcode`\:=\active\expandafter\vsolidA@\else \expandafter\vsolidO@\fi} \def\vsolidO@#1:#2#3{\vsolid@{#1}{#2}{#3}} \def\vsolid@#1#2#3{\def\VLEADERS{\vsolidleaders}\VPARTITION{#1}{#2}{#3}} \def\vdashed{\ifnum\catcode`\:=\active\expandafter\vdashedA@\else \expandafter\vdashedO@\fi} \def\vdashedO@#1:#2#3{\vdashed@{#1}{#2}{#3}} \def\vdashed@#1#2#3{\def\VLEADERS{\vdashedleaders}\VPARTITION{#1}{#2}{#3}} \newdimen\vextra@ \def\VPARTITION#1#2#3{\countdimen@{#3}\dimen@\midrow\count@@@@@ \advance\dimen@\dimen@i\advance\dimen@\dp\Mathstrutbox@ \countdimen@{#2}\dimen@ii\midrow\count@@@@@ \advance\dimen@ii\dimen@i\advance\dimen@ii\dp\Mathstrutbox@ \setbox\z@\vbox to\p@{\VLEADERS\vfil}\vextra@\wdz@ \llap{\hbox{\smash{\vbox to\dimen@{\VLEADERS\vfil\vskip\dimen@ii}}% \hskip-\vextra@\relax\countdimen@{#1}\hskip\midcol\count@@@@@ \hskip-\dimen@i}}} \def\vleft{\ifnum\catcode`\:=\active\expandafter\vleftA@\else \expandafter\vleftO@\fi} \def\vleftO@#1#2:#3#4{\vleft@#1{#2}{#3}{#4}} \def\vleft@#1#2#3#4{\dimen@\rowtop@{#4}\advance\dimen@-\rowbot@{#3}% \dimen@ii\rowbl@{#3}\advance\dimen@ii.5\dimen@\advance\dimen@ii-\mathaxis@ \countdimen@{#2}% \llap{\hbox{\smash{\raise\dimen@ii\hbox{$\left#1\vcenter{\vbox to \dimen@{}}\right.$}}\hskip\leftcol@\count@@@@@\hskip-\dimen@i}}} \def\vright{\ifnum\catcode`\:=\active\expandafter\vrightA@\else \expandafter\vrightO@\fi} \def\vrightO@#1#2:#3#4{\vright@#1{#2}{#3}{#4}} \def\vright@#1#2#3#4{\dimen@\rowtop@{#4}\advance\dimen@-\rowbot@{#3}% \dimen@ii\rowbl@{#3}\advance\dimen@ii.5\dimen@\advance\dimen@ii-\mathaxis@ \countdimen@{#2}% \llap{\hbox{\smash{\raise\dimen@ii\hbox{\setboxz@h{$\left.\vcenter{\vbox to \dimen@{}}\right#1$}\global\dimen\thr@@\wdz@\boxz@}}}% \hskip\rightcol@\count@@@@@\hskip-\dimen@i\hskip-\dimen\thr@@}}% {\catcode`\:=\active \gdef\hsolidA@#1:#2#3{\hsolid@{#1}{#2}{#3}} \gdef\hdashedA@#1:#2#3{\hdashed@{#1}{#2}{#3}} \gdef\vsolidA@#1:#2#3{\vsolid@{#1}{#2}{#3}} \gdef\vdashedA@#1:#2#3{\vdashed@{#1}{#2}{#3}} \gdef\vleftA@#1#2:#3#4{\vleft@#1{#2}{#3}{#4}} \gdef\vrightA@#1#2:#3#4{\vright@#1{#2}{#3}{#4}} } \def\bdmatrix#1\\#2\\#3\endbdmatrix{\partition \matrix\format\c&\quad\hskip\jot\c&&\quad\c\\ #1\\\vspace{\jot}\Mathstrut@#2\\#3\endmatrix \vleft@(21\bordercount@ \vright@)\ptmColcount@1\bordercount@\endpartition} \def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne \ch@ck#1#4#2% \allocationnumber=\count1#1% \global#3#5=\allocationnumber \wlog{\string#5=\string#2\the\allocationnumber}} \catcode`\@=\active \def\hsolidleaders{\leaders\hrule} \def\vsolidleaders{\leaders\vrule} \def\hdashedleaders{\xleaders\hbox to5pt{\hfil \leaders\hrule\hskip2.5pt\hfil}} \def\vdashedleaders{\xleaders\vbox to5pt{\vfil\leaders\vrule\vskip2.5pt}}