返回使用 bTable 绘制表格btable 和 tabulate 相比对称语句的特征更为明显,行,列,表的开始结束都由start和end语句包围。同时可以对整行,整列的表内容进行样式更改。
bTable 支持的参数主要来自于\setupTABLE语句。
最基本的,不带样式的 bTable 创建方法如下:
\bTABLE
\bTR \bTD 年份 \eTD \bTD 产品 \eTD \bTD 销量 \eTD \eTR
\bTR \bTD 2021 \eTD \bTD 柚子 \eTD \bTD 4500 \eTD \eTR
\bTR \bTD 2022 \eTD \bTD 水蜜桃 \eTD \bTD 480 \eTD \eTR
\bTR \bTD 2023 \eTD \bTD 柠檬 \eTD \bTD 50 \eTD \eTR
\bTR \bTD 2024 \eTD \bTD 蓝莓 \eTD \bTD 930 \eTD \eTR
\eTABLE
btable 的所有命令都是成对出现, b 开始,e 结束。
bTABLE开始一个表格,eTABLE结束表格。
bTR开始新的一行,eTR结束当前行。
bTD开始新的单元格或一列,eTD结束单元格或当前列。
颜色样式
列的样式更改
对于颜色和样式的改变,我们可以借助\setupTABLE来对不同列设置想要的效果。
设置第 1 列居中显示,宽度 5 cm,背景色灰色。
设置第 2 列居中显示,宽度 2 cm,文字绿色。
设置第 3 列居中显示,宽度 5 cm,背景色灰色,根据小数点对齐。
\setupTABLE[column][1][align=center,width=5em,background=color,backgroundcolor=gray]
\setupTABLE[column][2][align=center,width=2cm,foregroundcolor=green]
\setupTABLE[column][3][align=center,background=color,backgroundcolor=gray,alignmentcharacter={.},aligncharacter=yes]
\bTABLE
……
\eTABLE
行的样式更改
可以设置指定数字的行或者奇数行,偶数行。
\setupTABLE[row][odd][background=color,backgroundcolor=gray]
\setupTABLE[row][even][foregroundcolor=green]
奇数行灰色背景,偶数行绿色文字。
行间距和列间距
行间距通过spaceinbetween设置,列间距通过columndistance设置。
\bTABLE[spaceinbetween=3pt]
……
\eTABLE
\bTABLE[columndistance=3pt]
……
\eTABLE
单元格的合并
单元格可以占据多列或者多行的位置,来做出合并单元格的样式。比如\bTD[nr=2], 使这个单元格占据 2 行,也就是合并当前单元格2行为1行(如下图 “祥泰隆”和“欧德亚”的效果)。\bTD[nc=3], 使单元格占据3列,也就是合并当前单元格3列为1列(如下图“总计”的效果)。同时对单个TR(行), TD(单元格) 我们可以单独设置样式。
\bTABLE
\bTR \bTD 超市 \eTD \bTD 产品 \eTD \bTD 销量 \eTD \eTR
\bTR \bTD[nr=2]祥泰隆 \eTD \bTD 柚子 \eTD \bTD 4500 \eTD \eTR
\bTR \bTD 水蜜桃 \eTD \bTD 480 \eTD \eTR
\bTR \bTD[nr=2] 欧德亚 \eTD \bTD 柠檬 \eTD \bTD 50 \eTD \eTR
\bTR \bTD 蓝莓 \eTD \bTD 930 \eTD \eTR
\bTR[background=color,backgroundcolor=darkgray,foregroundcolor=white] \bTD[nc=3,align=flushright] 总计:5960 \eTD \eTR
\eTABLE
对角线表头
对角线的制作通过设置单元格背景为对角线完成,其中对角线通过metapost画出。
\startuseMPgraphic{DiagonalRule}
rulethickness := \frameddimension{rulethickness};
drawoptions(
withpen pencircle scaled rulethickness
withcolor \MPcolor{\framedparameter{framecolor}});
pair leftcorner, rightcorner;
leftcorner := (rulethickness, \overlayheight-rulethickness);
rightcorner := (\overlaywidth-rulethickness, rulethickness);
draw leftcorner -- rightcorner;
\stopuseMPgraphic
\defineoverlay [DiagonalRule] [\useMPgraphic{DiagonalRule}]
\define[2]\DiagonalLabel{
\setuptabulate [after={\blank[\frameddimension{offset}]}]
\starttabulate [|p|r|]
\NC \NC #2 \NC\NR
\NC #1 \NC \NC\NR
\stoptabulate
}
\bTABLEhead
\bTR
\bTH[width=3cm,background=DiagonalRule] \DiagonalLabel{超市}{产品} \eTH
\bTH 柚子 \eTH
\bTH 水蜜桃 \eTH
\eTR
\eTABLEhead
设置表头重复显示
首先在 bTABLE 内设置split = repeat,让表格在分页拆分时重复表头。然后通过TABLEhead定义表头和表头样式,bTABLEnext 设置在续页上的表头和表头样式。
\bTABLE[split=repeat]
\bTABLEhead
\bTR[background=color,backgroundcolor=gray,foregroundcolor=black]
\bTH 年份 \eTH
\bTH 产品 \eTH
\bTH 销量 \eTH
\eTR
\eTABLEhead
\bTABLEnext
\bTR [background=color,backgroundcolor=gray,foregroundcolor=black]
\bTH 年份(续) \eTH
\bTH 产品(续) \eTH
\bTH 销量(续) \eTH
\eTR
\eTABLEnext