voice-style

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Voice & Style

语声与文风

Overview

概述

Record the book's voice and surface conventions in
style-sheet.md
, then enforce them. The style sheet is the copyeditor's record: dialect and spelling choices, capitalisation, hyphenation, numbers, dialogue punctuation, a one-line voice summary per major speaker, and a watch list. Its frontmatter is machine-readable, and
story prose
counts violations and prose tics in every chapter. Use this skill so voice stays the same across chapters, drafting sessions, and agents.
先在
style-sheet.md
中记录本书的语声与表层规范,然后执行这些规范。样式表是文字编辑的记录:包括方言与拼写选择、大小写、连字符用法、数字格式、对话标点、每个主要说话者的一行语声摘要,以及需要关注的词语清单。其 frontmatter 可由机器读取,
story prose
会统计每章中违反规范的内容和行文癖习。使用此 skill 可确保各章节、不同写作场次及不同 Agent 之间保持相同的语声。

Prerequisites

前置条件

A story project with
story.md
in the root.
story init
scaffolds
style-sheet.md
; older projects can add it with
story init '<title>' --dir . --force
, which only adds missing files, or by copying
references/style-sheet-guide.md
's frontmatter block by hand.
准备一个根目录中包含
story.md
的故事项目。
story init
会创建
style-sheet.md
;旧项目可以使用
story init '<title>' --dir . --force
添加该文件,此命令只会补充缺失文件,也可以手动复制
references/style-sheet-guide.md
中的 frontmatter 区块。

Language

语言

Read
language
in
story.md
(a BCP 47 tag; a missing field means
en
). The style sheet records the conventions of that language, and the voice description is written about prose in it.
dialect: british
and
american
and the built-in word lists behind filter words, -ly adverbs, and said-bookisms are English. For another language, set
dialect: unspecified
, record spelling variants as
preferred
entries, and settle dialogue and punctuation with
../line-editing/references/language-conventions.md
. When
story prose
or
story voices
reports a check skipped for the book's language, do that pass by reading (see
references/prose-checks.md
, Other languages).
读取
story.md
中的
language
(一个 BCP 47 标签;缺少该字段意味着
en
)。样式表记录该语言的约定,而语声描述针对的是使用该语言写成的文字。
dialect: british
和
american
以及 filter words、-ly adverbs 和 said-bookisms 背后的内置词表均适用于英语。对于其他语言,请设置
dialect: unspecified
,将拼写变体记录为
preferred
条目,并根据
../line-editing/references/language-conventions.md
确定对白和标点约定。如果
story prose
或
story voices
报告因本书所用语言而跳过某项检查,请通过阅读完成该检查(参见
references/prose-checks.md
中的“其他语言”)。

When to Use

使用时机

  • Starting a project, once the first chapter or a writing sample exists
  • Before drafting when voice has drifted between chapters or sessions
  • When a copyedit pass needs a style decision recorded (the copyedit itself belongs to the
    line-editing
    skill, which reads this file)
  • When the user wants a mechanical prose check before sharing a draft
  • Recording each character's voice (the style sheet's Character Voices line,
    voice-words
    ,
    voice-avoid
    ) and checking it with
    story voices
  • NOT for character personality or arc (use
    character-management
    )
  • NOT for scene-level craft such as deep POV or subtext (use
    scene-craft
    )
  • NOT for the line-by-line prose pass itself (line edit, copyedit, read-aloud, proof): use the
    line-editing
    skill, which reads this style sheet and runs these checks
  • NOT for rewriting dialogue so the voices sound distinct when everyone sounds the same: use the
    line-editing
    skill's voice differentiation pass, which follows the voices recorded here
  • 项目启动时,在第一章或写作样本已经存在后
  • 起草前,如果章节或写作场次之间发生了语声漂移
  • 当一次文字编辑需要记录样式决定时(实际文字编辑属于
    line-editing
    skill,该 skill 会读取此文件)
  • 当用户希望在分享草稿前进行机械化行文检查时
  • 记录每个角色的声音(样式表中的 Character Voices 行、
    voice-words
    、
    voice-avoid
    ),并使用
    story voices
    检查
  • 不适用于角色性格或成长弧(请使用
    character-management
    )
  • 不适用于深层 POV、潜台词等场景级写作技巧(请使用
    scene-craft
    )
  • 不适用于逐行行文处理本身(行文编辑、文字编辑、朗读、校样):请使用
    line-editing
    skill,该 skill 会读取此样式表并运行这些检查
  • 不适用于重写对白以使各角色的声音彼此有别:当所有角色听起来都相同时,请使用
    line-editing
    skill 的角色声音区分流程,该流程遵循此处记录的声音规范

