feat: export core Hermes skills
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
# 格式复核常见模式与数值参考
|
||||
|
||||
## firstLine 缩进一致性
|
||||
|
||||
不同合同模板的 firstLine 值不同,但同一合同内应一致。
|
||||
|
||||
### 常见值
|
||||
- 政府示范文本(仿宋):通常 firstLine=600(约 10.5pt 字号的两倍字符缩进)或 596/602(±2 的微小差异属正常)
|
||||
- 正文段落和条款标题通常使用相同的 firstLine 值
|
||||
- 数值偏差 > 20 即视为不一致
|
||||
|
||||
### 2026-06-26 计生合同教训
|
||||
新增条款段落 firstLine=753,现有段落 firstLine=596/600/602。差值 153 twips ≈ 2.7mm,视觉上明显不一致。
|
||||
**根因**:editor 使用 `add_clause` 时段落属性从未正确匹配的相邻段落克隆。
|
||||
|
||||
### 检查方法
|
||||
```python
|
||||
# 提取所有段落的 firstLine 值
|
||||
for i, p in enumerate(all_ps):
|
||||
pPr = p.find(qn('pPr'))
|
||||
if pPr is not None:
|
||||
ind = pPr.find(qn('ind'))
|
||||
if ind is not None:
|
||||
fl = ind.get(qn('firstLine'))
|
||||
if fl:
|
||||
print(f"P{i}: firstLine={fl}")
|
||||
```
|
||||
将新增段落的 firstLine 与原文同级段落对比,超出 ±20 视为不一致。
|
||||
|
||||
## 加粗(bold)一致性
|
||||
|
||||
### 规则
|
||||
- 中文合同中"第X条"编号部分**始终加粗**(bold=True)
|
||||
- 条款标题文字("第X条"之后的部分)可能加粗也可能不加粗,取决于原文模式
|
||||
- 新增条款标题的加粗应与**最近的原文条款标题**一致
|
||||
|
||||
### 常见模式
|
||||
| 模式 | 示例 | 原文样式 |
|
||||
|------|------|----------|
|
||||
| 全加粗 | "第一条、项目名称、时间" | 整个 run bold=True |
|
||||
| 编号加粗 | "第七条、" bold + "项目费用" not bold | 编号 run 和标题 run 分开 |
|
||||
| 仅编号加粗 | "第八条" bold + "、违约责任" not bold | 编号和内容分开 |
|
||||
|
||||
### 2026-06-26 计生合同教训
|
||||
新增 P31 "第九条、第三方侵权责任" 和 P33 "第十条、转包与分包" 整体 bold=False。但原文所有条款标题中"第X条"均为 bold=True。最近的原文标题 P29 "第八条" bold=True。
|
||||
|
||||
### 检查方法
|
||||
对每个 WB INS 新增条款标题段落,检查其 INS run 的 rPr 中是否有 `<w:b/>` 或 `<w:b w:val="1"/>`。与最近的原文条款标题段落的 bold 状态对比。
|
||||
|
||||
## hint='eastAsia' 属性
|
||||
|
||||
### 规则
|
||||
中文文档的 WB INS run 的 rFonts 应有 `w:hint="eastAsia"`。缺失会导致某些渲染器回退到非 CJK 字体。
|
||||
|
||||
### 2026-06-26 计生合同教训
|
||||
P35 INS "第十一条" 和 P37 INS "第十二条" 的 rFonts 缺少 hint 属性。其他所有 WB INS run 均有 hint='eastAsia'。
|
||||
|
||||
### 检查方法
|
||||
```python
|
||||
for ins in body.iter(qn('ins')):
|
||||
if ins.get(qn('author')) != 'WB':
|
||||
continue
|
||||
for r in ins.findall(qn('r')):
|
||||
rpr = r.find(qn('rPr'))
|
||||
if rpr is None:
|
||||
continue
|
||||
rfonts = rpr.find(qn('rFonts'))
|
||||
if rfonts is not None:
|
||||
hint = rfonts.get(qn('hint'))
|
||||
if hint != 'eastAsia':
|
||||
# 标记为缺失
|
||||
```
|
||||
|
||||
## x2t 视觉验证的局限性
|
||||
|
||||
### 字体回退
|
||||
OnlyOffice 容器(`nextcloud-onlyoffice-1`)可能未安装合同使用的字体。当 x2t 找不到指定字体时:
|
||||
- 所有文本回退到 WenQuanYi Zen Hei Mono(等宽 CJK 字体)
|
||||
- **加粗状态无法通过 x2t PDF 验证**——回退字体下 bold 始终为 False
|
||||
- 字体族名称也无法验证——所有文本显示为同一回退字体
|
||||
|
||||
### 适用场景
|
||||
x2t 仍可用于验证:
|
||||
- 内容完整性(文本是否缺失、是否被截断)
|
||||
- 分页和布局
|
||||
- 段落是否存在(标题/正文分离检查)
|
||||
- 文本溢出(截断警告)
|
||||
|
||||
### 不适用场景
|
||||
x2t **不能**用于验证:
|
||||
- 字体族(仿宋/宋体/黑体)
|
||||
- 加粗/斜体
|
||||
- 字号精确值
|
||||
|
||||
**字体和格式属性必须以 XML 为准。**
|
||||
Reference in New Issue
Block a user