---
name: mqc-legal-courseware-master
description: 法律课件大师（法律图表页助手）。只做课件里的法律图表那一页：把 V1–V6 的图（案情时间轴、法律关系图、争点对抗图、大事记简表、类案数据图）放进 12 栏 × 6 行的磁吸网格，配上一句话结论、读图要点、法条、裁判要旨、案例、争议焦点等卡片，导出后整页复制或框选复制进律师自己的 PPT。磁吸做到图里：V7 认得出图里的事件、主体、关系、柱子，能在图上放读图编号（要点卡同号联动）、切片只取几件事放大、聚焦只点亮几个元素（可按编号拆成几页），V6 图表可一键换一种图，导出时按编号自动生成讲课动画（点一下出一个）。V5 对抗图可按页面尺寸现出图、一个要件一页。左栏第一位是图表库（V6 法律图表大师的一百多个法律场景，按场景、画法、关键词找，点一下放进这一页再交给 AI 换成用户的数据），其后「诉讼图（V1–V5）→ 版式 → 卡片 → 适配 → 导出」；一句话结论卡吸在图的上下方。版面可铺满全屏，也可按律所模板或一张截图预留 Logo、天头地脚的位置；风格为奇川风、歸藏风或自定义（模板、截图或一个主色）。用户在编辑器下方的输入框（或选中卡片后的右栏）写一句想法，由对话里的 AI 写卡片或调用 V1–V6 出图。法条与要旨照录原文、案号不编、数字要能由图表推出、字不小于 11px。整套课件用的封面、律所名片、介绍页仍保留。V6 法律图表大师已随包内置；V1–V5 的诉讼图要另装对应技能，没有也不影响图表库、卡片与导出。不适用：整套演讲稿的撰写、视频与动画制作、法律意见本身。纯本地运行：编辑器只开在本机，不联网、不调用任何外部 API。
tags: [法律, 课件, PPT, 演示文稿, 律师, 律所, 讲座, 诉讼可视化]
metadata:
  version: 0.9.1
---

# 法律课件大师（V7）

**我们不跟 PowerPoint 比编辑能力。** 比的是：法律人从一堆材料到一套像样的课件有多快，内容靠不靠得住。

做法是「骨架定死、内容交给 AI」：网格、风格、卡片样子、核对规则是固定的；用户说一句想法，AI 按法律场景
生成模块和页面，用户在磁吸界面上拖一拖、改一改，再导出。自由度在想法上，不在像素上。

和其他模块一样：**模型只写 JSON（deck.json），几何由脚本算，导出后回读审计。** V7 只读 V1–V6，不改它们。

## 〇、用户怎么开口

句式：**用法律课件大师，把【材料 / 想法】做成【几页】课件，在【场合】讲给【谁】，用【奇川风 / 歸藏风】。**

| 用户要的 | 怎么做 |
| --- | --- |
| 「打开编辑器，我自己排」 | 第三节：开编辑器（`--detach`），处理完编辑器里的请求就收尾 |
| 「这类数据用什么图好？」 | 编辑器的「图表库」，或 V6 的 `scripts/find.py`：按场景、画法、关键词找，放进来的是示例数据，交给 AI 换成用户的 |
| 一套类案课件 | 先用 V6 出图表说明放进 `assets/`，再写 deck.json（「类案研究」组合） |
| 案情汇报 / 庭前准备 | 用 V2 / V3 / V5 出 SVG 放进 `assets/`（V3 加 `--shape wide` 出横版，竖版放进课件页字太小），配争议焦点卡、风险提示卡 |
| 法条解读 / 普法讲座 | 法条卡（照录原文）+ 要点 + 风险提示；案例复盘用案例卡 + 裁判要旨卡 |
| 律所推介 / 律师介绍 | 先填律所名片（第五节），一键生成介绍页，再按场合润色 |

## 〇之二、运行与交付须知

- **命令从哪里跑。** 本文件里写的 `scripts/…`、`examples/…`、`references/…` 都在**本技能目录**下（这份 SKILL.md 所在的文件夹）。
  请在**用户的工作目录**里运行，命令写成 `python3 <本技能目录>/scripts/…`，不要先 `cd` 进本技能目录；脚本自己找得到依赖，在哪里调用都一样。
