| name | table-formatter |
| category | productivity |
| description | 终端 CLI 环境横平竖直的网格表格生成工具。全细线风格(┌┬┐│├┼┤└┴┘),每行有横线分隔,列之间有竖线贯穿。自动处理中文字符双倍宽度对齐。 |
| triggers | ["输出任何对比、清单、结构化的表格数据","用户提到表格不好看、不对齐、虚线","生成报告/方案中的表格部分"] |
终端表格格式化工具
风格规范(用户确认的最终版)
- 全细线风格:外框
┌─┬─┐,内线 ├─┼─┤,竖线 │
- 每行有横线分隔(网格表)
- 左右竖线对齐(中文字宽双倍计算)
- 单元格内容前后各空1个空格
核心函数
def dw(s):
"""计算终端显示宽度:中文=2,英文=1"""
w = 0
for c in s:
if '\u4e00' <= c <= '\u9fff' or '\u3000' <= c <= '\u303f' or '\uff00' <= c <= '\uffef':
w += 2
else:
w += 1
return w
def pc(s, tw):
"""填充单元格至目标显示宽度"""
c = f' {s} '
while dw(c) < tw:
c += ' '
return c
def mt(h, r):
"""
生成全细线网格表格。
┌──────┬──────────┬──────────────┐
│ 维度 │ SEO │ GEO │
├──────┼──────────┼──────────────┤
│ 目标 │ 上搜索首页│ 进AI第一句话 │
├──────┼──────────┼──────────────┤
│ 核心 │ 算法排名 │ 信任关联 │
└──────┴──────────┴──────────────┘
h: 表头列表
r: 数据行列表(每行也是一个列表)
"""
n = len(h)
cw = []
for i in range(n):
m = dw(f' {h[i]} ')
for row in r:
x = dw(f' {row[i]} ')
if x > m: m = x
cw.append(m)
top = '┌' + '┬'.join(['─' * w for w in cw]) + '┐'
sep = '├' + '┼'.join(['─' * w for w in cw]) + '┤'
bot = '└' + '┴'.join(['─' * w for w in cw]) + '┘'
L = [top]
L.append('│' + '│'.join([pc(h[i], cw[i]) for i in range(n)]) + '│')
L.append(sep)
for idx, row in enumerate(r):
L.append('│' + '│'.join([pc(str(row[i]), cw[i]) for i in range(n)]) + '│')
if idx < len(r) - 1:
L.append(sep)
L.append(bot)
return '\n'.join(L)
实际输出效果
┌──────────┬──────────────────────┬──────────────────────────────┐
│ 维度 │ SEO │ GEO │
├──────────┼──────────────────────┼──────────────────────────────┤
│ 目标 │ 上搜索结果首页 │ 进AI答案的第一句话 │
├──────────┼──────────────────────┼──────────────────────────────┤
│ 核心 │ 算法排名 │ 信任关联 │
├──────────┼──────────────────────┼──────────────────────────────┤
│ 内容 │ 关键词密度+外链 │ 证据链+结构化+可采纳 │
└──────────┴──────────────────────┴──────────────────────────────┘
注意事项
- 中文字宽:CJK统一表意文字(\u4e00-\u9fff)、CJK符号(\u3000-\u303f)、全角ASCII(\uff00-\uffef)按2宽度计算
- 禁止输出 markdown 表格:
| --- | --- | 这种格式绝对不要用
- 边生成边验证:每次先调 mt() 生成字符串,确认对齐无误后再贴到回复中
- 最佳列数:2~6列,超过6列终端可能折行
- 表头和数据行写法:数据行不要用
┃(厚竖线),统一用 │(细竖线)