diff options
Diffstat (limited to 'Master/texmf-dist/tex/plain/cellular/cell4.tex')
-rw-r--r-- | Master/texmf-dist/tex/plain/cellular/cell4.tex | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/cellular/cell4.tex b/Master/texmf-dist/tex/plain/cellular/cell4.tex new file mode 100644 index 00000000000..498fd6f0044 --- /dev/null +++ b/Master/texmf-dist/tex/plain/cellular/cell4.tex @@ -0,0 +1,355 @@ +% File: TeX Inputs Cell4.tex +% Author: J E Pittman +% Bitnet: JEPTeX@TAMVenus +% Internet: JEPTeX@Venus.TAMU.EDU +% Date: November 8, 1988 +% +% Set up to output the data. +% +\catcode`_=11 % Protect local control sequence names. +% +% The user supplied information about the column has already been +% processed. +% +\def\column #1{\relax\ignorespaces}% +% +\row_number=0 +\rowpenalty=0 +% +% This routine is used for horizontal kerning when there might be a +% kern to the left of the current position. +% +\def\move_right_via_lastkern #1{\relax + \temp_dimen=#1\relax + \ifdim \lastkern>\zeropt + \advance \temp_dimen \by \lastkern + \unkern + \else + \fi + \kern \temp_dimen + }% +% +% \row begins a row by getting its specifications, terminating the +% previous row (if any) and going into horizontal mode. +% +\def\row #1{\relax + \advance \row_number \by 1 + \everyrow + \get_row_number_data + \advance \rowheight \by \expansion + \ifdim \bottomrulewidth>\zeropt + \advance \bottomrulewidth \by \horizontal_rule_adjust + \fi + \column_number=0 + \par + \ifnum \rowpenalty=0 + \else + \penalty \rowpenalty + \rowpenalty=0 + \fi + \noindent + \ignorespaces + \message{Outputting row \the\row_number.}% + }% +% +% \blank creates a blank cell by kerning the appropriate amount. +% +\def\blank {\relax + \advance \column_number \by 1 + \everycolumn + \get_column_number_data + \advance \columnwidth \by \expansion + \advance \merge_width \by \expansion + \move_right_via_lastkern \merge_width +% +% Terminate merger(s). +% + \merge_width=\zeropt + \merge_columns=0 + \ifnum \merge_rows>0 + \add_column_number_data + {\merge_rows=0\relax\merge_height=\zeropt\relax}% + \fi + }% +% +% \cell outputs a cell. The components of the cell are (in the order +% output) the entry, the top ruler, the bottom ruler, and the left and +% right rulers. +% +\def\cell #1{\relax + \advance \column_number \by 1 + \everycolumn + \get_column_number_data + \advance \columnwidth \by \expansion + \advance \merge_height \by \rowheight + \advance \merge_width \by \columnwidth + \ifdim \leftrulewidth>\zeropt + \advance \leftrulewidth \by \vertical_rule_adjust + \fi + \ifdim \rightrulewidth>\zeropt + \advance \rightrulewidth \by \vertical_rule_adjust + \fi +% +% Get the correct top border skip and rule width. Note that it is +% necessary to extract this informaion even if a row merger is not +% present because a previous row merger might have left the wrong +% values. +% + \begingroup + \advance \row_number \by -\merge_rows + \everyrow + \get_row_number_data + \xdef\globaltemp{\topborderskip=\the\topborderskip\relax + \toprulewidth=\the\toprulewidth\relax + }% + \aftergroup \globaltemp + \endgroup + \ifdim \toprulewidth>\zeropt + \advance \toprulewidth \by \horizontal_rule_adjust + \fi +% +% Same procedure for the left border skip and rule width except that +% extraction is necessary only in the presense of a column merger due +% to the execution of an every column and a get at the start of \cell. +% + \ifnum \merge_columns>0 + \begingroup + \advance \column_number \by -\merge_columns + \everycolumn + \get_column_number_data + \xdef\globaltemp{\leftrulewidth=\the\leftrulewidth\relax + \leftborderskip=\the\leftborderskip\relax + }% + \aftergroup \globaltemp + \endgroup + \ifdim \leftrulewidth>\zeropt + \advance \leftrulewidth \by \vertical_rule_adjust + \fi + \fi +% +% Typeset the entry into temp box horizontally first, trying kerns +% before glue in case the cell does not require horizontal stretching +% and taking advantage of an empty cell by doing nothing, if such is +% the case. +% + \setbox\temp_box=\hbox{#1}% + \ifdim\wd\temp_box>\zeropt + \setbox\temp_box=\hbox \bgroup + \kern \leftborderskip + \box\temp_box + \egroup + \temp_dimen=\wd\temp_box + \advance\temp_dimen \by \rightborderskip + \wd\temp_box=\temp_dimen +% + \ifdim\wd\temp_box=\merge_width +% +% then the kerns can be used instead of skips. +% + \else + \setbox\temp_box=\hbox \to \merge_width \bgroup + \hskip \leftborderskip + #1% + \hskip \rightborderskip + \egroup + \fi +% +% Hide the width of temp box and put a phantom into it the hard way. +% + \wd\temp_box=\zeropt + \setbox\scratch_box=\hbox{#1)}% + \ifdim \dp\scratch_box>\dp\temp_box + \dp\temp_box=\dp\scratch_box + \fi + \ifdim \ht\scratch_box>\ht\temp_box + \ht\temp_box=\ht\scratch_box + \fi +% + \temp_dimen=\ht\temp_box + \advance \temp_dimen \by \dp\temp_box + \advance \temp_dimen \by \bottomborderskip + \advance \temp_dimen \by \topborderskip + \ifdim \temp_dimen=\merge_height +% +% then the entry can be positioned vertically via a raise statement. +% The total height of the material output should be equal to the row +% height, thus acting as a strut. +% + \temp_dimen=\bottomborderskip + \advance \temp_dimen \by \dp\temp_box + \scratch_dimen=\rowheight + \advance\scratch_dimen by -\temp_dimen + \ht\temp_box=\scratch_dimen + \raise \temp_dimen \box\temp_box + \else % have to do it via a box + \setbox\temp_box=\vbox \to \rowheight \bgroup +% +% Subtracting merge height - row height from top border skip allows +% the cell to stick up into the next row by an appropriate amount. +% + \advance \topborderskip \by \rowheight + \advance \topborderskip \by -\merge_height + \vskip \topborderskip + \box\temp_box + \vskip \bottomborderskip + \egroup + \box\temp_box + \fi + \fi +% +% All of the rules are typeset with an overlap of at least pixel width +% which insures that there will be no gaps. +% +% Typeset the top rule into an hbox and use a raise statement to put +% it into position. +% + \ifdim \toprulewidth>\zeropt + \setbox\temp_box=\hbox \bgroup + \temp_dimen=\merge_width + \ifdim \half\leftrulewidth<\pixelwidth + \kern -\pixelwidth + \else + \kern -\half\leftrulewidth + \fi + \advance \temp_dimen \by -\lastkern + \vrule \height \half\toprulewidth + \depth \half\toprulewidth + \width \temp_dimen + \ifdim \half\rightrulewidth<\pixelwidth + \temp_dimen=\pixelwidth + \else + \temp_dimen=\half\rightrulewidth + \fi + \kern -\temp_dimen + \vrule \height \half\toprulewidth + \depth \half\toprulewidth + \width 2\temp_dimen + \egroup + \wd\temp_box=\zeropt + \temp_dimen=\rowheight + \advance\temp_dimen \by -\merge_height + \ht\temp_box=\temp_dimen + \dp\temp_box=\merge_height + \raise \merge_height \box\temp_box + \fi +% +% Output the bottom rule using the same methods. +% + \ifdim \bottomrulewidth>\zeropt + \setbox\temp_box=\hbox \bgroup + \temp_dimen=\merge_width + \ifdim \half\leftrulewidth<\pixelwidth + \kern -\pixelwidth + \else + \kern -\half\leftrulewidth + \fi + \advance \temp_dimen \by -\lastkern + \vrule \height \half\bottomrulewidth + \depth \half\bottomrulewidth + \width \temp_dimen + \ifdim \half\rightrulewidth<\pixelwidth + \temp_dimen=\pixelwidth + \else + \temp_dimen=\half\rightrulewidth + \fi + \kern -\temp_dimen + \vrule \height \half\bottomrulewidth + \depth \half\bottomrulewidth + \width 2\temp_dimen + \egroup + \wd\temp_box=\zeropt + \dp\temp_box=\zeropt + \ht\temp_box=\rowheight + \box\temp_box + \fi +% +% Test to see if the left inclusive-or right rule width is non-zero. +% + \ifdim \leftrulewidth=\zeropt + \temp_dimen=\rightrulewidth + \else + \temp_dimen=\leftrulewidth + \fi + \ifdim \temp_dimen>\zeropt + \setbox\temp_box=\hbox \bgroup + \temp_dimen=\merge_height + \advance \merge_height \by \pixelwidth + \ifdim \leftrulewidth>\zeropt + \kern -\half\leftrulewidth + \vrule \height \temp_dimen + \depth \pixelwidth + \width \leftrulewidth + \fi + \ifdim \rightrulewidth>\zeropt + \scratch_dimen=\merge_width + \advance \scratch_dimen \by -\half\leftrulewidth + \advance \scratch_dimen \by -\half\rightrulewidth + \kern \scratch_dimen + \vrule \height \temp_dimen + \depth \pixelwidth + \width \rightrulewidth + \fi + \egroup + \wd\temp_box=\merge_width + \ht\temp_box=\rowheight + \dp\temp_box=\zeropt + \box\temp_box + \else + \move_right_via_lastkern \merge_width + \fi +% +% Cancel the mergers. +% + \merge_width=\zeropt + \merge_columns=0 + \ifnum \merge_rows>0 + \add_column_number_data + {\merge_rows=0\relax\merge_height=\zeropt\relax}% + \fi + \ignorespaces + }% +% +% No surprises here. +% +\def\mergeright {\relax + \advance \column_number \by 1 + \everycolumn + \get_column_number_data + \advance \columnwidth \by \expansion + \advance \merge_width \by \columnwidth + \advance \merge_columns \by 1 + \ifnum \merge_rows>0 + \add_column_number_data + {\merge_rows=0\relax\merge_height=\zeropt\relax}% + \fi + }% +% +% No surprises here. +% +\def\mergedown {\relax + \advance \column_number \by 1 + \everycolumn + \get_column_number_data + \advance \columnwidth \by \expansion + \advance \merge_width \by \columnwidth + \move_right_via_lastkern \merge_width + \merge_width=\zeropt + \merge_columns=0 + \advance \merge_height \by \rowheight + \let\info=\relax + \edef\temp{\the\column_number>\info + {\merge_height=\the\merge_height\relax + \advance\merge_rows \by 1\relax}}% + \let\info=\column_info + \x_after \add_data \temp + \rowpenalty=10000 % do not allow a break over a row merge. + }% +% +\catcode`_=8 % Back to normal. +% +\def\noalign#1{\relax + \vadjust{#1}% + \ignorespaces + }% +% +\endinput |