- **产物放哪里。** 用户的材料、JSON 与产物一律放在用户的工作目录，**不要写进本技能目录**：技能更新时那里会被整个替换，用户也找不到。`build.py 课件名 --new` 在当前目录建课件文件夹；课件文件夹放在用户的工作目录。
- **照实交付。** 脚本打印的核对清单照原样转告用户；没有真的打开看过图片，就不要说「看过了、效果没问题」。
- **安全与隐私。** 纯本地运行：只用 Python 标准库，不联网、不调用任何外部 API，国内网络环境下直接可用，全程中文。
  编辑器只监听本机 127.0.0.1，非本机来的请求一律拒绝；只读写这套课件的文件夹与用户指定的导出路径，不收集、不上传任何数据。
  读律所 PPT 模板时若本机装了 LibreOffice，会在本机调用它转出缩略图；没装就跳过这一步。

## 〇之三、出错、卡住

先看 `references/faq.md`：三步上手、常见误用、报错与退出码、术语速查、已知限制都在那一份里。

## 一、课件目录

```
my-deck/
  deck.json     课件说明（编辑器自动保存；AI 与模型也直接写它）
  assets/       素材：V6 图表说明 *.json、V1–V5 的图 *.svg
  brand/        （可选）这套课件专用的律所名片；没有就用本机公共名片 ~/.mqc-nlv/brand/
  ai/           编辑器发给 AI 的请求（requests.json）
  exports/      导出的 PPTX
```

目录名与文件名用 ASCII：Windows 解压 ZIP 时中文文件名会失败。内容、标题用中文没问题。
新建：`python3 scripts/build.py my-deck --new --title "民间借贷类案研究"`

## 二、磁吸网格与卡片

一页 1280×720，**12 栏 × 6 行**，页边距左右 48、上下 56，模块之间一律留 16px。每个模块写它占哪几格：
`x`（第几栏，0 起）、`y`（第几行）、`w`、`h`，都是整数。**不写像素、颜色、字号**——由网格和风格决定。

**法律内容卡**

| type | 卡片 | 字段 | 最小 |
| --- | --- | --- | --- |
| statute | 法条 | `law` 法律名称、`article` 条款、`text` 条文原文 | 4×2 |
| holding | 裁判要旨 | `text` 要旨原文、`court` 法院、`case_no` 案号（至少写一个出处） | 4×2 |
| case | 案例 | `case_no`（必填）、`court`、`cause` 案由、`heading`、`result` 裁判结果、`point` 要点 | 3×2 |
| issue | 争议焦点 | `heading`、`text`；按阅读顺序自动标「争议焦点一、二、三」 | 3×2 |
| risk | 风险提示 | `heading`、`text` | 3×2 |
| evidence | 证据 | `heading`、`items`（一行一份：「名称——证明目的」，自动标证据 1、2、3） | 5×2 |

**通用卡**：title 标题（`level` page / cover / section，`kicker`，`sub`）、text 正文、bullets 要点、step 编号卡、
stat 大数字（`value`、`label`、`note`、`from` 出处图表）、quote 金句（`source` 必填）、note 注释。

**图卡**（关联 V1–V6）：chart（V6 图表说明，`file` 或 `spec`，按卡片尺寸重画并过 V6 守卫）、
figure（V1–V5 的 SVG，`file` + `from` 写来自哪个模块，如 `"V2 时间轴大师"`；等比缩放，字小于 11px 就拒）。

**律所卡**：logo（来自名片）、profile 介绍（`who`: `"firm"` 或 `"lawyer:<id>"`，内容实时读名片）、contact 联系方式。

外观 `tone`：card 卡片 / accent 重音卡（只给大数字、编号卡、正文、要点、争议焦点、风险提示；一页只该有一张）/ outline 描边 / bare 无底。
**连成一组**：相邻的同类卡片（法条与要旨一家、正文与要点一家、大数字、编号卡、案例、争议焦点、风险提示各一家），
并排等高或上下等宽、外观相同，自动连成一组（间距收到 4px、内角收小）；`"join": false` 拆开。

