Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

写作规范 · 视觉元素

Note

本文档规定 SoulMem 文档(mdbook)中视觉元素的使用方式,是写作规范的第一部分。后续将补充术语、语体与工具链规范。

规范的目的不是限制创作,而是让“内容角色“与“视觉呈现“一一对应:同一个视觉元素永远表达同一种语义,读者不用猜、作者不用解释。

1. 两条总原则

  1. 语义优先:写作时先回答“这段内容是什么角色?“——注释?记忆示例?核心设计?技术陈述?——再选择对应的元素。禁止先写样式、再决定含义。
  2. 一物一用:同一个 markdown 元素不承担两个语义角色。CSS 只是把语义角色画出来,不是内容的来源。

推论:禁止“随手加样式“。任何视觉差异都必须对应一个语义角色,并登记在本规范中;新增视觉元素 = 新增语义角色,需要先在此定义、再投入使用。

2. 语体档位与视觉切换

SoulMem 文档存在两档语体,它们的切换必须有明确的视觉符号

档位内容语气视觉容器
叙事档示例、场景、对话、开场故事轻松,允许玩梗(小红/小白、早八)叙事容器(未加标签的块引用,独特背景,见 4.2 节)
定义档机制解释、术语定义、算法、字段说明陈述性、严谨,不用梗普通段落与代码

为什么需要视觉切换:两档语体都可能连续占据大段篇幅。没有视觉区分,读者无法判断当前在读的是“角色记忆的内容“还是“系统的机制说明“——而这两类内容的可信度完全不同:记忆示例是角色认定的事实,不是系统事实。

  • 规则 2.1:叙事档内容必须放进叙事容器(见 4.2)。裸的叙事段落视为违规。
  • 规则 2.2:定义档禁止玩梗、禁止网络用语、禁止打破第四面墙。需要轻松语气的内容一律归入叙事档。
  • 规则 2.3:打破第四面墙的句子(如“文档作者没有打错字“)只允许出现在 [!note] 澄清误会时,不得打断定义档的论证流。

3. 视觉元素总表

