% File: TeX Inputs Cell2.tex % Author: J E Pittman % Bitnet: JEPTeX@TAMVenus % Internet: JEPTeX@Venus.TAMU.EDU % Date: November 8, 1988 % % Prepare to scan the data, taking notes as to span sizes, row and % column dimensions, et cetera. % \catcode`_=11 % Used to protect local control sequence names. % % The span info tokens contain sets of entries of the form \process % {position}{number}{dimension}, where position is the terminal column % or row, number is the number of columns or rows leading into the % column or row, and dimension is the size of the information. % \declaretoks\column_span_info \column_span_info={}% \declaretoks\row_span_info \row_span_info={}% % \let\process=\relax % \declarecount\column_number \column_number=0 % % Create a column information entry and put the user's specifications % into it. % \def\column#1{\relax \advance\column_number \by 1 \last_column=\column_number \get_column_number_data \add_column_number_data {#1}% \ignorespaces }% % \declarecount\row_number \row_number=0 % % Same as \column. % \def\row#1{\relax \advance\row_number \by 1 \message{Scanning row \the\row_number.}% \last_row=\row_number \everyrow \get_row_number_data \add_row_number_data {#1}% \column_number=0 \ignorespaces }% % % \blank is used to generate a cell without a border or data. In this % context, all it does is absorb merges. % \def\blank{\relax \advance\column_number \by 1 \if\column_number>\last_column \advance\column_number \by -1 \column{}% \fi \everycolumn \get_column_number_data \ifnum\merge_rows>1 \add_column_number_data {\merge_rows=0\relax}% \fi \merge_columns=0 }% % % \cell is used to generate a normal, ruled cell. In this context, it % merely measures the cell and makes the appropriate notes. % \def\cell#1{\relax \advance\column_number \by 1 \if\column_number>\last_column \advance\column_number \by -1 \column{}% \fi \everycolumn \get_column_number_data % % Typeset the information into temp box. % \setbox\temp_box=\vbox \bgroup \begingroup \ifnum\merge_rows>0 \advance\row_number \by -\merge_rows \get_row_number_data \fi \vskip \topborderskip \endgroup \hbox \bgroup \begingroup \ifnum\merge_columns>0 \advance\column_number \by -\merge_columns \get_column_number_data \fi \hskip \leftborderskip \endgroup #1\vphantom{)}% \hskip \rightborderskip \egroup \vskip \bottomborderskip \egroup % % If it is a row merger, record it for later processing. % \ifnum \merge_rows>0 \edef\temp{\process {\the\merge_rows}{\the\ht\temp_box}{\the\row_number}% \the\row_span_info }% \x_after\row_span_info\x_after=\x_after{\temp}% % \message{\string\row_span_info=\the\row_span_info}% debug \add_column_number_data {\merge_rows=0\relax}% \else % % Not a merger, record the height if max. % \ifdim\ht\temp_box>\rowheight \let\info=\relax \edef\temp{\the\row_number>\info {\rowheight=\the\ht\temp_box\relax}}% \let\info=\row_info \x_after \add_data \temp % \message{\string\row_info=\the\row_info}% debug \rowheight=\ht\temp_box \fi \fi % % Same as above for column merger and width. % \ifnum \merge_columns>0 \edef\temp{\process {\the\merge_columns}{\the\wd\temp_box}{\the\column_number}% \the\column_span_info }% \x_after\column_span_info\x_after=\x_after{\temp}% % \message{\string\column_span_info=\the\column_span_info}% debug \merge_columns=0 \else \ifdim\wd\temp_box>\columnwidth \let\info=\relax \edef\temp{\the\column_number>\info {\columnwidth=\the\wd\temp_box\relax}}% \let\info=\column_info \x_after \add_data \temp % \message{\string\column_info=\the\column_info}% debug \fi \fi }% % % \mergeright specifies that the corresponding position is to be % merged with the cell to its right. % \def\mergeright{\relax \advance\column_number \by 1 \if\column_number>\last_column \advance\column_number \by -1 \column{}% \fi \everycolumn \get_column_number_data \advance\merge_columns \by 1 % % Cancel a row merge, if present. % \ifnum\merge_rows>1 \add_column_number_data {\merge_rows=0\relax}% \fi }% % % Same as \mergeright, except down. % \def\mergedown{\relax \advance\column_number \by 1 \if\column_number>\last_column \advance\column_number \by -1 \column{}% \fi \everycolumn \get_column_number_data \add_column_number_data {\advance\merge_rows \by 1\relax}% \merge_columns=0 }% % % The horizontal and vertical stretch macros allow the user to specify % an explicit stretch that will subsequently be processed like a span. % User-specified stretches are processed after span caused ones. The % parameters are the starting column/row, the ending column/row, and % the size of the stretch. % \def\horizontalstretch#1#2#3{\relax \temp_count=#2\relax \advance\temp_count \by -#1\relax \edef\temp{\the\column_span_info\process{\the\temp_count}{#3}{#2}}% \x_after \column_span_info\x_after=\x_after{\temp}% % \message{\string\column_span_info=\the\column_span_info}% debug \ignorespaces }% % \def\verticalstretch#1#2#3{\relax \temp_count=#2\relax \advance\temp_count \by -#1\relax \edef\temp{\the\row_span_info\process{\the\temp_count}{#3}{#2}}% \x_after \row_span_info\x_after=\x_after{\temp}% % \message{\string\row_span_info=\the\row_span_info}% debug \ignorespaces }% % \def\noalign#1{\ignorespaces}% don't do anything for the first pass % \catcode`_=8 % Return to normal. % \endinput