**组合**（模板）：律所（封面带 Logo、律所介绍、律师简介、结束页）、法律（法条解读、案例复盘、争议焦点、庭前准备、
证据梳理、案情经过、类案研究）、通用（封面、章节页、一图一讲、一图一数一讲、整页图、左右两图、图 + 金句、
数字一排、三卡并列、左右对照、标题 + 要点、整页出血图、整页关系图、金句页）。坐标照抄组合，只填字段。
完整格式、坐标见 `references/deck-format.md`。

## 三、编辑器与 AI（主要用法）

```bash
python3 scripts/studio.py my-deck --detach   # 你（AI）代用户打开编辑器：独立运行，命令马上返回，浏览器自动打开
python3 scripts/studio.py my-deck --stop     # 用户说不用了再关
python3 scripts/studio.py my-deck            # 用户自己在终端里开（前台运行，关窗口即退出）
```

**由你代开时一律加 `--detach`。** Agent 的命令有时限（常见 2–10 分钟），到点或一轮结束会把它启动的进程一并清掉：
前台跑、`&` 后台跑，编辑器几分钟后就断了，页面还在、点什么都没反应。`--detach` 让编辑器脱离 Agent 独立运行，
确认浏览器真能连上才返回（退出码 0），**把它打印的网址原样告诉用户**（浏览器没自动弹出时让用户点开）。
退出码 3 = 打不开（多半是 Agent 的沙箱关了网络）：把它打印的两条路转告用户——允许这条命令在沙箱外运行再开一次，
或者不开编辑器，改走第四节（你写 deck.json，`build.py` 检查并导出）。
编辑器只听本机 127.0.0.1，材料不出电脑；所以只在**命令跑在用户自己电脑上**的 Agent 里有界面（模型在云端没关系）。
命令跑在云端虚拟机里的（网页版的云端任务等），用户的浏览器连不到那台机器，直接走第四节，不要让用户等界面。

编辑器（0.9.0 起版面改为安静的对话式布局）：左边一条侧栏——「新建一页」，然后是入口
「图表库（V6 的法律图表场景）/ 诉讼图（V1–V5 的法律场景 + 已有的图）/ 版式 / 卡片（读图、依据）/ 适配（风格、版面）/ 导出 / 更多」（更多放整套课件用的：封面、章节页、律所名片、介绍页、AI 做整套），
下面是这套课件的全部页面（点一页切过去，拖动调整页序）。点一个入口，旁边滑出它的抽屉；再点一下或点抽屉右上角收起。
中间只有这一页（拖进来吸到格子、同类卡片自动连组、拖到被占的地方旁边的卡片让位、落在卡片上一分为二、拖角和边按格子改大小，
按住 Ctrl / ⌘ 不吸附），新的一页是空页：先去图表库挑一张图，或点一个诉讼图场景。
**图表库**：盖住画布的一整页，卡片是 V6 真画出来的图（按课件风格画），下面写场景名、它回答的问题、画法与适用场合；
先按律师要说明的事分（由什么构成、钱怎么算、流向哪里、风险在哪……），再按场合、画法筛，或搜关键词；
卡片以律师的问题为标题，带「比如」与「核对」。点「放进这一页」或「新建一页」，图卡里先是 V6 的**示例数据**
（卡片记着 `sample: true` 与场景 `recipe`），右栏的 AI 输入框已经写好「按图表库「某场景」……用我的材料出图」。
示例数据导出前一定被拦下（「这张图还是图表库里的示例数据」）：你交回用户的数据（apply 带 spec 或 file）后记号自动去掉。
版式、诉讼图场景的缩略图画成一页真的小页面；卡片画成样张（大数字、法条、要旨、证据清单的样子），不是图标。
**宋体标题用方正小标宋本来的字重**：不加粗、不描边（原来加粗 + 描边，比小标宋原样粗一大坨）；V1–V6 的图放进来，图里的宋体加粗标题同样改。
导出 PPT 时，编辑器认得出本机装了方正小标宋，标题就用它、不加粗；没装就用宋体加粗（在别人电脑上也不变样）。命令行：`build.py --title-face 方正小标宋简体`。右下角可放大缩小（Ctrl / ⌘ + 滚轮，Ctrl+0 适应窗口）。
顶栏只有课件标题、这一页的检查（「可以导出」或「几处要改 · 几处请核」，点开看明细）、撤销 / 重做、「⋯」（网格、整理、换版式、课件风格、快捷键）与导出。
选中一张卡，右边才出现属性栏：属性、读图（放编号、切片、聚焦、按编号拆页、V5 选要件；V6 图表还有「换一种图」）与检查。
页面下方是交给 AI 的输入框：重做这一页、后面加一页（Ctrl / ⌘ + 回车发出）；选中一张卡时在右栏里：让 AI 写这张卡 / 再来一版；选中一张图卡：让 AI 用 V1–V6 生成。

