Skill: lmtea1981/word-cn-format (version 1.0.0)

--- name: Word中文格式标准化 name: Word中文格式标准化 description: 提供Word文档按中文格式标准化的功能，包括标题、正文、图片、图表等格式的统一处理。使用微软雅黑字体，设置标准化的字体大小、段前段后位置、行缩进等。适用于需要统一文档格式的场景，如企业文档、学术论文、报告等。 --- # Word中文格式标准化 ## 功能概述 本skill提供Word文档的中文格式标准化功能，确保文档符合中文排版规范，包括： - 标题和各级标题的格式化 - 正文的字体大小和行距设置 - 段前段后位置调整 - 行缩进设置 - 字体统一使用微软雅黑 - 图片和图表的格式标准化 ## 目录结构 ``` sample_1/ ├── SKILL.md # 技能说明文件 ├── scripts/ │ ├── format_word.py # 核心格式化脚本 │ └── requirements.txt # 依赖项 ├── references/ │ ├── format_standard.md # 格式标准说明 │ └── usage_guide.md # 使用指南 └── assets/ └── template.docx # 模板文件 ``` ## 核心功能 ### 标题格式 - 标题：微软雅黑，2号字体，加粗，居中，段前12磅，段后6磅 - 一级标题：微软雅黑，3号字体，加粗，左对齐，段前12磅，段后6磅 - 二级标题：微软雅黑，4号字体，加粗，左对齐，段前6磅，段后3磅 - 三级标题：微软雅黑，小4号字体，加粗，左对齐，段前3磅，段后3磅 ### 正文格式 - 字体：微软雅黑，5号字体 - 行距：1.5倍行距 - 段前：0磅 - 段后：0磅 - 首行缩进：2字符 ### 图片和图表格式 - 图片居中显示 - 图片下方添加编号和说明 - 图表标题在图表上方，居中显示 - 图表数据标签清晰可见 ## 使用方法 1. 安装依赖： ```bash pip install -r scripts/requirements.txt ``` 2. 运行格式化脚本： ```bash python scripts/format_word.py <input_file> [output_file] ``` 其中： - `<input_file>`：要格式化的Word文档路径 - `[output_file]`：可选，格式化后的文档保存路径，默认在原文件基础上加"_formatted"后缀 ## 示例 ### 命令行示例 ```bash # 格式化文档并保存为新文件 python scripts/format_word.py document.docx formatted_document.docx # 直接在原文件基础上格式化 python scripts/format_word.py report.docx ``` ### 预期效果 执行脚本后，文档将按照上述格式标准进行统一处理，确保整体风格一致，符合中文排版规范。

path: scripts/format_word.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Word文档中文格式标准化工具

