模具:全文(-f)
-f 把完整文稿铸成一张可连续阅读的长 PNG。它的设计对象是版式,不是文字:原稿中的可见字句逐块只出现一次,字符与先后顺序不变;标题、强调、留白与字重只改变读者怎样看见它们。
执行时依次 Read references/taste.md 与 assets/full_template.html。默认生成图数量为 0。原稿自带图片时,补读 references/image-generation.md 的资产身份与来源保真部分;图片仍是 source,不得重生成、重绘或换成概念配图。
读者承诺
- **第一眼:**看见纯白页面、深黑正文、克制灰阶和非平均留白形成的清楚阅读秩序。
- **开始读:**标题、正文、引用、列表、代码与脚注各有清楚层级,但没有额外导语、金句卡或解释框打断作者。
- **读到底:**能逐段回到原稿核对,没有少字、改字、调序、合并、重复或补写。
原文边界
以下变化属于排版,允许发生:
- 把原稿已有标题、二三级标题映射到
h1、h2、h3。 - 把原稿已有粗体、斜体、引用、列表、代码、表格、脚注映射到对应 HTML 语义标签。
- 给某个原稿块添加
.full-key、.opening等样式类,改变字号、字重、颜色、行距、边线或上下留白。 - 为 HTML 安全转义字符,只要浏览器读回的
textContent与原稿块完全相同。
以下变化属于改稿,禁止发生:
- 摘要、润色、纠错、改标点、同义改写、删节、合并段落、调换顺序。
- 从正文抽一句再复制成题记、金句、侧栏或结尾大字。
- 原稿没有标题时补标题;没有导语、小结或过渡句时补写这些内容。
- 为了版面整齐截短列表、表格、代码、脚注或来源说明。
- 用 CSS
order、浮动或定位让视觉阅读顺序偏离 DOM 与原稿顺序。
原稿已有标题只出现一次:它可以成为大标题,但不能在正文再重复。原稿没有显式层级时,可以给现有文本块不同视觉权重,不能以设计判断改写其文字身份。
来源锁与原文块账本
渲染前锁定一份本地来源:本地文件直接记录路径与 SHA-256;URL 正文或粘贴文本先原样保存到本任务 /tmp 目录,再记录 SHA-256。来源文件在交付前不得变化。
建立 source-ledger.json:每一项对应一个最终可见文本块。块内文字逐字符保留,块的数组顺序就是阅读顺序。
账本只做一种规范化:把 CRLF / CR 行尾转成浏览器 textContent 使用的 LF。不得 trim、折叠连续空格或改全半角;source_sha256 始终针对未规范化的原始来源文件。
{
"version": 1,
"source_sha256": "<64 lowercase hex characters>",
"blocks": [
{ "id": "b001", "text": "原稿标题" },
{ "id": "b002", "text": "第一段原文,标点与空格都保留。" }
]
}HTML 中每个文本块使用同一个 ID:
<main class="full-document">
<h1 data-source-block="b001">原稿标题</h1>
<p data-source-block="b002">第一段原文,标点与空格都保留。</p>
</main>data-source-block只放在叶子文本块上,不能嵌套。- 行内
strong、em、code、链接可以位于块内;它们的合并textContent仍须与 ledger 完全一致。 - 列表逐项登记;表格逐个表头与单元格登记;代码块、图注和脚注各自登记。
.full-document内所有可见文字都必须属于某个原文块。纯布局容器、分隔线与无文字来源图片可以不登记。- 来源图片使用本地绝对路径、原始比例和语义化
alt;原稿有图注时,图注本身是一个原文块。
全文校验工具
填完模板、截图之前运行:
bun assets/verify-full-text.ts \
/tmp/<task>/source-ledger.json \
/tmp/<task>/full.html \
/tmp/<task>/source.txt工具同时核对来源 SHA-256、块 ID、块数量、字符、顺序、重复、嵌套块,以及 .full-document 中未登记的可见文字。任一项不一致就停止;不能用人工目测覆盖失败。
验收反例固定为四类:改单字、调序、漏块、重复块。四类中的任意一种都必须让校验工具退出非 0。
版式母语
-f是白底黑字的长文阅读面:画布固定为纯白#FFFFFF;普通正文为深中性黑#171717;辅助文字为#525252;弱信息为#7A7A7A;规则线为#E5E5E3。暗朱红#A74432只承担少量章节分隔与强调,不成为正文主色。- title、headline、章节标题、正文、强调、图注、表头与署名统一优先使用本机已安装的
KingHwa_OldSong。若本机没有该字体,浏览器自动回退:正文落到Songti SC、STSong、Noto Serif CJK SC、serif;标题类文字落到PingFang SC、Hiragino Sans GB、Microsoft YaHei、系统 sans。不得联网下载、临时安装或通过远程@font-face补齐。code、pre与 Footer 来源行保留等宽字体,这是字符对齐有语义的唯一例外。 - 1080px 成品的普通正文不小于
40px,行高为1.9,有效正文宽度约896px。正文段距保持36px;章节上方留白明显更大。铺陈段落可以收紧,不能通过缩小字号或压缩行距减少图片高度。 - 标题层级为
80/54/44px,开篇与重点段为44px/1.9。约 390px 手机显示宽度下,40px 正文约等效 14.4px;验收时同时看手机宽度预览与原尺寸切片。长图增高是放大文字的正常代价,不能为压缩高度缩字。 strong与.full-key用字重、暗朱红细线或浅色平面强调;不使用高亮荧光、渐变、发光、玻璃拟态或厚阴影。- 引用用细竖线和更松的行距;代码与表格用等宽字和浅中性灰平面;列表与引用保持
40px/1.9,不能降成小字;表格为34px,代码块与脚注为32px,图注为30px,这些辅助层级行高不低于1.7。 - 版面不放装饰插图、伪印章、英文大字水印、自动编号或模板口号。审美来自比例、字与空白。
assets/full_template.html 已提供固定视觉系统。{{CUSTOM_CSS}} 只用于适配特殊原稿结构,不能覆盖原文边界、把正文缩到不可读,或引入远程资源。
字体完成态看浏览器实际使用结果,不只看 CSS 字体栈:本机已安装 KingHwa_OldSong 时,普通正文、h1 title 与 h2 headline 的 platform font 都应解析到它;未安装时,正文和标题分别落到各自的本地默认栈即可继续。缺失首选字体本身不是失败,远程取字体才是失败。
HTML 表面
模板的正文入口只有一个:{{DOCUMENT_HTML}}。完整原稿按原顺序全部进入 .full-document;Footer 位于正文区之外,不参与原文块校验。
可用语义表面:
h1、h2、h3、p.openingstrong、em、.full-keyul、ol、blockquotepre、行内codetable、caption、th、td.source-figure、figcaption.footnotes、.footnote、.section-break
替换 {{DOCUMENT_HTML}}、{{CUSTOM_CSS}}、{{LOGO}} 与 {{SOURCE_LINE}} 后,HTML 中不能残留占位符。
截图与验收
bun assets/capture.ts /tmp/<task>/full.html <final.png> 1080 1600 fullpage交付条件:
- 全文校验 exit 0,报告的 expected/actual block 数相同。
- 来源文件的交付后 SHA-256 与账本记录相同。
- 生成图数量为
0;所有原稿图片均为本地source资产,完整、未裁坏、来源身份明确。 - DOM 无残留占位符、未登记文字、远程字体、远程图片、横向溢出或小于模板脚注等级的正文。
- 字体检查分别报告普通正文、title 与 headline 的实际 platform font:本机有
KingHwa_OldSong时三者都使用它;没有时报告各自命中的默认本地字体,不伪称首选字体已生效。 - 计算样式确认画布为
#FFFFFF、普通正文至少40px/1.9,正文与背景对比度高于15:1;只看模板源代码不算完成。 - PNG 宽 1080px、8-bit RGB;整图检查能看清层级与节奏,重叠切片覆盖全部高度并逐段核对无截断、遮挡、孤行或表格越界。
- 若全文高度超过单张 PNG 的可靠渲染上限,停止并说明边界;未经用户同意,不得以截断图片冒充全文,也不得擅自改成交付多张。