跳到主要内容

文档整体结构

本节概述了整个文档如何由一行一行一行的指令构成。

行的结构

指令、分割线与注释

所有行在第一轮处理时全部被令牌化(Tokenize),因此下面所说的符号,双引号引起的字符串内都不算。

  • 除了空格外,仅由 -= 中的一种字符构成的行,解析为分割线。
    • = 构成的分割线为章节分割线
    • - 构成的分割线为碎片分割线
  • 每行中第一个 // 以及其后的所有文本都会被作为注释并被忽略掉。
  • 指令行规则如下:
    • 由一个单词开头,含有至少一个 :,就是指令行。第一个冒号作为头部和内容的分界线。
    • 如果头部满足 <单词>[<任意内容>]: 的格式,方括号内会被作为属性。

软折行

在一行的末尾添加反斜杠 \(反斜杠后不能再有空格),下一行会被认为是这一行内容的延续,像这样:

谨慎使用

大多数情况下,这个特性只应该用于渲染属性行上。如果你需要在音符或歌词行上用到,请考虑一下碎片是否写得太长了,如果是这样,应当进行拆分。

文档的结构

第零层:文档

文档头包含这些指令:

命令头全称说明必须唯一内容属性
DtDocTitle标题-Dt文本-
DpDocPrescript左上角属性-Dp文本-
DvDocVersion右上角版本号-Dv文本-
DsDocSubtitle副标题-Ds文本-
DaDocAuthor作者--文本可选
DfDocFootnote尾注--文本-
DlDescenderLeft页脚左侧文本-Dl文本-
DrDescenderRight页脚右侧文本-Dr文本-
PProps音乐属性1P空格分割-
PiPropsImplicit音乐属性(不显示)1P空格分割-
RpRenderProps渲染属性-Rp空格分割-
  • 文档头中所有指令的属性均直接作为文本处理。
  • 目前,尾注文本 Df 会显示在整个乐谱的末尾(这一行为未来可能改变),因此也可以添加在整个文档最后,而不必在开头。 最低版本:Sparks NMN 1.14.16
提示

如果你不明白这里在说什么,请确保你看过教程部分的第一节

第一层:章节

文本章节

包含这些指令:

命令头全称说明必须唯一内容属性
TText文本标注--文本-
SSection文段标题-S文本-
SrpSectionRenderProps渲染属性-Srp文本-

音乐章节

章节头包含这些指令:

命令头全称说明必须唯一内容属性
SSection文段标题-S文本-
SrpSectionRenderProps渲染属性-Srp文本-
SpSectionProps音乐属性-Sp空格分割-

第二层:碎片

碎片头包含这些指令:

命令头全称说明必须唯一内容属性
BBreak此前强制换行-B--
JJumper跳房子-J令牌化-
FrpFragmentRenderProps渲染属性-Frp空格分割-
注意

渲染属性 Frp 中只有 n 是有效的,其他属性会被忽略。

第三层:声部

声部头包含这些指令:

命令头全称说明必须唯一内容属性
NNotes音符序列1N令牌化可选
NaNotesAccompany鼓点音符序列1N令牌化可选
NcNotesCompact紧凑音符序列1N令牌化可选
AAnnotation标记符号--令牌化可选
注意

声部头中,NNa 应该写在最前面。然而,每个碎片第一个声部的标记符号行 A 也可以写在 NNa,有时这种写法是比较直观的。

第四层:歌词行

歌词行包含这些指令:

命令头全称说明必须唯一内容属性
LLyric歌词(手动分割)1L令牌化可选
LcLyricChar歌词(字基)1L令牌化可选
LwLyricWord歌词(词基)1L令牌化可选
NsNotesSubstitute替代小节--令牌化可选
AAnnotation标记符号--令牌化可选
LaLyricAnnotation标记型歌词-La令牌化-
注意

歌词行中,L LcLw 应该写在最前面。