**用户在编辑器里交给 AI 的请求，记在 `ai/requests.json`，由你（对话里的 AI）来做。** 开编辑器之后：

```bash
python3 scripts/ai.py my-deck wait --timeout 90       # 等一阵请求；有就打印上下文（JSON）。不超过 Agent 单条命令时限；没等到（退出码 4）就收尾，不要再 wait
python3 scripts/ai.py my-deck take r3                 # 开始做（编辑器里显示「AI 正在做」）
python3 scripts/ai.py my-deck apply r3 result.json    # 交回结果：先校验，过了才写进课件；编辑器自动刷新，可撤销
python3 scripts/ai.py my-deck fail r3 --note "缺判决书原文，请先上传"
python3 scripts/ai.py my-deck done r3 --note "法条原文请您上传后再核"   # apply 后还有改不了的：收尾并说明
```

一轮：`wait`（或 `list`）→ 读上下文 → `take` → 写结果 → `apply`（看它打印的「还要改」，改到没有为止）→ 待办都处理完就**收尾**：
在对话里告诉用户做好了什么、还缺什么，结束这一轮。**不要一遍遍 `wait` 空等**（0.9.0，缪律师实测：原来写「回到 wait」，
AI 一直等、不收尾，用户看到的是「反反复复搞了半天没有结论」）。你在 `wait` 时编辑器显示「AI 马上开始」；
不在时显示「回对话里说『处理课件请求』」，用户说了你再处理。
apply 打印了「还要改」，请求就还是「正在做」：改好后**对同一个请求**再 `apply`（加页类会换掉上次加的那几页，不会越加越多）；
改不了的（缺用户的原文、材料）用 `done --note` 收尾，说清缺什么。上下文里的 `answer` 给了这一类请求的交回写法与照抄就能跑的命令。
用户在对话里说「处理课件请求」时，用 `list` 看所有未处理的。

上下文里有：请求（类型、想法 prompt、目标页 / 卡）、这一页的现状、整套大纲、律所名片摘要、素材清单、
目标卡片的像素尺寸（`target_box`）、规矩。结果的写法：

| 请求 kind | 交回 |
| --- | --- |
| module | `{"module": {字段…}}`：并进那张卡（不写 x/y/w/h 就不动位置） |
| tool | 先按那个模块（V1–V6）的 SKILL.md 出图，V1–V5 的 SVG 或 V6 的图表说明写进 `assets/`（可用 `"assets": {"x.json": …}`），再 `{"module": {"file": "assets/x…"}}`。图要按 `target_box` 出，字缩完不小于 11px；风格与课件一致 |
| page / cover | `{"modules": [模块…]}`：换掉这一页（按网格写坐标） |
| new-page / deck | `{"slides": [{"modules": […]}, …]}`：插在这一页后面 |

都可以加 `"note": "给用户的一句话"`，编辑器里会显示。

**法律垂类的规矩（AI 生成时也一样，最要紧的三条）：**
1. **法条、裁判要旨照录原文，不凭记忆写。** 原文只能来自用户给的材料或你查到的官方来源；拿不到就把 `text` 留空，
   在 note 里说「请上传原文 / 我查到的出处是…」。导出清单会提醒逐字核对。
2. **案号、法院、当事人不编。** 没有就不写；示例一律标「示例」「虚构」。
3. **数字只许算、不许编。** 大数字写 `from` 指向图表，脚本用 V6 的数字核对推一遍，推不出就拒。

其余：一页说一件事；一张要点卡不超过 5 条；字放不下就拆页，不缩到 16px 以下；整套一种风格，V1–V5 的图风格不符就回原模块重出；不留空卡片。

## 四、检查与导出（不开编辑器时）

```bash
python3 scripts/build.py my-deck --check      # 逐页检查，不写文件
python3 scripts/build.py my-deck               # 导出到 my-deck/exports/<标题>.pptx
```