Workflow

工作流

1. Build or update the style sheet

1. 构建或更新样式表

  1. Read
    story.md
    (genre, POV, tense, Tone & Style),
    style-sheet.md
    , and two or three drafted chapters or a sample the user supplies. If there is no prose yet, ask the user for a paragraph that sounds right or three published books whose voice is close.
  2. Fill the sections in
    style-sheet.md
    following
    references/style-sheet-guide.md
    . Record decisions the prose already makes; do not invent new ones silently. When the draft is inconsistent (both grey and gray), ask the user which form wins.
  3. Set the frontmatter:
    • dialect: british | american | unspecified
      (
      unspecified
      for a book not in English)
    • one
      preferred
      entry per variant:
      use
      is the house form,
      avoid
      the form to flag. Repeat entries for several variants of one word.
    • watch-words
      : words or phrases this book overuses
    • allow-words
      : built-in filter words, adverbs, or dialect spellings this book uses on purpose (a proper noun like Harbor Street in a British book)
    • samples
      : files or folders of the author's own prose that sound right, relative to the project folder: an earlier book (
      ../book-one
      ) or chapters the author has approved, each file named on its own (
      chapters/chapter-01.md
      , never
      chapters/
      , which warns
      style-sample-own-chapters
      ). A listed chapter is the measure, so
      story prose
      does not compare it. Ask the user which; never list prose the agent drafted and the author has not approved, or the profile measures the agent's voice. With at least 2,000 words of narration,
      story prose
      compares each chapter with the samples instead of fixed limits
  4. Character Voices entries summarise each character file's Voice & Speech Patterns section in one line and link to it. Record words a speaker reaches for in the character file's
    voice-words
    list and words they would never say in
    voice-avoid
    , so
    story voices
    can check them. The character file is canon; if the two disagree, fix the style sheet, or ask the user before changing the character.
  1. 读取
    story.md
    (
    genre
    、
    POV
    、
    tense
    、
    Tone & Style
    )、
    style-sheet.md
    ,以及两三个已起草的章节或用户提供的样本。如果尚无正文,请用户提供一段听起来符合预期的文字,或三本语声接近的已出版图书。
  2. 按照
    references/style-sheet-guide.md
    填写
    style-sheet.md
    中的各个部分。记录正文已经做出的决定;不要在未说明的情况下自行制定新决定。如果草稿前后不一致,同时出现 grey 和 gray,请询问用户采用哪一种形式。
  3. 设置 frontmatter:
    • dialect: british | american | unspecified
      (对于非英语图书使用
      unspecified
      )
    • 每个变体设置一条
      preferred
      条目:
      use
      是项目采用的统一形式,
      avoid
      是需要标记的形式。同一个词存在多个变体时,重复添加条目
    • watch-words
      :本书过度使用的词或短语
    • allow-words
      :本书有意使用的内置 filter words、副词或方言拼写(例如英式图书中的专有名词 Harbor Street)
    • samples
      :相对于项目文件夹、听起来符合作者风格的作者本人文字文件或文件夹,例如作者之前的图书(
      ../book-one
      )或作者认可的章节;每个文件都必须单独列出(
      chapters/chapter-01.md
      ,绝不能列出
      chapters/
      ,否则会触发
      style-sample-own-chapters
      警告)。被列出的章节就是衡量基准,因此
      story prose
      不会将该章节与样本进行比较。询问用户要使用哪些样本;绝不要列入 Agent 起草且作者尚未认可的文字,否则风格画像衡量的将是 Agent 的语声。当样本叙述文字至少达到 2,000 词时,
      story prose
      会将每个章节与样本进行比较,而不是使用固定阈值
  4. Character Voices 条目用一行概括每个角色文件中的 Voice & Speech Patterns 部分,并链接到该文件。在角色文件的
    voice-words
    列表中记录该说话者惯用的词,在
    voice-avoid
    中记录其绝不会说的词,以便
    story voices
    进行检查。角色文件是权威内容(canon);如果二者不一致,请修正样式表,或在修改角色之前询问用户。