元素语义角色语法何时使用禁止
# H1页面标题# 标题每文件一个,与 SUMMARY 章节名一致每文件多于一个
## ~ ####分节标题##/###/####按层级分节跳级(如 ## 直接到 ####
普通段落定义档正文空行分隔机制、解释、论证叙事内容(须入容器)
加粗概念强调**词**关键词、术语首次强调标识符(用反引号)
斜体次要语气*词*定义档避免;叙事容器内角色台词可用定义档正文用斜体强调
反引号标识符/字段/命令`name`代码符号、字段名、命令概念词(用加粗)
列表枚举/步骤- 并列项、流程步骤单个条目也强行成列表
链接交叉引用[文字](相对路径)见第 5 节死链、指向不存在的章节
---分节分隔线---章内大分节(如三类记忆之间)装饰性使用
代码块代码/配置```代码、数据结构、配置伪代码用 mermaid
表格结构化对照表格语法字段对照、规则表叙事内容
mermaid```mermaid流程、结构、时序简单列表能说清的
<br>段落内硬换行<br>对话行换行作为间距(间距由 CSS 统一负责)
块引用说明类注释(标签卡片)或叙事容器(裸 >> 系列说明类用标签;叙事内容用裸块引用说明类内容裸 >;叙事内容加标签

4. 块引用与叙事容器

块引用(>)是本书使用最频繁、也最需要规范的组件。当前它同时承担“注释、记忆示例、设计强调“三个角色且视觉相同——必须拆分。

4.1 内置标签(mdbook 原生支持,已验证)

mdbook 0.5.4 支持 GitHub 风格的块引用标签,渲染为带图标和标题的卡片。已核对源码:仅以下五种(大小写不敏感),标签必须独占首行,后续行写内容:

> [!note]
> 给读者的补充说明、实现细节的旁注。

> [!important]
> 设计观点与原则的强调(如"一切特征和事件都属于记忆")。

> [!warning]
> 有争议的机制、已知取舍(如遗忘机制的争议)。

> [!tip]
> 使用建议、写作建议。

> [!caution]
> 容易踩坑之处。
标签语义角色示例场景
[!note]注释给读者的补充说明、实现细节旁注
[!important]核心设计设计原则与观点强调
[!warning]争议/警告有争议的机制、已知取舍
[!tip]建议使用建议、写作建议
[!caution]注意/陷阱容易踩坑之处

规则 4.1:所有“给读者的说明“类内容(注释、核心设计、争议、建议、注意)必须使用上述标签之一。未加标签的块引用一律视为叙事容器(见 4.2),只允许承载叙事档内容。

标题本地化(CSS):内置标签的标题固定渲染为英文(Note/Tip/…),且不支持 > [!note] 自定义标题 这种同行标题(会被当作字面文本)。中文化通过 CSS 实现,在 soulmem-theme.css 中加入:

/* 内置标签标题中文化(隐藏英文原文,用伪元素替换) */
.blockquote-tag-title {
    font-size: 0;
}
.blockquote-tag-title::after {
    font-size: 1rem;
    font-weight: 600;
}
.blockquote-tag-note .blockquote-tag-title::after      { content: "注释"; }
.blockquote-tag-tip .blockquote-tag-title::after       { content: "建议"; }
.blockquote-tag-important .blockquote-tag-title::after { content: "核心设计"; }
.blockquote-tag-warning .blockquote-tag-title::after   { content: "争议"; }
.blockquote-tag-caution .blockquote-tag-title::after   { content: "注意"; }

规则 4.2:已知五种标签之外的标签(如 > [!example])在 mdbook 0.5.4 中会原样显示为文本(已核对 pulldown-cmark 0.13.4 源码与官方测试),禁止使用。需要新组件时,先在本规范登记、再引入 preprocessor 等机制。

4.2 叙事容器(无需标签词)

叙事档内容的视觉切换符号 = 叙事容器:拥有独特背景、未加标签的块引用,与注释(靛蓝系)一眼可辨(暖色系)。

叙事容器不需要任何标签词。叙事内容本身就带有轻松的语气和例子说明的功能,强制要求固定的“示例/场景/对话“标签反而显得机械,还给读者造成冗余信息。作者按叙事自然书写即可;需要时可以用加粗短语(如 > **小白的麻辣烫**)当小标题,但那只是内容的一部分,不是规范要求。

规则 4.3:叙事档内容必须写在未加标签的块引用(叙事容器)中,叙事内容不得加内置标签。反过来说,未加标签的块引用一律按叙事容器渲染。

> 2026-07-12 中午,和用户在街角那家麻辣烫店,被辣到了。

> 三个月前,小白第一次去吃麻辣烫,被辣得一直喝水。

> **小红**:你看这个小白就是逊啦,才这么点就被辣到了。
> **小白**:辣?赛博生命的事,怎么能说辣呢?

规则 4.4:除叙事容器外,禁止其他用途的裸块引用(如引文);确有必要时先在本规范登记新组件,再投入使用。

视觉规格(明暗双适配,供 CSS 实现)

:root {
    --sm-example-bg: #fdf6ec;      /* 叙事容器底:暖色(琥珀 50) */
    --sm-example-border: #d97706;  /* 左边条:琥珀 600 */
}
.navy, .coal, .ayu, .rust {
    --sm-example-bg: #221c14;      /* 深色主题:暖黑 */
    --sm-example-border: #f59e0b;  /* 左边条:琥珀 500 */
}
/* 叙事容器 = 未加标签的块引用;带标签的是注释卡片 */
.content blockquote:not(.blockquote-tag) {
    background: var(--sm-example-bg);
    border-left-color: var(--sm-example-border);
}

边距、圆角与注释一致(1.5em、8px),仅底色与左边条不同。对话行内的加粗人名(**小红**)是内容,不是标签,不受本规则约束。

4.3 记忆示例的写法

记忆示例是叙事容器最常出现的形式(情境/语义/程序性记忆的实例)。约定:

  • 角色视角直接呈现记忆内容,形如一条真实的记忆记录;
  • 示例前在定义档说明“这是什么记忆“;容器内不再解释,保持纯净;
  • 记忆内容中的时间、地点用具体值(如 2026-07-12),不用“某年某月“占位——除非故事本身在强调模糊(如遗忘后的记忆)。

5. 章节引用规则(当前阶段)

背景:本书后续部分尚未定稿,且作者计划进行一次内容重组。因此现阶段:

规则 5.1:允许前向引用(“后续章节”),但必须使用统一句式,禁止自创说法。

场景规范句式
指向后续未定稿内容具体机制将在后续章节阐述。(可加主题词:“具体机制(如遮罩实现)将在后续章节阐述。”)
指向主题而非具体章节详见 [遗忘算法](../algorithm/forget.md) 相关章节。
指向已存在且稳定的章节相对链接:详见 [检索算法](../algorithm/retrieve.md)。

规则 5.2:禁止在正文写死具体章节标题或文件名作为“未来承诺“(如“将在《XX》章详述“)——重组会破坏这类引用。指向未来内容时用主题词,不用章节名。

规则 5.3:重组完成后,把前向引用逐步替换为相对链接,并启用 mdbook-linkcheck 校验所有链接(见第 7 节)。

6. 术语与专名(待补充)

  • 专名大小写固定:SoulMemLLMPPRSurrealDB(统一写法待确认后定稿);
  • 一物一名:同一概念全文统一叫法(如“角色 / 数字角色 / 赛博生命“择一为主),别名登记进术语表;
  • 首次出现给出中英对照,如 情境记忆(Situation / Episodic)

(术语表将在规范第二部分建立。)

7. 机械化检查(规划)

规范定稿后引入工具,把规则变成可自动检查的约束:

  • pangu:中英文之间自动加空格;
  • markdownlint-cli2:标题层级、空行、列表一致性;
  • mdbook-linkcheck:链接与锚点有效性(重组完成后启用);
  • CI 检查:专名大小写白名单、禁止 <br> 作间距(裸块引用是否违规依赖 review,暂不自动化)。

8. 生效范围与迁移

  • 新内容:自本规范生效起,按本规范写作。
  • 存量内容:分批迁移,优先级:
    1. 块引用分类(注释 → 标签卡片;记忆示例、对话 → 未加标签的叙事容器)——对阅读影响最大;
    2. > 清理;
    3. 专名与术语统一;
    4. 前向引用句式统一。
  • 本规范随写作迭代更新;新增任何视觉元素前,先在此登记