如何在AsciiDoctor中生成无条纹样式的表格?
我太懂你这种无奈了——想用AsciiDoctor做个无条纹的干净表格,结果现有的方法要么手动给单元格硬塞背景色,繁琐到崩溃,还锁死了颜色,换个主题就违和,关键是到PDF输出里直接失效,完全不通用。
先复盘下你现在的尝试:
你最初的表格代码是这样的:
[width="10%", cols="^", options="header"] |=== | header | one | two | three | four |===
为了去掉条纹,你改成了:
[width="10%", cols="^", options="header"] |=== | Header | one {set:cellbgcolor:white}| two | three | four |=== {set:cellbgcolor!}
确实,这个方法的弊端太明显:
- 手动指定每个单元格的背景色,表格行数多的话简直是重复劳动
- 硬编码
white,如果文档用了深色主题或者自定义背景色,表格会显得非常突兀 {set:cellbgcolor}是特定渲染器的语法,在AsciiDoctor PDF这类变体里完全不生效,兼容性极差
针对你提到的Issue #1365刚提出的情况,我给你几个更实用的临时替代方案:
方案一:CSS自定义(HTML输出首选)
如果你的主要输出格式是HTML,直接用CSS覆盖默认的条纹样式是最省心的方法。只需要写一段简单的CSS:
/* 移除所有表格的偶数行条纹背景 */ table tr:nth-child(even) { background-color: transparent; } /* 如果只想给特定表格生效,可以给表格加role属性后定向修改 */ table[role="no-stripes"] tr:nth-child(even) { background-color: transparent; }
然后在你的AsciiDoctor文档里通过:stylesheet:配置项引入这个CSS文件,或者直接把样式写在文档的头部。这样所有表格(或指定role的表格)都会自动去掉条纹,完全不用手动改单元格,而且能适配文档的主题色变化。
方案二:使用表格role属性(多格式兼容尝试)
有些AsciiDoctor的渲染器或扩展支持通过表格的role属性来识别特殊样式需求。你可以给表格加上role="no-stripes":
[width="10%", cols="^", options="header", role="no-stripes"] |=== | Header | one | two | three | four |===
如果是HTML输出,配合上面的CSS就能生效;部分支持这个属性的PDF渲染器也可能自动处理无条纹样式,比硬编码背景色的兼容性好很多。
方案三:跟踪Issue #1365的官方修复
既然这个Issue刚提出,你可以持续关注它的进展。官方后续很可能会推出原生的配置选项,比如在options里加no-stripes,像这样:
[width="10%", cols="^", options="header,no-stripes"] |=== | Header | one | two | three | four |===
这种原生支持的方式肯定是最完美的,不用依赖任何hack,而且能兼容所有AsciiDoctor变体。
总的来说,如果现阶段主要做HTML输出,方案一最靠谱;如果需要兼顾多种格式,先试试方案二,同时等官方的修复更新。
内容的提问来源于stack exchange,提问作者Tar