2. Draft and revise against it

2. 依据样式表起草和修改

  • chapter-writing
    and
    discovery-drafting
    read
    style-sheet.md
    before drafting. Write in the recorded voice, use the house spellings, and give each speaker the recorded patterns.
  • When a new convention appears mid-draft (a new invented term, a number style), add it to the style sheet in the same change.
  • chapter-writing
    和
    discovery-drafting
    会在起草前读取
    style-sheet.md
    。按照记录的语声进行写作,使用项目统一拼写,并让每个说话者遵循已记录的表达模式。
  • 如果起草过程中出现新的约定(例如新造术语或数字格式),请在同一次修改中将它添加到样式表。

3. Run the prose check

3. 运行行文检查

shell
story prose .
The report lists, per chapter: sentence count, average and longest length, and spread; filter words and -ly adverbs per 1,000 narration words (dialogue is excluded); plain and said-bookism dialogue tags; words echoed within 30 words; watch-word counts; and avoided spellings. Across the manuscript it lists repeated 4-word phrases and character first names that readers could confuse. Warnings are advisory. The command exits 0 unless a file cannot be read, a
story.md
severity
entry promotes a warning to an error, or the command line is wrong, such as
--baseline
with no
samples
(exit 2). See
references/prose-checks.md
for what each count means and how to respond.
When the style sheet lists
samples
, the report opens with a profile of the author's own prose, and chapters that drift from it warn (
prose-baseline-sentences
,
-paragraphs
,
-dialogue
,
-filter-words
,
-adverbs
) in place of the fixed filter-word and adverb limits. Treat a drift as a prompt to reread the chapter, not a rule. Tell the user where it drifts and ask whether it is deliberate: a fight scene runs short, a quiet chapter long. Never rewrite a chapter just to move a number back inside its tolerance.
To lint a passage that is not in a chapter file yet (a draft scene, a proposed rewrite), pipe it in with
-
in place of the path:
story prose - < draft-scene.md
. Run it from the project folder, or add
--path <project>
, so the style sheet applies.
story voices -
does the same for dialogue.
shell
story prose .
报告按章节列出:句子数量、平均句长、最长句长及其分布;每 1,000 个叙述词中的 filter words 和 -ly 副词数量(不包括对白);普通型与 said-bookism 型对话标签;在 30 词范围内重复出现的词;watch-word 计数;以及应避免的拼写。整部手稿中还会列出重复出现的 4 词短语,以及读者可能混淆的角色名。警告仅供参考。除非文件无法读取、
story.md
的
severity
条目将警告提升为错误,或命令行有误(例如在没有
samples
的情况下使用
--baseline
,退出码为 2),否则命令退出码为 0。有关每项计数的含义及处理方式,请参阅
references/prose-checks.md
。
当样式表列出
samples
时,报告开头会显示作者本人文字的风格画像;偏离样本的章节会触发警告(
prose-baseline-sentences
、
-paragraphs
、
-dialogue
、
-filter-words
、
-adverbs
),以替代固定的 filter words 和副词阈值。应将偏离视为重读章节的提示,而不是硬性规则。指出偏离发生的位置,并询问这是否是有意为之,例如打斗场景的句子较短,而安静章节的句子较长。绝不要仅为了让数值回到容差范围内而重写章节。
要对尚未写入章节文件的段落(草稿场景、拟议的改写版本)执行 lint,请用
-
代替路径并通过管道传入:
story prose - < draft-scene.md
。从项目文件夹运行该命令,或添加
--path <project>
,以便应用样式表。
story voices -
对对白执行相同操作。

4. Run the dialogue voice check

4. 运行对白声音检查

