Communitygithub.com

cdesiles/design-doc

构建一个可打印的文档——报告、备忘录、提案、信件、单页摘要——作为一份自包含的 HTML 文件,能干净地打印到 A4 或 Letter 纸。在制作任何可交付文档前请先阅读。

design-doc 是什么?

该技能帮助开发者使用 HTML 和 CSS 构建格式严谨、可打印的文档。它支持两种分页模式:连续流动(默认)用于报告、信件等长度不确定的内容,以及固定页面用于简历、传单等需要精确控制页数的场景。技能提供了完整的 CSS 规则,包括 A4/Letter 纸张尺寸设置、字体排版规范(正文字号 11-12pt,行长 60-75 字符)、语义化 HTML 结构(h1-h3、表格、图表等),以及通过 `design-verify` 工具进行打印预览检查的流程。它强调真实内容优先于装饰性图片,并禁止在没有明确授权的情况下改写用户原文。该技能适用于 Claude Code、Cline 等 AI 编码代理,帮助它们生成可直接交付的打印文档。

兼容平台~Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/cdesiles/opencode-kit/tree/HEAD/skills/design-doc

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

文档

文档是按顺序阅读并打印在纸上的。这两个事实约束了布局:单一的文本列、真实的页面分隔,以及不依赖悬停的任何内容。

先决定分页方式

  • 流动布局(默认)—— 一个连续的文本流;浏览器的打印引擎将其分页。适用于报告、备忘录、信件、论文等长度不固定的内容。
  • 固定页面 —— 明确的 <section class="page"> 块,每页一张。适用于页面数量本身就是设计的场景:一页简历、双面传单、证书、海报。

如果用户要求“两页”,则意味着固定页面。如果用户要求“一份报告”,则意味着流动布局。当确实不明确时,请询问——构建错误的方式会浪费整个文档。

几何尺寸

在 <head> 中链接 token 文件,如果文档使用了其组件也链接 components.css,并使用其中的变量来设置颜色、字体和间距。以下规则仅适用于纸张几何尺寸:

@page { size: A4; margin: 0; }        /* 或者:size: letter; */
body  { margin: 0; background: white; }
.page { width: 210mm; min-height: 297mm; padding: 24mm 22mm; box-sizing: border-box; }
.page + .page { break-before: page; }

@media screen {
  body { background: gainsboro; padding: 32px 0; }
  .page { margin: 0 auto 24px; box-shadow: 0 2px 24px color-mix(in srgb, black 12%, transparent); }
}

对于流动文档,去掉固定的 .page,设置 @page { margin: 22mm } 并使用 max-width: 66ch 的列宽。纸张尺寸:除非用户明确是美国人则用 Letter,否则用 A4。如果用户提供了尺寸,则用他们的。

字体

  • 正文 11–12pt,行高 1.5–1.6。对于任何需要阅读的内容,永远不要低于 10.5pt。
  • 行宽 60–75 个字符。比这更宽,眼睛会失去对行的追踪。
  • 正文用一种字体族,标题可选用第二种。如果存在设计系统,则与相同的配对保持一致。
  • 标题按比例缩放,顶层标题明显更大——28–36pt——而不是 14pt 加粗。
  • 强调通过字重和间距实现,而不是仅靠颜色。一份打印为灰度模式的文档仍然必须可读。

结构

  • 使用真正的语义元素:h1–h3、p、ul、table、figure、blockquote。不要用带样式的 div。
  • 如果文档超过两页,通过 @page 计数器添加页码:
    @page { @bottom-center { content: counter(page); } }
    
    支持不完整——在每个固定页面上添加脚注样式的数字是一种可靠的备选方案。
  • 表格:数字右对齐,文本左对齐,使用细线而非完整边框,通过 thead { display: table-header-group } 在跨页时重复表头。
  • 避免对超过页面三分之一高度的元素使用 break-inside: avoid。
  • 图表需要带有说明文字。没有说明文字,就不要放图表。

内容

保留用户的原话。你可以在被要求时进行删减和重新排序;但不可以改写。如果一个章节是空的因为用户还没写,则留下一个明确标记的空白,而不是编造文本。

不要使用库存照片,也不要用仅作为装饰的生成图像。当文档需要真实图片时,如果 FLUX 工具可用则用其生成;否则使用一个占位框,其中用等宽字体注明该放置的内容。

收尾

以打印宽度运行 design-verify 并查看截图:

node ~/.config/opencode/lib/design/verify.mjs "design/Report.html" \
  --width 900 --height 1200 --full --out design/.verify/report.png

检查:文本是否在页面边缘被裁剪、标题是否孤悬在页面底部、表格是否拆分不当、以及任何水平溢出——这在打印中意味着内容丢失在右边缘之外。

然后自己打印成 PDF 一次(Cmd-P,另存为 PDF),以确认页面数量以及在真实纸张大小下没有发生移位。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

相关技能