该脚本用于将Word文档按照中文格式标准进行格式化，包括标题、正文、图片和图表的格式统一。
"""

import os
import sys
from datetime import datetime
from docx import Document
from docx.shared import Pt, Inches
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT, WD_LINE_SPACING
from docx.oxml import OxmlElement
from docx.oxml.ns import qn

class WordFormatter:
    """Word文档格式化类"""
    
    def __init__(self, input_file, output_file=None):
        """
        初始化格式化器
        
        Args:
            input_file: 输入Word文档路径
            output_file: 输出文档路径，默认为None
        """
        self.input_file = input_file
        
        if output_file:
            self.output_file = output_file
        else:
            # 使用时间戳作为后缀
            base_name = os.path.splitext(input_file)[0]
            timestamp = datetime.now().strftime("_%Y%m%d%H%M%S")
            self.output_file = f"{base_name}{timestamp}.docx"
        
        # 加载文档
        self.doc = Document(input_file)
    
    def format_document(self):
        """格式化整个文档"""
        self._format_styles()
        self._format_paragraphs()
        self._format_images()
        self._format_tables()
        
        # 保存文档
        self.doc.save(self.output_file)
        print(f"文档已格式化并保存到: {self.output_file}")
    
    def _format_styles(self):
        """格式化文档样式"""
        # 设置默认字体为微软雅黑
        style = self.doc.styles['Normal']
        font = style.font
        font.name = 'Microsoft YaHei'
        # 确保中文字体也设置为微软雅黑
        rPr = font._element.get_or_add_rPr()
        rFonts = rPr.get_or_add_rFonts()
        rFonts.set(qn('w:eastAsia'), '微软雅黑')
        font.size = Pt(10.5)  # 5号字体
        
        # 设置段落格式
        paragraph_format = style.paragraph_format
        paragraph_format.line_spacing = 1.5  # 1.5倍行距
        paragraph_format.first_line_indent = Inches(0.35)  # 首行缩进2字符
        paragraph_format.space_before = Pt(0)
        paragraph_format.space_after = Pt(0)
        
        # 标题样式
        # 标题（Title）
        title_style = self.doc.styles['Title']
        title_font = title_style.font
        title_font.name = 'Microsoft YaHei'
        # 确保中文字体也设置为微软雅黑
        rPr = title_font._element.get_or_add_rPr()
        rFonts = rPr.get_or_add_rFonts()
        rFonts.set(qn('w:eastAsia'), '微软雅黑')
        title_font.size = Pt(22)  # 2号字体
        title_font.bold = True
        title_paragraph = title_style.paragraph_format
        title_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        title_paragraph.space_before = Pt(12)
        title_paragraph.space_after = Pt(6)
        
        # 一级标题（Heading 1）
        heading1_style = self.doc.styles['Heading 1']
        heading1_font = heading1_style.font
        heading1_font.name = 'Microsoft YaHei'
        # 确保中文字体也设置为微软雅黑
        rPr = heading1_font._element.get_or_add_rPr()
        rFonts = rPr.get_or_add_rFonts()
        rFonts.set(qn('w:eastAsia'), '微软雅黑')
        heading1_font.size = Pt(16)  # 3号字体
        heading1_font.bold = True
        heading1_paragraph = heading1_style.paragraph_format
        heading1_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
        heading1_paragraph.space_before = Pt(12)
        heading1_paragraph.space_after = Pt(6)
        
        # 二级标题（Heading 2）
        heading2_style = self.doc.styles['Heading 2']
        heading2_font = heading2_style.font
        heading2_font.name = 'Microsoft YaHei'
        # 确保中文字体也设置为微软雅黑
        rPr = heading2_font._element.get_or_add_rPr()
        rFonts = rPr.get_or_add_rFonts()
        rFonts.set(qn('w:eastAsia'), '微软雅黑')
        heading2_font.size = Pt(14)  # 4号字体
        heading2_font.bold = True
        heading2_paragraph = heading2_style.paragraph_format
        heading2_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
        heading2_paragraph.space_before = Pt(6)
        heading2_paragraph.space_after = Pt(3)
        
        # 三级标题（Heading 3）
        heading3_style = self.doc.styles['Heading 3']
        heading3_font = heading3_style.font
        heading3_font.name = 'Microsoft YaHei'
        # 确保中文字体也设置为微软雅黑
        rPr = heading3_font._element.get_or_add_rPr()
        rFonts = rPr.get_or_add_rFonts()
        rFonts.set(qn('w:eastAsia'), '微软雅黑')
        heading3_font.size = Pt(12)  # 小4号字体
        heading3_font.bold = True
        heading3_paragraph = heading3_style.paragraph_format
        heading3_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
        heading3_paragraph.space_before = Pt(3)
        heading3_paragraph.space_after = Pt(3)
    
    def _format_paragraphs(self):
        """格式化所有段落"""
        for paragraph in self.doc.paragraphs:
            # 跳过空段落
            if not paragraph.text.strip():
                continue
            
            # 检查是否是标题
            if paragraph.style.name == 'Title':
                # 标题：居中对齐，无缩进
                paragraph.style = self.doc.styles['Title']
                paragraph.paragraph_format.first_line_indent = 0
                paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
                # 直接设置字体为微软雅黑
                for run in paragraph.runs:
                    run.font.name = 'Microsoft YaHei'
                    # 设置中文字体
                    if run.font._element.rPr is not None:
                        rFonts = run.font._element.rPr.get_or_add_rFonts()
                        rFonts.set(qn('w:eastAsia'), '微软雅黑')
            elif paragraph.style.name.startswith('Heading'):
                # 一级、二级、三级标题：左对齐，无缩进
                paragraph.style = self.doc.styles[paragraph.style.name]
                paragraph.paragraph_format.first_line_indent = 0
                paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
                # 直接设置字体为微软雅黑
                for run in paragraph.runs:
                    run.font.name = 'Microsoft YaHei'
                    # 设置中文字体
                    if run.font._element.rPr is not None:
                        rFonts = run.font._element.rPr.get_or_add_rFonts()
                        rFonts.set(qn('w:eastAsia'), '微软雅黑')
            else:
                # 正文：左对齐，首行缩进2字符
                paragraph.style = self.doc.styles['Normal']
                paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
                # 直接设置字体为微软雅黑
                for run in paragraph.runs:
                    run.font.name = 'Microsoft YaHei'
                    # 设置中文字体
                    if run.font._element.rPr is not None:
                        rFonts = run.font._element.rPr.get_or_add_rFonts()
                        rFonts.set(qn('w:eastAsia'), '微软雅黑')
    
    def _format_images(self):
        """格式化图片和图表"""
        for paragraph in self.doc.paragraphs:
            # 检查段落是否包含图片或图表
            has_image = False
            for run in paragraph.runs:
                # 更精确地检测图片和图表
                xml_content = run._element.xml.lower()
                if ('<wp:inline' in xml_content or '<wp:anchor' in xml_content or 
                    '<c:chart' in xml_content):
                    has_image = True
                    break
            
            if has_image:
                # 图片/图表段落不需要缩进
                paragraph.paragraph_format.first_line_indent = 0
                # 图片/图表段落居中
                paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    
    def _format_tables(self):
        """格式化表格"""
        for table in self.doc.tables:
            # 设置表格居中
            table.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
            
            # 格式化表格内容
            for row in table.rows:
                for cell in row.cells:
                    for paragraph in cell.paragraphs:
                        paragraph.style = self.doc.styles['Normal']

def main():
    """主函数"""
    if len(sys.argv) < 2:
        print("使用方法: python format_word.py <input_file> [output_file]")
        sys.exit(1)
    
    input_file = sys.argv[1]
    output_file = sys.argv[2] if len(sys.argv) > 2 else None
    
    if not os.path.exists(input_file):
        print(f"错误: 文件 {input_file} 不存在")
        sys.exit(1)
    
    try:
        formatter = WordFormatter(input_file, output_file)
        formatter.format_document()
    except Exception as e:
        print(f"错误: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    main()

path: scripts/requirements.txt
content: python-docx

path: references/format_standard.md
content: # Word中文格式标准化标准

## 1. 字体规范

### 1.1 基本字体
- 统一使用**微软雅黑**字体
- 确保文档中所有文本都使用该字体

### 1.2 字体大小
- 标题：2号字体（22pt）
- 一级标题：3号字体（16pt）
- 二级标题：4号字体（14pt）
- 三级标题：小4号字体（12pt）
- 正文：5号字体（10.5pt）
- 图表标题：5号字体（10.5pt）
- 图表数据标签：小5号字体（9pt）

## 2. 段落格式

### 2.1 对齐方式
- 标题：居中对齐
- 一级标题：左对齐
- 二级标题：左对齐
- 三级标题：左对齐
- 正文：左对齐
- 图片：居中对齐
- 图表：居中对齐

### 2.2 行距
- 正文：1.5倍行距
- 标题：单倍行距

### 2.3 段间距
- 标题：段前12磅，段后6磅
- 一级标题：段前12磅，段后6磅
- 二级标题：段前6磅，段后3磅
- 三级标题：段前3磅，段后3磅
- 正文：段前0磅，段后0磅

### 2.4 缩进
- 正文：首行缩进2字符
- 标题：无缩进

## 3. 图片和图表格式

### 3.1 图片格式
- 图片居中显示
- 图片下方添加编号和说明
- 编号格式：图 X: 图片说明
- 图片与正文之间保持适当间距

### 3.2 图表格式
- 图表居中显示
- 图表标题在图表上方，居中显示
- 图表标题格式：图 X: 图表标题
- 图表数据标签清晰可见
- 图表与正文之间保持适当间距

## 4. 表格格式

### 4.1 表格对齐
- 表格居中显示
- 表格内容左对齐

### 4.2 表格样式
- 表格边框：1磅实线
- 表头：加粗显示
- 表格与正文之间保持适当间距

## 5. 页面设置

### 5.1 页边距
- 上：2.54厘米
- 下：2.54厘米
- 左：3.17厘米
- 右：3.17厘米

### 5.2 纸张大小
- A4纸张（210mm × 297mm）

### 5.3 页眉页脚
- 页眉：文档标题，右对齐
- 页脚：页码，居中显示

## 6. 其他规范

### 6.1 标点符号
- 使用中文标点符号
- 标点符号全角显示

### 6.2 数字和单位
- 数字使用半角显示
- 单位使用国际标准单位

### 6.3 章节编号
- 章节编号使用阿拉伯数字，如：1.1、1.1.1等
- 编号与标题文本之间空一格

path: references/usage_guide.md
content: # Word中文格式标准化使用指南

## 1. 安装依赖

在使用本技能之前，需要安装必要的Python依赖包：

```bash
pip install -r scripts/requirements.txt
```

这将安装 `python-docx` 库，用于处理Word文档。

## 2. 运行格式化脚本

### 2.1 基本用法

```bash
python scripts/format_word.py <input_file> [output_file]
```

参数说明：
- `<input_file>`：必需，要格式化的Word文档路径
- `[output_file]`：可选，格式化后的文档保存路径。如果不指定，默认在原文件基础上加"_formatted"后缀

### 2.2 示例

#### 示例1：格式化文档并保存为新文件

```bash
python scripts/format_word.py document.docx formatted_document.docx
```

这将把 `document.docx` 按照中文格式标准进行格式化，并保存为 `formatted_document.docx`。

#### 示例2：直接在原文件基础上格式化

```bash
python scripts/format_word.py report.docx
```

这将把 `report.docx` 按照中文格式标准进行格式化，并保存为 `report_formatted.docx`。

## 3. 格式化效果

执行脚本后，文档将按照以下标准进行格式化：

### 3.1 字体
- 统一使用微软雅黑字体
- 标题和各级标题使用相应的字体大小和加粗效果
- 正文使用5号字体

### 3.2 段落
- 正文使用1.5倍行距
- 首行缩进2字符
- 段前和段后间距按照标准设置

### 3.3 图片和图表
- 图片居中显示
- 图片下方添加编号和说明
- 图表标题居中显示

### 3.4 表格
- 表格居中显示
- 表格内容使用统一格式

## 4. 常见问题

### 4.1 脚本运行失败

**问题**：运行脚本时出现错误。

**解决方法**：
- 确保已安装 `python-docx` 库
- 确保输入文件是有效的Word文档（.docx格式）
- 确保文件路径正确

### 4.2 格式化效果不理想

**问题**：格式化后的文档效果不符合预期。

**解决方法**：
- 检查文档是否使用了特殊格式或样式
- 对于复杂的文档，可能需要手动调整某些部分
- 确保文档中的标题使用了正确的标题样式

### 4.3 图片编号问题

**问题**：图片编号不正确或重复。

**解决方法**：
- 脚本会按照图片在文档中出现的顺序自动编号
- 如果需要自定义编号，可以在格式化后手动修改

## 5. 注意事项

1. **备份原文档**：在格式化之前，建议备份原文档，以防万一。

2. **兼容性**：脚本适用于 .docx 格式的文档，不支持 .doc 格式。

3. **特殊格式**：对于文档中的特殊格式（如脚注、尾注、交叉引用等），脚本可能无法完全处理，需要手动调整。

4. **性能**：对于大型文档，格式化可能需要较长时间，请耐心等待。

5. **字体安装**：确保系统中已安装微软雅黑字体，否则可能会导致字体显示异常。

## 6. 高级用法

### 6.1 批量处理

可以使用批处理脚本一次性处理多个文档：

```bash
# Windows批处理
for %%f in (*.docx) do python scripts/format_word.py "%%f"

# Linux/Mac Shell
for f in *.docx; do python scripts/format_word.py "$f"; done
```

### 6.2 集成到其他工作流

可以将本脚本集成到其他工作流中，例如：

- 作为文档处理管道的一部分
- 与版本控制系统配合使用
- 作为自动化办公工具的组件

## 7. 故障排除

如果遇到问题，可以查看脚本的错误信息，或者尝试以下方法：

1. **检查Python版本**：确保使用Python 3.6或更高版本。

2. **检查依赖版本**：确保 `python-docx` 库是最新版本。

3. **查看日志**：脚本会输出执行过程中的信息，可以根据这些信息定位问题。

4. **简化文档**：如果处理复杂文档时出现问题，可以先处理一个简化版本的文档，逐步排查问题。

## 8. 联系支持

如果遇到无法解决的问题，可以：

1. 检查脚本代码，了解具体的处理逻辑
2. 参考 `python-docx` 库的官方文档
3. 寻求技术支持

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)