shell
story voices .
story voices
fingerprints each character's attributed dialogue and warns about a
voice-avoid
word said, a
voice-words
entry never said, and two characters who may sound alike. A line counts only when the narration names its speaker by a speech verb, or names one character in the paragraph. Pronoun tags (
she said
) are never attributed, so in close third person the POV character is often under-counted; when that matters, name the tags in a sample chapter and rerun.
story voices --help
describes the command and, when
story-maintenance
is installed, the voices section of
../story-maintenance/references/continuity-checks.md
gives the full attribution rules and thresholds.
When two voices blur, differentiate them on more than one axis (sentence length, contractions, vocabulary, what they ask about) and see
dialogue-subtext.md
in the
scene-craft
skill for the tag-swap test.
Attribution and contraction rates are built around English quote marks, speech verbs, and contractions. For a book in another language, if the report attributes few or none of the lines the book has, or skips the check for the language, compare the voices by reading: the levers are the same (sentence length, vocabulary, forms of address, what each avoids saying).
shell
story voices .
story voices
会为每个角色已归属的对白建立指纹,并警告以下情况:角色说出了
voice-avoid
中的词、从未说过
voice-words
中的词,以及两个角色可能听起来相似。只有当叙述通过言语动词点明说话者,或在段落中提到某一角色时,该行才会计入。代词式标签(
she said
)永远不会归属到具体角色,因此在第三人称限知视角中,POV 角色往往未被计入;这一点很重要时,请在样本章节中明确标出说话者并重新运行。
story voices --help
会介绍该命令;如果已安装
story-maintenance
,
../story-maintenance/references/continuity-checks.md
的 voices 部分给出了完整的归属规则和阈值。
当两种声音难以区分时,应在多个维度上进行区分,例如句子长度、缩写、词汇以及人物关注的问题;有关标签互换测试,请参阅
scene-craft
skill 中的
dialogue-subtext.md
。
归属率和缩写率规则是围绕英语引号、言语动词和缩写形式构建的。如果图书使用其他语言,而报告只能归属少量甚至无法归属任何对白,或者因语言原因跳过检查,请通过阅读来比较各角色的声音。可调用的维度仍然相同,包括句子长度、词汇、称谓方式,以及每个角色避免表达的内容。

5. Act on the findings

5. 根据检查结果采取行动

  1. Fix avoided spellings everywhere; they are always errors of consistency.
  2. Treat rates, echoes, and repeated phrases as prompts to reread the passage, not orders. Keep a flagged word when it is the right word, and add it to
    allow-words
    when the book uses it deliberately.
  3. For uniform-rhythm warnings, revise sentence length by intent (short for impact, long for flow), not by formula.
  4. For similar names, ask the user before renaming; check replacements with
    story names '<Candidate>'
    . Preview the rename with
    story rename character <id> '<New Name>' --prose --dry-run
    , show the user the replacements, then run it without
    --dry-run
    , so the chapter text follows as well as the references. Without
    --prose
    the prose keeps the old name. Check the matches it leaves as written as the
    character-management
    skill's rename steps describe.
  5. For
    story voices
    warnings, revise the dialogue or update the character's
    voice-words
    /
    voice-avoid
    when the draft has found a better voice; ask the user before changing canon.
  6. Present a summary: what changed, what was kept on purpose, and any style-sheet updates. For a full line edit, copyedit, or proof, hand off to the
    line-editing
    skill.
  1. 在所有位置修正应避免的拼写;这些始终属于一致性错误。
  2. 将比率、重复回响和重复短语视为重读段落的提示,而不是指令。如果被标记的词正是合适的词,应予以保留;如果本书有意使用该词,则将其添加到
    allow-words
    。
  3. 对于节奏过于一致的警告,应根据意图调整句子长度(短句用于强调,长句用于流畅表达),而不是套用固定公式。
  4. 对于相似的角色名,请在重命名前询问用户;使用
    story names '<Candidate>'
    检查替换候选。使用
    story rename character <id> '<New Name>' --prose --dry-run
    预览重命名,向用户展示替换结果,然后移除
    --dry-run
    再运行一次,使章节正文和引用都同步更新。如果未使用
    --prose
    ,正文仍会保留旧名。按照
    character-management
    skill 的重命名步骤,检查命令保留且未作改动的匹配项。
  5. 对于
    story voices
    的警告,如果草稿呈现出了更合适的角色声音,可以修改对白或更新角色的
    voice-words
    /
    voice-avoid
    ;修改 canon 之前请询问用户。
  6. 提供总结:进行了哪些修改、哪些内容是有意保留的,以及样式表有哪些更新。如需进行完整的逐行编辑、文字编辑或校样,请移交给
    line-editing
    skill。

