背景
生成的文档包含带标题和不带标题的表格。带标题的表格没有问题,例如:
问题
当没有标题时,生成的文档不包含表格的水平线:
所需的输出在表格主体开始之前有一个边框:
代码
生成的表代码:
\startplacetable[location=none]
\startxtable
\startxtablebody[body]
\startxrow
\startxcell[align=right,width={0.50\textwidth}] {\bf ID} \stopxcell
\startxcell[align=right,width={0.50\textwidth}] FSA-1 \stopxcell
\stopxrow
\stopxtable
\stopplacetable
样式代码:
\setupxtable[
frame=off,
option={stretch,width},
split=yes,
header=repeat,
]
\setupxtable[head][topframe=on,bottomframe=on]
\setupxtable[foot][bottomframe=on]
添加代码来仅设置主体样式会导致所有行都有边框。例如:
\setupxtable[body][topframe=on,bottomframe=off]
生成:
并出现以下错误信息:
setup > error in line 8, namespace 'xtable', key 'body'
问题
如何将 xtable 主体的第一行(且只有第一行)设置为具有边框(以便产生所需的输出)?
请注意,必须禁用标题行的底部边框以避免重复行。还请注意,由于代码是生成的,因此无法修改每个 xtable 实例。理想情况下,可以使用以下方法添加边框setupxtable
. 该领域的文献资料不足。
环境
- ConTeXt MKIV 2018.01.04 17:37
答案1
目前还没有自动化的高级方法来做到这一点,正如 ConTeXt 邮件列表中所讨论的那样(https://mailman.ntg.nl/pipermail/ntg-context/2018/090527.html)。但是,您可以通过破解方式进入\startxrow
宏并在第一行(索引 0)处分支。
你的问题中的表格不完整,我怀疑它不是通过 pandoc 生成的。生成的文档没有排版。我用一些虚假的内容完成了表格。
\unprotect
\unexpanded\def\startxrow
{\begingroup
\ifnum\currentxtablerow=0
\setupcurrentxtable[topframe=on]
\fi
\doifelsenextoptionalcs\tabl_x_start_row_yes\tabl_x_start_row_nop}
\protect
\setupxtable[
frame=off,
option={stretch,width},
split=yes,
header=repeat,
]
\setupxtable[head][topframe=on,bottomframe=on]
\setupxtable[body][]
\setupxtable[foot][bottomframe=on]
\starttext
\startplacetable[location=none]
\startxtable
\startxtablebody[body]
\startxrow
\startxcell[align=right,width={0.50\textwidth}] {\bf ID} \stopxcell
\startxcell[align=right,width={0.50\textwidth}] FSA-1 \stopxcell
\stopxrow
\stopxtablebody
\startxtablefoot[foot]
\startxrow
\startxcell[align=right,width={0.50\textwidth}] Description \stopxcell
\startxcell[align=right,width={0.50\textwidth}] ??? \stopxcell
\stopxrow
\stopxtablefoot
\stopxtable
\stopplacetable
\stoptext