退出码：0 成功；1 说明有错；2 有页面没准备好；3 导出后回读没过。**不是 0 就不要交付。**
「请核」是提醒人看一眼的地方（法条、要旨、金句的逐字核对，约数，手填的大数字），照实转告用户。

## 五、律所名片

编辑器「律所」页填一次：Logo（PNG / JPG / SVG，≤ 2MB）、律所名称 / 介绍 / 业务领域 / 地址 / 电话 / 邮箱 / 网址、
每位律师的姓名 / 职务 / 介绍 / 专长 / 代表业绩。存在课件目录的 `brand/`（有就用它），否则存本机公共名片
`~/.mqc-nlv/brand/`（环境变量 `NLV_BRAND_DIR` 可改），以后每套课件都能用。格式见 `scripts/brand.py` 文件头。

- 一键生成：律所介绍页、律师简介页（含代表业绩）、结束页（谢谢 + 联系方式）。不需要 AI；要按场合润色再交给 AI。
- 介绍卡、联系方式卡、Logo 都**实时读名片**：改名片，所有介绍页跟着变。
- 「每页页脚放 Logo」：内容页左下角放小 Logo（已有 Logo 卡的页不重复）。
- **Logo 是 PPTX 里唯一允许的图片**：PNG / JPG 作为图片放进去，在 PowerPoint 里能直接替换；SVG Logo 转成可编辑形状，
  它的颜色算律所品牌色。其余元素仍然全是可编辑的形状和文字，回读审计会抓 Logo 以外的任何图片。

## 五之二、自定义风格（从律所自己的模板、截图或一个主色来）

风格只有三种：奇川风、歸藏风、自定义（作者定的：不为哪一家律所单立风格名）。自定义在编辑器「适配」里做：
传模板（.pptx）、传一张截图（取主色），或直接选一个主色；同一次上传顺带算出预留位置。编辑器界面本身是中性灰（白纸、浅灰侧栏、黑色主按钮，有深色模式），不随课件风格变色；奇川风的深红只出现在课件页面上。
从模板做也可以用命令行，两步：

```bash
python3 scripts/template_read.py 模板.pptx -o 读取结果/ --render   # 第一步：只读，出读取报告（颜色、字体、版面、Logo、页型、对比度）
python3 scripts/firm_style.py make 读取结果/tokens.json --name 某某律所风 -o 律所名片目录/style.json   # 第二步：生成律所风格
```

- **读什么**：主色（主题的 accent1）、主色的深一档与浅色调、正文灰、标题与正文的字体字号、页边距、Logo 的位置与两版（深底用白字版、浅底用彩色版，按图本身的亮度分）、每页的页型。
- **怎么用**（作者定的）：封面、章节页用主色满版、白字、深底 Logo；内容页白底、标题用主色；卡片用模板最常用的浅色调。
  **中文标题用粗黑体**（PowerPoint 里是微软雅黑加粗），模板没写中文字体时也这样。
  **只用主色家族与灰**，模板里的辅助色先不放进来，一页仍只有一处重音。
- **V6 图表跟着换**：图的重音换成律所主色、标题用同一种粗黑体（V6 的 firm_palette，主色要过 V6 的对比度与「不是灰」检查，见 V6 ADR 0011）。
- **V1–V5 的图不拒**：它们没有律所风格的版本，V7 也不改别的模块的颜色；交付清单会提醒「回原模块出白描版放进来更协调」。
- **深底页（封面、章节页）不放图表和图**：放不清，拼页会拦下。
- **校验**：正文在纸上、卡片上，白字在主色上，封面字在封面底上，对比度都要 ≥ 4.5；主色不能接近灰；不能和内置风格同名。过不了就说清是哪一处、差多少。
- **存在哪**：律所名片目录（课件的 `brand/` 或本机公共名片）：`style.json`、`template/report.html`、`template/tokens.json`、两版 Logo。**模板本身不留存**（是律所的财产），也不要放进开源仓库。
- **用上**：deck.json 的 `style` 写 `"自定义"`（旧课件里写的律所风格名读进来自动认作「自定义」）。停用时文件改名为 `style.disabled.json`（不删），课件自动换回奇川风。