CLI Maintenance

CLI 维护

Use the Story CLI when it is available. If
story
is not installed, use the bundled fallback
node ../story-maintenance/scripts/story.js
with the same arguments. Use
node <checkout>/bin/story.js
instead only when the user names a Story Skills repository checkout or you are working in one. Write the script as an absolute path (resolve the fallback relative to this skill folder) and run it from the folder you would run
story
from, so
.
and other relative paths keep their meaning. Use Node, not Bun or a package script: Bun would load that folder's
bunfig.toml
(which can run code) and
.env
, and a package script runs from the checkout's root. If no CLI is available, apply the checks in
references/prose-checks.md
by reading.
After editing the style sheet or revising prose:
shell
story reindex .
story wordcount . --write
story check .
story prose .
story voices .
Story CLI 可用时,请使用 Story CLI。如果未安装
story
,则使用随附的回退脚本
node ../story-maintenance/scripts/story.js
,并传入相同参数。只有当用户明确指定 Story Skills 仓库检出目录,或你正在该目录中工作时,才改用
node <checkout>/bin/story.js
。以绝对路径指定脚本(相对于此 skill 文件夹解析回退脚本),并从原本运行
story
的文件夹执行它,从而保持
.
和其他相对路径的含义。请使用 Node,不要使用 Bun 或 package script:Bun 会加载该文件夹中的
bunfig.toml
(其中可以运行代码)和
.env
,而 package script 会从检出目录的根目录运行。如果没有任何可用 CLI,则通过阅读
references/prose-checks.md
手动执行其中的检查。
修改样式表或修订文字后:
shell
story reindex .
story wordcount . --write
story check .
story prose .
story voices .

Reference Files

参考文件

  • references/style-sheet-guide.md
    - What goes in each style-sheet section, the frontmatter format, and how to extract a voice description from sample prose
  • references/prose-checks.md
    - What each
    story prose
    count measures, its threshold, when to keep the flagged text, and what to do for a book not in English
  • ../line-editing/references/language-conventions.md
    - Dialogue and punctuation conventions by language, for the style sheet's Dialogue And Punctuation section
  • references/style-sheet-guide.md
    - 样式表各部分应包含的内容、frontmatter 格式,以及如何从样本文字中提取语声描述
  • references/prose-checks.md
    -
    story prose
    中每项计数的含义、对应阈值、何时保留被标记的文字,以及如何处理非英语图书
  • ../line-editing/references/language-conventions.md
    - 按语言划分的对白和标点约定,用于样式表的 Dialogue And Punctuation 部分

Shared Conventions

共享约定

Every story skill follows the shared conventions in
../story-maintenance/references/conventions.md
, resolved relative to this skill folder. Read it before creating, renaming, or linking story files. If that file is missing because this skill was installed without
story-maintenance
, the essentials are: kebab-case ids and filenames, YAML frontmatter on every story-project file,
_index.md
registry tables that
story reindex
rebuilds (never edit them by hand), bidirectional links between entities,
characters
for who is on the page and
mentions
for who is only referred to,
status: deceased
plus
died-in: chapter-{NN}
for deaths, and no project-local generator or build scripts (run only the installed or bundled Story CLI).
每个 story skill 都遵循
../story-maintenance/references/conventions.md
中的共享约定,其路径相对于此 skill 文件夹解析。在创建、重命名或链接故事文件之前,请先阅读该文件。如果安装此 skill 时未同时安装
story-maintenance
,导致该文件缺失,则需要了解以下要点:ID 和文件名使用 kebab-case;每个故事项目文件都包含 YAML frontmatter;
_index.md
注册表由
story reindex
重新构建(绝不要手动编辑);实体之间使用双向链接;
characters
用于页面上实际出现的角色,
mentions
用于仅被提及的角色;角色死亡时使用
status: deceased
,并配合
died-in: chapter-{NN}
;项目内不得包含本地生成器或构建脚本(只运行已安装或随附的 Story CLI)。