Skip to content

角色与台词

角色是剧本的核心。DraMark 使用 @ 标记来声明角色并进入角色台词模式。

角色声明

语法@<角色名>[<情绪/状态提示>]@<角色名>【<情绪/状态提示>】

重要:角色声明必须独占一行。

基本用法

dramark
@哈姆雷特
生存还是毁灭,这是个问题。

@奥菲利亚
殿下!

带情绪提示

dramark
@哈姆雷特 [犹豫地]
这是一个值得考虑的问题。

@克劳狄斯【愤怒】
给他点颜色看看!

使用方括号 [] 或中文方括号 【】 都可以。

角色名含空格

对于包含空格的角色名,推荐使用引号包裹:

dramark
@"冉 阿让"
我已经赎清了我的罪过。

@"让·瓦尔让" [低声]
没有人能理解我。

如果不使用引号,解析器会裁剪首尾空白,以下写法等价:

dramark
@  冉 阿让   [低声]
我有话要说。

行尾附着内容

角色声明行允许附加以下内容:

  • 行内 Tech Cue:<<...>>
  • 注释:% ...
dramark
@小帕 <<MIC=B1>>
你好!

@小塔 [兴奋地] % 注意语气
终于等到你了!

除上述附着内容外,声明行不得包含普通对白正文。

台词内容

一旦进入 CharacterBlock,后续的 CommonMark 区块(段落、列表、引用块等)均作为该角色的台词内容:

dramark
@哈姆雷特
我有两个选择:

- 生存
- 还是毁灭

也许还有更多可能...

退出角色

隐式退出

遇到以下标记时自动退出角色台词模式:

  • @新角色名:切换到新角色
  • ---:场景分隔
  • # 标题:新场景/幕
  • $$:进入唱段
dramark
@哈姆雷特
我要走了。

---

场景变换,回到叙述模式。

显式退出

使用 @@ 显式退出角色:

dramark
@哈姆雷特
我说完了。

@@

哈姆雷特走下舞台。

@@ 作为一个显式的状态边界标记,不生成 AST 节点,仅触发栈关闭操作。

多角色声明(可选)

允许同一声明行出现多个 @ 角色标识:

dramark
@彼得·潘 @温迪 [旁白]
我们一起说:

永无岛万岁!

这在合唱或齐声对白场景中很有用。

注意事项

  1. 独占一行:角色声明必须独占一行,否则会被降级为普通文本
  2. 前导空白@ 后的前导空白会被跳过
  3. 终止符:角色名读取到以下任一字符终止:[、换行、下一个 @
  4. 空角色名:空角色名非法,会产生警告

基于 MIT 许可发布