## 六、导出的 PPTX

- 每页 16:9；每个元素都是能点开改的形状或文字（Logo 除外，见上）；连成一组的卡片是四角不同的自由形状。
- 导出后回读审计：页数、XML 合法、图片只有 Logo、颜色在风格白名单里（律所风格就是律所风格文件里的颜色；V1–V5 的图与 SVG Logo 的颜色另行登记）、写的字都在。没过不交付，旧文件不动。暂存区不导出。

## 七、交付时对用户说

一两句：做了几页、哪些地方要人核（法条、要旨、金句、手填的数字）、文件在哪。图被拒时，说清是哪页、该回哪个模块用什么风格、按多大尺寸重出。

## 七之一、出处：鼠标停在图里的元素上（0.8.4）

- 编辑器里鼠标停在图里的事件、柱子上，浮出它出自哪里；选中图卡，右侧「出处」列出全部。**只读原模块写好的出处，不编。**
- **V2 时间轴、V3 关系图**：出图时图旁边有一份 `<名>-trace.json`（V2：事项、材料、第几句、原文摘录；V3：每个主体、每条关系的出处），**和图一起放进 `assets/`**。V3 里没写出处的主体、关系，悬停时明说「没写」。
- **V6 图表**：说明里用了 `dataset` + `view`（逐件记录）的，自动有：每一项来自哪几条记录、编号是什么。
- 其余的图（V1、V4、V5，没用逐件记录的 V6）没有逐项出处，不显示。
- **写进演讲者备注（可选）**：编辑器「导出」里打开「出处写进演讲者备注」，或 `build.py 课件 --notes`。只写有出处的页；讲课时演示者视图里看得到，观众看不到。不打开就一个字节都不加。

## 七之二、读图编号、切片与逐个讲（0.5.0）

- 图卡导入后，V7 认出图里的元素（磁吸点）：V1 / V2 的事件与期间、V3 的主体与关系（含关系标注）、V6 的每个数据项。V4 简表、V5 对抗图没有标记，只能整张放。
- 图卡字段：`pins`（读图编号，元素键的列表，最多 9 个）、`crop`（切片，只取这些元素那一块）；要点卡 `numbered: true` 时与编号同号。
- 编辑器：选中图 → 右侧「读图」→「放编号」「切片」「生成读图要点」；编号顺序可调，要点跟着换。
- 放不下的图（字 < 11px）照样显示，先切片再导出。导出的 PPTX 里每个元素、每个编号各成一组、按名字命名。
- 聚焦（0.8.0）：图卡与图表卡可写 `focus`（元素键列表）——这些元素照常，其余往白里调；整张图仍在。
  「按编号拆成几页」：全图这页之后，每个编号一页、只点亮它。V6 图表卡「换一种图」：同一份数据，V6 能画的图都列出来。

## 七之三、左栏、结论卡、讲课动画、V5 兼容层（0.6.0）

- 左栏：图表库（V6 的法律图表场景）→ 诉讼图（V1–V5 的法律场景 + 已有的图）→ 版式 → 卡片（读图 / 依据）→ 适配（风格、版面）→ 导出；整套课件用的都在「更多」。
- 一句话结论卡 `conclusion`：一两行；拖到图的正上方 / 正下方会吸过去、与图同宽。
- 导出默认写讲课动画：有读图编号的页，点一下出「编号 + 它指的元素 + 同号要点」。
- V5：图卡写 `data`（V5 的数据文件，分析输入或图输入都认）与 `part`（第几个要件，从 0 起；不写 = 全部），V7 按图卡宽度调 V5 出图并只取卡片。

## 八、回归

`python3 tests/run_checks.py`（约 670 项）：结构校验与旧格式升级、网格与连组、落点与整理、每个组合 × 两种风格、
法律卡（照录、出处、案号、编号）、律所名片（实时读取、一键介绍页、Logo 校验）、Logo 导出与「只许 Logo 一张图」、
AI 请求队列（校验不过不写、取消的不能交）、文字与空卡片、大数字核对、图的缩放与风格、导出审计（含篡改检测）、
编辑器接口与越界防护、编辑器 JS 规则与 Python 逐项对照、示例课件成品账，以及「V1–V6 一个字节没变」。改完必跑，不过不发。
