背景
使用极端表设置斑马条纹。ConTeXt 表是通过 pandoc 转换 ASCII Markdown 表生成的。
最小示例
\starttext
\startplacetable[]
\startxtable
\startxtablehead[head]
\startxrow
\startxcell Item \stopxcell
\startxcell[align=left] Cost (\$) \stopxcell
\startxcell[align=left] Description \stopxcell
\stopxrow
\stopxtablehead
\startxtablebody[body]
\dorecurse{4}{
\startxrow
\startxcell Item \stopxcell
\startxcell[align=left] 100 \stopxcell
\startxcell[align=left] Cow text \stopxcell
\stopxrow
}
\stopxtablebody
\startxtablefoot[foot]
\startxrow
\startxcell {\bf Total} \stopxcell
\startxcell[align=left] {\bf 400} \stopxcell
\startxcell[align=left] \stopxcell
\stopxrow
\stopxtablefoot
\stopxtable
\stopplacetable
\stoptext
问题
ConTeXt 与其宏相当一致setup
,没有出现定义 a\setupxrow
或\setupxcell
。我曾预料到这样的事情:
\definecolor[lime][r=0.75, g=1, b=0]
\definecolor[transparentred][r=1,t=.5,a=1]
\setupxrow[odd][background=lime]
\setupxrow[even][background=transparentred]
这没有编译。
问题
如果不使用definextable
创建自定义 xtable 定义,您将如何应用斑马条纹以便其他每个非标题行都有彩色背景?
更新
看起来好像OverlayBox
偏离了几点。
配置代码:
\definecolor[ColourTertiaryLt][h=a6b6b8]
\setupfloat[table][default={here,split}]
\setupxtable[
frame=off,
split=yes,
header=repeat,
framecolor=ColourTertiary,
]
\setupxtable[head][
topframe=on,
bottomframe=on,
]
\setupxtable[body][]
\setupxtable[foot][
bottomframe=on,
]
\startuseMPgraphic {tablebackground}
fill OverlayBox withcolor \MPcolor{ColourTertiaryLt} ;
\stopuseMPgraphic
\defineoverlay[tablebackground][
\ifnum\currentxtablerow>1
\ifodd\currentxtablerow\else
\useMPgraphic{tablebackground}%
\fi
\fi
]
\setupxtable[background=tablebackground]
答案1
和自然桌这本来很容易,因为环境允许你设置不同的值甚至和奇怪的行。
\startsetups [tablebackground]
\setupTABLE [row] [odd] [background=color,backgroundcolor=gray]
\stopsetups
\starttext
\bTABLE[setups=tablebackground]
\dorecurse{9}{\bTR \expanded{\bTD Row \recurselevel \eTD} \eTR}
\eTABLE
\stoptext
另一方面,极端表不支持这种设置,您必须使用该overlay
机制为单元格创建自己的背景。
在覆盖设置中,您可以检查计数器的值\currentxtablerow
以应用不同的命令奇怪的和甚至行。
\startuseMPgraphic {tablebackground}
fill OverlayBox withcolor \MPcolor{gray} ;
\stopuseMPgraphic
\defineoverlay
[tablebackground]
[\ifodd\currentxtablerow
\useMPgraphic{tablebackground}%
\fi]
\starttext
\startxtable[background=tablebackground]
\dorecurse{9}{\startxrow \expanded{\startxcell Row \recurselevel \stopxcell} \stopxrow}
\stopxtable
\stoptext
跳过表头:
\defineoverlay
[tablebackground]
[\ifnum\currentxtablerow>1
\ifodd\currentxtablerow\useMPgraphic{tablebackground}\fi
\fi]
要对偶数行应用底纹:
\startuseMPgraphic {tablebackground}
fill OverlayBox withcolor \MPcolor{gray} ;
\stopuseMPgraphic
\defineoverlay
[tablebackground]
[\ifnum\currentxtablerow>1
\ifodd\currentxtablerow \else
\useMPgraphic{tablebackground}%
\fi
\fi]
\setupxtable[background=tablebackground]
要将背景应用于文档中的所有表格,请使用:
\setupxtable[background=tablebackground]
答案2
另一种可能性是,基于沃尔夫冈的回答backgroundcolor
,就是定义一个宏,返回适合与选项一起使用的颜色setupxtable
。例如:
\definecolor[ColourTertiaryLt][h=a6b6b8]
\def\TableBackgroundColour{%
\ifnum\currentxtablerow>1
\ifodd\currentxtablerow\else
ColourTertiaryLt%
\fi
\fi
}
\setupxtable[
frame=off,
split=yes,
header=repeat,
option={stretch,width},
framecolor=ColourTertiaryDk,
]
\setupxtable[head][
topframe=on,
bottomframe=on,
]
\setupxtable[body][
background=color,
backgroundcolor=\TableBackgroundColour,
]
\setupxtable[foot][
bottomframe=on,
]
这避免陷入 MetaPost 并使用底层框架的背景颜色,该背景颜色将几乎完美地填充自身。
要包含页脚的斑马条纹,请将背景设置选项\setupxtable[body]
移到第一个\setupxtable
(然后\setupxtable[body]
可以完全删除):
\setupxtable[
frame=off,
split=yes,
header=repeat,
option={stretch,width},
framecolor=ColourTertiaryDk,
background=color,
backgroundcolor=\TableBackgroundColour,
]