关于 new-diagram
new-diagram 是从 TikZ 片段模板创建并审核图表的工作流,适用于需要为 Beamer 或 Quarto 制作图表的人。它包含预防规则检查、独立编译和视觉审查,并可选转换为 SVG。
主要功能
- 01从 TikZ 片段模板搭建图表
- 02检查图表预防规则
- 03独立编译为 PDF
- 04循环进行视觉审查与修订
- 05可选转换为 SVG
适用场景
- 01创建因果图或流程图
- 02绘制事件研究或时间线图
- 03生成供 Quarto 使用的 SVG 图表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pedrohcgs/ claude-code-my-workflow --skill new-diagram安装后在 Claude Code 中输入/new-diagram确认已加载。
详细介绍
创建新的 TikZ 图示
从 templates/tikz-snippets/ 搭建图示,依据预防规则进行检查,编译为独立文档,使用测量依据引用运行审查,并反复修改,直到图示通过。请使用此流程,不要从头编写 TikZ;这些代码片段内置了 tikz-prevention.md 要求的不变规则。
输入
$0(可选)——代码片段名称(不带.tex)。必须是templates/tikz-snippets/中的一个文件名。如果省略,请列出图库并让用户选择。$1(可选)——输出路径。默认为Figures/new_diagram.tex——如果此目标已存在,请先询问用户,以免覆盖文件。
工作流程
步骤 1:选择代码片段
ls -1 templates/tikz-snippets/*.tex
当前图库(说明见 templates/tikz-snippets/README.md):
dag-basic— 3 节点因果 DAG(X → Y,带混杂因素 U)dag-mediation— X → M → Y,带直接路径did-two-period— 两期双重差分event-study— 事件时间系数及 95% 置信区间timeline— 带错开事件的水平时间线regression-scatter— 散点图 + OLS 拟合 + 置信带flowchart-3step— 带判定菱形的垂直流程supply-demand— 带需求曲线移动的供需图
如果 $0 不是其中之一,或未提供,请询问用户要使用哪一个。
步骤 2:将代码片段复制到输出路径
SRC="templates/tikz-snippets/$0.tex"
DST="${1:-Figures/new_diagram.tex}"
# Confirm before overwriting
if [ -f "$DST" ]; then
echo "Output path already exists: $DST"
# Ask the user whether to overwrite. Do NOT clobber silently.
fi
mkdir -p "$(dirname "$DST")"
cp "$SRC" "$DST"
步骤 3:根据用户意图编辑内容
询问用户图示应展示什么。使用 Edit 工具编辑 $DST:
- 更新顶部的注释块,使意图句符合用户目标。
- 如果坐标发生变化,更新坐标映射注释。
- 重命名节点并编辑标签。除非含义确实发生变化,否则保留节点样式(
dag-node、flow-node等)。 - 不要在 tikzpicture 选项中添加单独的
scale=X。坐标会缩小,文本不会——这会导致元素碰撞。允许的形式:scale=X, every node/.style={scale=X}或scale=X, transform shape。完整规则见tikz-prevention.mdP3,关于scale=1.1的惯例见tikz-visual-quality.md。 - 每个新边标签都必须带有方向关键词(
above、below、left、right、above left等)。单独使用midway只是路径位置,并非方向——这违反 P4。
步骤 4:预防规则预检查(必须执行)
运行 /extract-tikz 使用的同一个共享 Python 检查器——这是唯一能在两项技能中一致执行 P3 和 P4 的工具:
python3 scripts/check-tikz-prevention.py "$DST"
- 退出码
0→ 通过,继续。 - 退出码
1→ 存在违规(stderr 会报告行号、规则和代码片段)。修复$DST并重新运行,直到违规数为零。 - 退出码
2→ 用法错误(例如缺少文件)。
不要在命令中内联重新实现 grep。Python 检查器能正确处理多行 \begin{tikzpicture}[...] 选项和多行 \draw ... node {...} 跨行内容,而按行处理的 grep 无法识别这些情况。
步骤 5:编译为独立文档
所有代码片段都使用 \documentclass[border=4pt]{standalone},因此无需 Beamer 框架,也无需 Preambles/header.tex 即可编译:
cd "$(dirname "$DST")"
xelatex -interaction=nonstopmode "$(basename "$DST")" > /tmp/tikz-compile.log 2>&1
检查退出码和 *.pdf 文件大小。如果编译失败,请读取 /tmp/tikz-compile.log 并修复 .tex 源文件。
步骤 6:通过 tikz-reviewer 进行视觉审查
使用 Task(subagent_type=tikz-reviewer)启动 tikz-reviewer Agent。提供 .tex 源文件和编译后的 .pdf 路径。现在,审查者必须为每项 CRITICAL/MAJOR 发现引用 tikz-measurement.md 中的检查项和公式——含糊的报告会被驳回。
循环执行:
- 如果结果为
APPROVED→ 进入步骤 7。 - 如果结果为
NEEDS REVISION或REJECTED→ 修改$DST,重新运行步骤 4(预防规则预检查)、重新编译(步骤 5),并再次调用审查者。
最多 5 轮。 如果经过 5 轮后,审查者仍报告 CRITICAL 问题,请向用户说明情况——可能需要重新设计代码片段或调整请求内容,而不只是微调。
第 7 步:可选 — 转换为 SVG,以用于 Quarto
如果用户计划在 Quarto 幻灯片中使用该图(而不只是用于 Beamer),请将编译后的 PDF 转换为 SVG:
pdf2svg "${DST%.tex}.pdf" "${DST%.tex}.svg" 1
基于片段的图表只有一页,因此这里使用与 .tex 同名的单个 .svg 文件是正确的。这与 /extract-tikz 不同,后者会从 Figures/LectureN/extract_tikz.tex 主文件生成多页 PDF,并将输出命名为 tikz_exact_00.svg, tikz_exact_01.svg, ...(PDF 页码从 1 开始,而文件名从 0 开始)。如果需要用于逐页显示的多页输出,请改用 /extract-tikz。
第 8 步:清理构建产物
cd "$(dirname "$DST")"
rm -f *.aux *.log *.out *.synctex.gz
保留 .pdf 和 .svg(如果已生成)。下游工具会使用它们。
第 9 步:报告
打印摘要:
- 使用的片段 → 输出路径
- 审核者的结论和轮数
.pdf大小和页数.svg路径(如果已生成)- 提醒在目标 Beamer/Quarto 文件中使用
\input或\includegraphics插入该图
为什么从片段开始?
从头编写 TikZ 往往会导致元素重叠,因为作者无法通过视觉估算曲线和标签的位置。片段内置了 tikz-prevention.md 要求的不变量——坐标映射、明确的节点尺寸、带方向的边标签——因此图表按设计即可通过预防性预检。你始终可以偏离片段;相关规则仍然适用。
交叉引用
.claude/rules/tikz-prevention.md— P1–P6 编写规则。.claude/rules/tikz-measurement.md— 审核者引用公式的六轮协议。.claude/rules/tikz-visual-quality.md— 通用视觉标准。.claude/skills/extract-tikz/SKILL.md— 从现有 Beamer 幻灯片中提取 TikZ,而不是重新创建。templates/tikz-snippets/README.md— 片段目录和改编指南。