背景

背景

背景

使用极端表设置斑马条纹。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偏离了几点。

OverlayBox Edges

配置代码:

\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,
]

相关内容