diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/optex/base/table.opm')
-rw-r--r-- | Master/texmf-dist/tex/luatex/optex/base/table.opm | 526 |
1 files changed, 0 insertions, 526 deletions
diff --git a/Master/texmf-dist/tex/luatex/optex/base/table.opm b/Master/texmf-dist/tex/luatex/optex/base/table.opm deleted file mode 100644 index a4a6511958e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/table.opm +++ /dev/null @@ -1,526 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \table {Basic macros for OpTeX <2021-03-09>} % preloaded in format - - \_doc ----------------------------- - The result of the \`\table``{<declaration>}{<data>}` macro is inserted into - \`\_tablebox`. You can change default value if you want by - `\let\_tablebox=\vtop` or `\let\_tablebox=\relax`. - \_cod ----------------------------- - -\_let\_tablebox=\_vbox - - \_doc ----------------------------- - We save the `to<size>` or `pxto<size>` to `#1` and \`\_tableW` sets the - `to<size>` to the \`\_tablew` macro. - If `pxto<size>` is used then `\_tablew` is empty and `\_tmpdim` includes - given <size>. The `\_ifpxto` returns true in this case. - - The `\table` continues by reading `{<declaration>}` in the \^`\_tableA` macro. - Catcodes (for example the `|` character) have to be normal when reading - `\table` parameters. This is the reason why we use `\catcodetable` here. - \_cod ----------------------------- - -\_newifi \_ifpxto -\_def\_table#1#{\_tablebox\_bgroup \_tableW#1\_empty\_end - \_bgroup \_catcodetable\_optexcatcodes \_tableA} -\_def\_tableW#1#2\_end{\_pxtofalse - \_ifx#1\_empty \_def\_tablew{}\_else - \_ifx#1p \_def\_tablew{}\_tableWx#2\_end \_else \_def\_tablew{#1#2}\_fi\_fi} -\_def\_tableWx xto#1\_end{\_tmpdim=#1\_relax \_pxtotrue} -\_public \table ; - - \_doc ----------------------------- - The \^`\tablinespace` is implemented by enlarging given \^`\tabstrut` - by desired dimension (height and depth too) and by setting - `\_lineskip=-2\_tablinespace`. Normal table rows (where no `\hrule` is - between them) have normal baseline distance.\nl - The \`\_tableA``{<declaration>}` macro scans the `<declaration>` by - `\_scantabdata#1\_relax` and continues by processing `{<data>}` by \^`\_tableB`. - The trick `\_tmptoks={<data>}\_edef\_tmpb{\_the\_tmptoks}` - is used here in order to keep the hash marks in the <data> unchanged. - \_cod ----------------------------- - -\_def\_tableA#1{\_egroup - \_the\_thistable \_global\_thistable={}% - \_ea\_ifx\_ea^\_the\_tabstrut^\_setbox\_tstrutbox=\_null - \_else \_setbox\_tstrutbox=\_hbox{\_the\_tabstrut}% - \_setbox\_tstrutbox=\_hbox{\_vrule width\_zo - height\_dimexpr\_ht\_tstrutbox+\_tablinespace - depth\_dimexpr\_dp\_tstrutbox+\_tablinespace}% - \_offinterlineskip - \_lineskip=-2\_tablinespace - \_fi - \_colnum=0 \_let\_addtabitem=\_addtabitemx - \_def\_tmpa{}\_tabdata={\_colnum1\_relax}\_scantabdata#1\_relax - \_the\_everytable \_bgroup \_catcode`\#=12 \_tableB -} - - \_doc ----------------------------- - The \`\_tableB` saves `<data>` to `\_tmpb` - and does four \^`\replstring`s to prefix each macro \^`\crl` (etc.) - by `\_crcr`. The reason is: we want to use macros that scan its parameter - to the delimiter written in the right part of the table item declaration. - See \^`\fS` for example. The `\crcr` cannot be hidden in another macro in this case. - - The `\tabskip` value is saved for places between columns - into the \`\_tabskipmid` macro. Then it runs - \begtt \catcode`\<=13 - \tabskip=\tabskipl \halign{<converted declaration>\tabskip=\tabskipr \cr <data>\crcr} - \endtt - This sets the desired boundary values of `\tabskip`. The - \"between-columns" values are set as `\tabskip=`\^`\_tabskipmid` in the - `<converted declaration>` immediately after each column declarator. - - If `pxto` keyword was used, then we set the virtual unit \^`\tsize` to - `\hsize` first. Then the first attempt of the table is created in box 0. - Then the \^`\tsize` is re-calculated using `\wd0` and the real table is - printed by `\halign` in the second pass. - - If no `pxto` keyword was used, then we print the table using `\halign` - directly. The \^`\_tablew` macro is nonempty if the `to` keyword was used. - - Because the color selector with `\aftergroup` can be used inside the - table item, we must create the second real group for each table item. - This is reason why we start `<converted declaration>` by `\bgroup` and we - end it by `\egroup` in the \`\_tableC` macro. Each `&` character - is stored as `\egroup&\bgroup` in `<converted declaration>`. The - `\halign\_tablew\_tableC` really does: - \begtt \catcode`\<=13 - \halign\_tablew{\bgroup<converted declaration>\egroup\tabskip=\tabskipr \cr<data>\crcr} - \endtt - \relax - The <data> are re-tokenized by `\_scantextokens` in order to be more - robust to catcode changing inside the <data>. But inline verbatim cannot - work in special cases here like \code{`\{`} for example. - \_cod ----------------------------- - -\_long\_def\_tableB #1{\_egroup \_def\_tmpb{#1}% - \_replstring\_tmpb{\crl}{\_crcr\crl}\_replstring\_tmpb{\crll}{\_crcr\crll}% - \_replstring\_tmpb{\crli}{\_crcr\crli}\_replstring\_tmpb{\crlli}{\_crcr\crlli}% - \_replstring\_tmpb{\crlp}{\_crcr\crlp}% - \_edef\_tabskipmid{\_the\_tabskip}\_tabskip=\_tabskipl - \_ifpxto - \_tsize=\_hsize \_setbox0 = \_vbox{\_tablepxpreset \_halign \_tableC}% - \_tsize=\_dimexpr\_hsize-(\_wd0-\_tmpdim)\_relax - \_setbox0=\_null \_halign \_tableC - \_else - \_halign\_tablew \_tableC - \_fi \_egroup -} -\_def\_tableC{\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_tabskip=\_tabskipr\_cr - \_scantextokens\_ea{\_tmpb\_crcr}}} - -\_def\_tablepxpreset{} % can be used to de-activate references to .ref file -\_newbox\_tstrutbox % strut used in table rows -\_newtoks\_tabdata % the \halign declaration line - - \_doc ----------------------------- - The \`\_scantabdata` macro converts `\table`'s `<declaration>` to - `\halign` `<converted declaration>`. - The result is stored into \`\_tabdata` tokens list. - For example, the - following result is generated when `<declaration>=|cr||cl|`. - \begtt - tabdata: \_vrule\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA - &\_the\_tabiteml\_hfil#\_unsskip\_the\_tabitemr - \_vrule\_kern\_vvkern\_vrule\_tabstrutA - &\_the\_tabiteml\_hfil#\_unsskip\_hfil\_the\_tabitemr\_tabstrutA - &\_the\_tabiteml#\_unsskip\_hfil\_the\_tabitemr\_vrule\_tabstrutA - ddlinedata: &\_dditem &\_dditem\_vvitem &\_dditem &\_dditem - \endtt - The second result in the \`\_ddlinedata` macro is a template of one row of the table - used by \^`\crli` macro. - \_cod ----------------------------- - -\_def\_scantabdata#1{\_let\_next=\_scantabdata - \_ifx\_relax#1\_let\_next=\_relax - \_else\_ifx|#1\_addtabvrule - \_else\_ifx(#1\_def\_next{\_scantabdataE}% - \_else\_ifx:#1\_def\_next{\_scantabdataF}% - \_else\_isinlist{123456789}#1\_iftrue \_def\_next{\_scantabdataC#1}% - \_else \_ea\_ifx\_csname _tabdeclare#1\_endcsname \_relax - \_ea\_ifx\_csname _paramtabdeclare#1\_endcsname \_relax - \_opwarning{tab-declarator "#1" unknown, ignored}% - \_else - \_def\_next{\_ea\_scantabdataB\_csname _paramtabdeclare#1\_endcsname}\_fi - \_else \_def\_next{\_ea\_scantabdataA\_csname _tabdeclare#1\_endcsname}% - \_fi\_fi\_fi\_fi\_fi\_fi \_next -} -\_def\_scantabdataA#1{\_addtabitem - \_ea\_addtabdata\_ea{#1\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} -\_def\_scantabdataB#1#2{\_addtabitem - \_ea\_addtabdata\_ea{#1{#2}\_tabstrutA \_tabskip\_tabskipmid\_relax}\_scantabdata} -\_def\_scantabdataC {\_def\_tmpb{}\_afterassignment\_scantabdataD \_tmpnum=} -\_def\_scantabdataD#1{\_loop \_ifnum\_tmpnum>0 \_advance\_tmpnum by-1 \_addto\_tmpb{#1}\_repeat - \_ea\_scantabdata\_tmpb} -\_def\_scantabdataE#1){\_addtabdata{#1}\_scantabdata} -\_def\_scantabdataF {\_addtabitem\_def\_addtabitem{\_let\_addtabitem=\_addtabitemx}\_scantabdata} - - \_doc ----------------------------- - The \`\_addtabitemx` adds the boundary code (used between columns) - to the <converted declaration>. This code is - `\egroup &\bgroup \colnum=<value>\relax`. You can get the current number of - column from the \`\colnum` register, but you cannot write - `\the\colnum` as the first object in a <data> item because `\halign` - first expands the front of the item and the left part of the declaration - is processed after this. Use `\relax\the\colnum` instead. Or you can - write: - \begtt - \def\showcolnum{\ea\def\ea\totcolnum\ea{\the\colnum}\the\colnum/\totcolnum} - \table{ccc}{\showcolnum & \showcolnum & \showcolnum} - \endtt - This example prints 1/3 \ 2/3 \ 3/3, because the value of the `\colnum` is - equal to the total number of columns before left part of the column declaration - is processed. - \_cod ----------------------------- - -\_newcount\_colnum % number of current column in the table -\_public \colnum ; - -\_def\_addtabitemx{\_ifnum\_colnum>0 - \_addtabdata{\_egroup &\_bgroup}\_addto\_ddlinedata{&\_dditem}\_fi - \_advance\_colnum by1 \_let\_tmpa=\_relax - \_ifnum\_colnum>1 \_ea\_addtabdata\_ea{\_ea\_colnum\_the\_colnum\_relax}\_fi} -\_def\_addtabdata#1{\_tabdata\_ea{\_the\_tabdata#1}} - - \_doc ----------------------------- - This code converts `||` or `|` from `\table` <declaration> to the <converted declaration>. - \_cod ----------------------------- - -\_def\_addtabvrule{% - \_ifx\_tmpa\_vrule \_addtabdata{\_kern\_vvkern}% - \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitem}\_else\_addto\_ddlinedata{\_vvitem}\_fi - \_else \_ifnum\_colnum=0 \_addto\_vvleft{\_vvitemA}\_else\_addto\_ddlinedata{\_vvitemA}\_fi\_fi - \_let\_tmpa=\_vrule \_addtabdata{\_vrule}% -} -\_def\_tabstrutA{\_copy\_tstrutbox} -\_def\_vvleft{} -\_def\_ddlinedata{} - - \_doc ----------------------------- - The default \"declaration letters" `c`, `l`, `r` and `p` are declared - by setting \`\_tabdeclarec`, \`\_tabdeclarel`, \`\_tabdeclarer` and - \`\_paramtabdeclarep` macros. In general, define - `\def\_tabdeclare<letter>{...}` for a non-parametric - letter and `\def\_paramtabdeclare<letter>{...}` for a letter with a parameter. - The double hash `##` must be in the definition, it is replaced by a real table item data. - You can declare more such \"declaration letters" if you want. - \_cod ----------------------------- - -\_def\_tabdeclarec{\_the\_tabiteml\_hfil##\_unsskip\_hfil\_the\_tabitemr} -\_def\_tabdeclarel{\_the\_tabiteml\_relax##\_unsskip\_hfil\_the\_tabitemr} -\_def\_tabdeclarer{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr} -\_def\_paramtabdeclarep#1{\_the\_tabiteml - \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip - \_lineskiplimit=\_zo \_noindent##\_unsskip - \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi}\_the\_tabitemr} - - \_doc ----------------------------- - Users put optional spaces around the table item typically, i.e.\ they write - `& text &` instead `&text&`. The left space is ignored by the internal \TeX/ algorithm but - the right space must be removed by macros. This is a reason why we recommend to - use \`\_unsskip` after each `##` in your definition of \"declaration letters". - This macro isn't only the primitive `\unskip` because we allow usage of plain \TeX/ - `\hideskip` macro: `&\hideskip text\hideskip&`. - \_cod ----------------------------- - -\_def\_unsskip{\_ifmmode\_else\_ifdim\_lastskip>\_zo \_unskip\_fi\_fi} - - \_doc ----------------------------- - The \`\fL`, \`\fR`, \`\fC` and \`\fX` macros only do special parameters settings - for paragraph building algorithm. The \`\fS` prints the paragraph into - box 0 first, measures the number of lines by the `\prevgraf` primitive - and use (or don't use) `\hfil` (for centering) before the first line. - \_cod ----------------------------- - -\_let\_fL=\_raggedright -\_def\_fR{\_leftskip=0pt plus 1fill \_relax} -\_def\_fC{\_leftskip=0pt plus1fill \_rightskip=0pt plus 1fill \_relax} -\_def\_fX{\_leftskip=0pt plus1fil \_rightskip=0pt plus-1fil \_parfillskip=0pt plus2fil \_relax} -\_long\_def\_fS #1\_unsskip{\_noindent \_setbox0 =\_vbox{\_noindent #1\_endgraf \_ea}% - \_ifnum\_prevgraf=1 \_hfil \_fi #1\_unsskip -} -\_public \fL \fR \fC \fX \fS ; - - \_doc ----------------------------- - The family of `\_cr*` macros - \`\crl`, \`\crll`, \`\crli`, \`\crlli`, \`\crlp` and - \`\tskip` `<dimen>` is implemented here. - The \`\_zerotabrule` is used to suppress the negative `\lineskip` - declared by \^`\tablinespace`. - \_cod ----------------------------- - -\_def\_crl{\_crcr\_noalign{\_hrule}} -\_def\_crll{\_crcr\_noalign{\_hrule\_kern\_hhkern\_hrule}} -\_def\_zerotabrule {\_noalign{\_hrule height\_zo width\_zo depth\_zo}} - -\_def\_crli{\_crcr \_zerotabrule \_omit - \_gdef\_dditem{\_omit\_tablinefil}\_gdef\_vvitem{\_kern\_vvkern\_vrule}\_gdef\_vvitemA{\_vrule}% - \_vvleft\_tablinefil\_ddlinedata\_crcr \_zerotabrule} -\_def\_crlli{\_crli\_noalign{\_kern\_hhkern}\_crli} -\_def\_tablinefil{\_leaders\_hrule\_hfil} - -\_def\_crlp#1{\_crcr \_zerotabrule \_noalign{\_kern-\_drulewidth}% - \_omit \_xdef\_crlplist{#1}\_xdef\_crlplist{,\_ea}\_ea\_crlpA\_crlplist,\_end,% - \_global\_tmpnum=0 \_gdef\_dditem{\_omit\_crlpD}% - \_gdef\_vvitem{\_kern\_vvkern\_kern\_drulewidth}\_gdef\_vvitemA{\_kern\_drulewidth}% - \_vvleft\_crlpD\_ddlinedata \_global\_tmpnum=0 \_crcr \_zerotabrule} -\_def\_crlpA#1,{\_ifx\_end#1\_else \_crlpB#1-\_end,\_ea\_crlpA\_fi} -\_def\_crlpB#1#2-#3,{\_ifx\_end#3\_xdef\_crlplist{\_crlplist#1#2,}\_else\_crlpC#1#2-#3,\_fi} -\_def\_crlpC#1-#2-#3,{\_tmpnum=#1\_relax - \_loop \_xdef\_crlplist{\_crlplist\_the\_tmpnum,}\_ifnum\_tmpnum<#2\_advance\_tmpnum by1 \_repeat} -\_def\_crlpD{\_incr\_tmpnum \_edef\_tmpa{\_noexpand\_isinlist\_noexpand\_crlplist{,\_the\_tmpnum,}}% - \_tmpa\_iftrue \_kern-\_drulewidth \_tablinefil \_kern-\_drulewidth\_else\_hfil \_fi} - -\_def\_tskip{\_afterassignment\_tskipA \_tmpdim} -\_def\_tskipA{\_gdef\_dditem{}\_gdef\_vvitem{}\_gdef\_vvitemA{}\_gdef\_tabstrutA{}% - \_vbox to\_tmpdim{}\_ddlinedata \_crcr - \_zerotabrule \_noalign{\_gdef\_tabstrutA{\_copy\_tstrutbox}}} - -\_public \crl \crll \crli \crlli \crlp \tskip ; - - \_doc ----------------------------- - The \`\mspan``{<number>}[<declaration>]{<text>}` macro generates similar `\omit\span\omit\span` - sequence as plain \TeX/ macro `\multispan`. Moreover, it uses \^`\_scantabdata` to - convert `<declaration>` from `\table` syntax to `\halign` syntax. - \_cod ----------------------------- - -\_def\_mspan{\_omit \_afterassignment\_mspanA \_mscount=} -\_def\_mspanA[#1]#2{\_loop \_ifnum\_mscount>1 \_cs{_span}\_omit \_advance\_mscount-1 \_repeat - \_count1=\_colnum \_colnum=0 \_def\_tmpa{}\_tabdata={}\_scantabdata#1\_relax - \_colnum=\_count1 \_setbox0=\_vbox{\_halign\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_cr#2\_cr}% - \_global\_setbox8=\_lastbox}% - \_setbox0=\_hbox{\_unhbox8 \_unskip \_global\_setbox8=\_lastbox}% - \_unhbox8 \_ignorespaces} -\_public \mspan ; - - \_doc ----------------------------- - The \`\vspan``<number>{<text>}` implementation is here. - We need to lower the box by - \begtt \catcode`\<=13 - (<number>-1)*(\ht+\dp of \tabstrut) / 2. - \endtt - The `#1` parameter must be a one-digit number. If you want to set more digits - then use braces. - \_cod ----------------------------- - -\_def\_vspan#1#2#{\_vspanA{#1#2}} -\_def\_vspanA#1#2{\_vtop to\_zo{\_hbox{\_lower \_dimexpr - #1\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax - -\_dimexpr(\_ht\_tstrutbox+\_dp\_tstrutbox)/2\_relax \_hbox{#2}}\_vss}} -\_public \vspan ; - - \_doc ----------------------------- - The parameters of primitive `\vrule` and `\hrule` keeps the rule \"last wins". - If we re-define `\hrule` to `\_orihrule height1pt` then each usage - of redefined `\hrule` uses `1pt` height if this parameter isn't - overwritten by another following `height` parameter. This principle is used for - settings another default rule thickness than 0.4\,pt by the macro - \`\rulewidth`. - \_cod ----------------------------- - -\_newdimen\_drulewidth \_drulewidth=0.4pt -\_let\_orihrule=\_hrule \_let\_orivrule=\_vrule -\_def\_rulewidth{\_afterassignment\_rulewidthA \_drulewidth} -\_def\_rulewidthA{\_edef\_hrule{\_orihrule height\_drulewidth}% - \_edef\_vrule{\_orivrule width\_drulewidth}% - \_let\_rulewidth=\_drulewidth - \_public \vrule \hrule \rulewidth;} -\_public \rulewidth ; - - \_doc ----------------------------- - The \`\frame``{<text>}` uses \"\code{\\vbox} in \code{\\vtop}" trick in order to keep the - baseline of the internal text at the same level as outer baseline. - User can write `\frame{abcxyz}` in normal paragraph line, for example - and gets the expected result: \frame{abcxyz}. - The internal margins are set by `\vvkern` and `\hhkern` parameters. - \_cod ----------------------------- - -\_long\_def\_frame#1{% - \_hbox{\_vrule\_vtop{\_vbox{\_hrule\_kern\_vvkern - \_hbox{\_kern\_hhkern\_relax#1\_kern\_hhkern}% - }\_kern\_vvkern\_hrule}\_vrule}} -\_public \frame ; - - \_doc ----------------------------- - \`\eqbox` and \`\eqboxsize` are implemented here. The widths of - all `\eqbox`es are saved to the `.ref` file in the format - \`\_Xeqbox``{<label>}{<size>}`. The `.ref` file is read again and maximum - box width for each <label> is saved to `\_eqb:<label>`. - \_cod ----------------------------- - -\_def\_Xeqbox#1#2{% - \_ifcsname _eqb:#1\_endcsname - \_ifdim #2>\_cs{_eqb:#1}\_relax \_sdef{_eqb:#1}{#2}\_fi - \_else \_sdef{_eqb:#1}{#2}\_fi -} -\_def\_eqbox #1[#2]#3{\_setbox0=\_hbox{{#3}}% - \_openref \_immediate\_wref \_Xeqbox{{#2}{\_the\_wd0}}% - \_ifcsname _eqb:#2\_endcsname - \_hbox to\_cs{_eqb:#2}{\_ifx r#1\_hfill\_fi\_hss\_unhbox0\_hss\_ifx l#1\_hfill\_fi}% - \_else \_box0 \_fi -} -\_def\_eqboxsize [#1]#2{\_trycs{_eqb:#1}{#2}} - -\public \eqbox \eqboxsize ; - -\_endcode % ------------------------------------- - -\secc[table.bound] The boundary declarator \code{:} - -The `<declaration>` part of `\table{<declaration>}{<data>}` includes -column declarators (letters) and other material: the `|` or `(<cmd>)`. -If the boundary declarator `:` is not used then -the boundaries of columns are just before each column declarator -with exception of the first one. -For example, the declaration `{|c||c(xx)(yy)c}` -should be written more exactly using the boundary declarator `:` -by `{|c||:c(xx)(yy):c}`. But you can set these boundaries to -other places using the boundary declarator~`:` explicitly, -for example `{|c:||c(xx):(yy)c}`. The boundary declarator `:` -can be used only once between each pair of column declarators. - -Each table item has its group. The `(<cmd>)` are parts of the given -table item (depending on the boundary declarator position). -If you want to apply a special setting for a given column, you can do this by -`(<setting>)` followed by column declarator. But if the column is not -first, you must use `:(<setting>)`. Example. We have three centered columns, -the second one have to be in bold font and the third one have to be in red: -`\table{c:(\bf)c:(\Red)c}{<data>}` - -\secc Usage of the \code{\\tabskip} primitive - -The value of `\tabskip` primitive is used between all columns of the table. -It is glue-type, so it can be stretchable or shrinkable, see next -section~\ref[table.w]. - -By default, `\tabskip` is 0\,pt. It means that only \^`\tabiteml`, -\^`\tabitemr` and `(<cmds>)` can generate visual spaces between columns. But they -are not real spaces between columns because they are in fact the part of -the total column width. - -The `\tabskip` value declared before the \^`\table` macro (or in -\^`\everytable` or in \^`\thistable`) is used between all columns in the table. -This value is equal to all spaces between columns. But you can set each such space -individually if you use `(\tabskip=<value>)` in the <declaration> immediately -before boundary character. The boundary character represents the column pair for -which the `\tabskip` has individual value. For example -`c(\tabskip=5pt):r` gives `\tabskip` value between `c` and `r` columns. -You need not use boundary character explicitly, so `c(\tabskip=5pt)r` gives -the same result. - -Space before the first column is given by the \^`\tabskipl` -and space after the last column is equal to \^`\tabskipr`. -Default values are 0\,pt. - -Use nonzero `\tabskip` only in special applications. If `\tabskip` is -nonzero then horizontal lines generated by \^`\crli`, \^`\crlli` and \^`\crlp` -have another behavior than you probably expected: they are interrupted in -each `\tabskip` space. - -\secc[table.w] Tables to given width - -There are two possibilities how to create tables to given width: - -\begitems -* `\table to<size>{<declaration>}{<data>}` uses stretchability or - shrinkability of all spaces between columns generated by `\tabskip` value and - eventually by \^`\tabskipl`, \^`\tabskipr` values. See example below. -* `\table pxto<size>{<declaration>}{<data>}` expands the columns declared - by `p{<size>}`, if the `<size>` is given by a virtual \^`\tsize` unit. - See the example below. -\enditems - -Example of `\table to<size>`: - -\begtt \catcode`\<=13 -\thistable{\tabskip=0pt plus1fil minus1fil} -\table to\hsize {lr}{<data>} -\endtt -% -This table has its width `\hsize`. The first column starts at the left boundary of -this table and it is justified left (to the boundary). The second column ends at -the right boundary of the table and it is justified right (to the boundary). -The space between them is stretchable and shrinkable to reach -the given width `\hsize`. - -\medskip -Example of `\table pxto<size>` (means \"{\bf p}aragraphs e{\bf x}panded {\bf to}"): - -\begtt -\table pxto\hsize {|c|p{\tsize}|}{\crl - aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz - dras ffg hksd kds d sdjds h sd jd dsjds ds cgha - sfgs dd fddzf dfhz xxz. \crl - bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz - ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } -\endtt - -\noindent\table pxto\hsize {|c|p{\tsize}|}{\crl - aaa & Ddkas jd dsjds ds cgha sfgs dd fddzf dfhz xxz - dras ffg hksd kds d sdjds h sd jd dsjds ds cgha - sfgs dd fddzf dfhz xxz. \crl - bb ddd ggg & Dsjds ds cgha sfgs dd fddzf dfhz xxz - ddkas jd dsjds ds cgha sfgs dd fddzf. \crl } -\medskip - -The first `c` column is variable width (it gets the width of the most wide item) -and the resting space to given `\hsize` is filled by the `p` column. - -You can declare more than one `p{<coefficient>\tsize}` columns in the table -when `pxto` keyword is used. The total sum of <coefficinets> must be exactly one. -For example, - -\begtt \catcode`\<=13 -\table pxto13cm {r p{.3\tsize} p{.5\tsize} p{.2\tsize} l}{<data>} -\endtt -% -This gives the ratio of widths of individual paragraphs in the table. - -\secc `\eqbox`: boxes with equal width across the whole document - -The \^`\eqbox` `[<label>]{<text>}` behaves like `\hbox{<text>}` in the first -run of \TeX. But the widths of all boxes with the same label are saved to -`.ref` file and the maximum box width for each label is calculated at the -beginning of the next \TeX/ run. Then \^`\eqbox`~`[<label>]{<text>}` behaves -like `\hbox to <dim:label> {\hss <text>\hss}`, where <dim:label> is -the maximum width of all boxes -labeled by the same `[<label>]`. The documentation of the \LaTeX/ package -`eqparbox` includes more information and tips. - -The \^`\eqboxsize` `[<label>]{<dimen>}` expands to <dim:label> if this value is known, -else it expands to the given <dimen>. - -The optional parameter `r` or `l` can be written before `[<label>]` (for example -`\eqbox r[label]{text}`) if you want to put the text to the right or to the -left side of the box width. - -Try the following example and watch what happens after first \TeX/ run and -after the second one. - -\begtt -\def\leftitem#1{\par - \noindent \hangindent=\eqboxsize[items]{2em}\hangafter=1 - \eqbox r[items]{#1 }\ignorespaces} - -\leftitem {\bf first} \lorem[1] -\leftitem {\bf second one} \lorem[2] -\leftitem {\bf final} \lorem[3] -\endtt - - -\_endinput - -2021-03-09 \_tablepxpreset introduced -2021-02-15 \_expandafter -> \_ea -2021-01-27 \_tableB: \long\def added, \vspan syntax improved -2020-05-26 \eqbox implemented -2020-05-20 \colnum implemented. - \vspan implemented. -2020-05-19 \fL, \fR ets defined. - \table to, \table pxto implemented. -2020-05-10 \bgroup &\egroup added to tabdata (in order to \aftergroup from colors) - boundary declarator : introduced - \_unsskip: \ifmmode added. -2020-04-10 second group for items in order to \localcolors |