summaryrefslogtreecommitdiff
path: root/macros/lamstex/inputs/ptmatrix.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/lamstex/inputs/ptmatrix.tex')
-rw-r--r--macros/lamstex/inputs/ptmatrix.tex233
1 files changed, 233 insertions, 0 deletions
diff --git a/macros/lamstex/inputs/ptmatrix.tex b/macros/lamstex/inputs/ptmatrix.tex
new file mode 100644
index 0000000000..21d54bbcd9
--- /dev/null
+++ b/macros/lamstex/inputs/ptmatrix.tex
@@ -0,0 +1,233 @@
+% 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}}
+