| name | fix-table-pipe |
| description | 修复 Markdown 表格渲染问题,包括:(1) Callout 块内表格前缺少空行;(2) LaTeX 行内公式中管道符 $|...|$ 被误解析为表格分隔符(含整行结构已崩坏的修复);(3) 检测孤立 $ 符号和奇数 $ 数等行结构异常。**自动触发**:每次写入包含表格的文件后,自动检查表格格式是否符合 Obsidian Markdown 规范。手动触发:当用户提到"表格格式错误"、"表格显示异常"、"表格渲染问题"、"Callout 表格"时使用此 skill。 |
自动触发机制
🔴 强制触发(自动检查)
每次使用 Write 或 Edit 工具修改包含表格的 .md 文件后,必须执行本技能进行格式检查!
检查时机:
- ✅ Write 工具写入包含表格的内容后
- ✅ Edit 工具修改了表格相关内容后
- ✅ 任何包含
| 列名 | 格式的文件操作后
工作流程:
[Write/Edit 完成]
↓
[检查文件内容是否包含表格]
↓
[是] → 执行表格规范检查 → 修复问题 → 写回文件
[否] → 跳过检查
修复表格渲染问题
常见问题类型
问题 1:Callout 内表格前缺少空行 ⚠️ 最常见
症状:表格显示为纯文本,或列错位、内容丢失
原因:Callout 内的表格必须前面有空行才能正确渲染
# ❌ 错误 - 表格不会渲染
> **标题**:
> | 列1 | 列2 |
> |-----|-----|
> | A | B |
# ✅ 正确 - 表格会正确渲染
> **标题**:
>
> | 列1 | 列2 |
> |-----|-----|
> | A | B |
修复方法:在表格前添加 > 空行
问题 2:LaTeX 管道符引起列冲突(⚠️ 最隐蔽)
场景 A:单元格内 $|...|$ 导致多出一列
症状:表格列数比预期多,内容被截断
原因:$|x|$ 中的 | 被误认为表格分隔符
# ❌ 错误
| $|f(x)|$ 的值 | 说明 |
# ✅ 正确
| $\vert f(x) \vert$ 的值 | 说明 |
修复方法:将 $|...|$ 转换为 $\vert...\vert$
场景 B:$...|...$ 导致整行结构崩坏 ⚠️ 2026-05-08 新增
症状:表格某行的单元格数量与表头不匹配,数据散落在错误列中,整行看起来像"被撕裂"了
原因:行内公式如 $y = |x|$ 中的 | 被误解析为表格列分隔符,把原本的一个单元格内容撕成多列
示例:
# ❌ 错误 - 行结构已崩坏
| $y = | x | $ | 偶 | $x \geq 0$ 递增 | - |
原始意图:| $y = |x|$ | 偶 | $x \geq 0$ 递增 | - |
↑↑↑
| 被误认作列分隔符
检测方法(识别已崩坏的行):
$ 数量异常:一行中 $ 出现奇数次(正常应为偶数,成对出现)
- 孤立
$ 单元格:某个单元格内容只有单独的 $ 符号
- 以
$... 开头但无闭合:某单元格以 $ 开头,但同一单元格内找不到配对的 $
修复方法:
- 找到崩坏的行后,先根据其他行的结构推断该行的正确列数(对照表头)
- 识别被
| 错误分隔的数学表达式碎片(如 $y = 、x、$ 散落在连续单元格中)
- 重组碎片为完整表达式,将
| 替换为 \vert
- 恢复该行的正确结构
# ✅ 修复后
| $y = \vert x \vert$ | 偶 | $x \geq 0$ 递增 | - | | |
工作流程
自动检查模式(推荐)
触发条件:每次 Write/Edit 包含表格的文件后自动执行
检查清单:
Step 1:识别问题
- 检查表格是否在 Callout 块内(行首有
>)
- 检查 Callout 内表格前是否有空行
>
- 检查表格内容是否包含
$|...|$ 格式
- 新增:检查表格行中
$ 数量是否为奇数(行结构崩坏特征)
- 新增:检查是否有孤立
$ 单元格(单独占一个单元格的 $ 符号)
Step 2:修复 Callout 内表格空行问题
检测规则:
- 找到 Callout 块内的表格(以
> | 开头的行)
- 检查表格前一行是否为空行
>
- 如果不是空行,在表格前插入
>
修复示例:
# 修复前
> **逐项转换**:
> | 原来的 | 变成 | 说明 |
# 修复后
> **逐项转换**:
>
> | 原来的 | 变成 | 说明 |
Step 3:修复管道符冲突
场景 A:单元格内有完整的 $|...|$
转换规则:
不处理的情况:
- 已使用
\vert:$\vert f(x) \vert$
- 已使用
\left\right:$\left| f(x) \right|$
- 代码块内
场景 B:行结构已崩坏($...|...$ 被撕碎)
检测特征:
- 该行
$ 数量为奇数(不成对)
- 连续多个单元格内容碎片组成一个完整数学表达式
- 存在孤立
$ 单元格(只有 $ 符号)
修复步骤:
- 对照表头确认正确的列数
- 识别被
| 错误分隔的碎片,重组为完整行内公式
- 将碎片中的
| 替换为 \vert
- 合并碎片到正确的单元格中
示例:
# 崩坏行(特征:3个 $ 为奇数,有孤立 $ 单元格)
| $y = | x | $ | 偶 | $x \geq 0$ 递增 | - |
# 分析:碎片 "$y = " + "x" + "$" = 原应为 "$y = |x|$"
# 修复:将 | 替换为 \vert
| $y = \vert x \vert$ | 偶 | $x \geq 0$ 递增 | - | | |
Step 4:写回文件
使用 Edit 工具更新文件,保持原有缩进和格式。
完整示例
示例 1:Callout 内表格缺少空行 + 管道符问题
输入:
> [!example] 例题
> **表格**:
> | $|f(x)|$ 的值 | 说明 |
> |:---:|:---:|
> | 1 | 正常 |
输出:
> [!example] 例题
> **表格**:
>
> | $\vert f(x) \vert$ 的值 | 说明 |
> |:---:|:---:|
> | 1 | 正常 |
示例 2:行结构已崩坏($...|...$ 撕碎整行)
输入(Obsidian 渲染后某行错乱,查看源码发现):
| $y = | x | $ | 偶 | $x \geq 0$ 递增 | - |
- 特征:
$ 出现 3 次(奇数),有孤立 $ 单元格
- 分析:碎片
$y = + x + $ → 原应为 $y = |x|$
输出:
| $y = \vert x \vert$ | 偶 | $x \geq 0$ 递增 | - | | |
注意事项
- 自动检查优先:每次 Write/Edit 包含表格的文件后,必须执行本技能
- 优先修复空行问题:Callout 内表格缺少空行是最常见的问题
- 保持 Callout 格式:空行必须是
> 而不是完全空行
- 批量处理:一次修复文件中所有类似问题
快速检查命令
在每次 Write/Edit 后,执行以下检查:
grep -n '> \|' "文件路径.md" | grep -v '^*>$'
awk -F'|' '{for(i=1;i<=NF;i++) if($i ~ /\$/){gsub(/[^$]/,"",$i); if(length($i)%2==1) print NR": "$0}}' "文件路径.md"
与其他技能的协同
| 技能 | 协同场景 |
|---|
| mistake-book | 整理错题时,检查错题本中的表格格式 |
| obsidian-markdown | 创建包含表格的笔记时,自动检查表格格式 |
| kaoyan-math-notes | 生成数学笔记时,检查公式表格格式 |
版本: 2.1.0 - 增加行结构崩坏识别(奇数 $ 检测 + 孤立 $ 单元格检测),增加 $...|...$ 导致的整行撕裂修复方案,刷新 description 覆盖新场景