跳到主要内容

整体结构、注释、大段文本

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

行的结构

指令、分割线与注释

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

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

软折行

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

谨慎使用

如果你需要在音符或歌词行上用到软折行,请考虑一下碎片是否写得太长了。如果是这样,应当进行拆分。

文档的结构

第零层:文档

文档头包含这些指令:

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

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

第一层:章节

文本章节

包含这些指令:

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

文本章节中的文本行有以下特殊语法:

  • 如果行首的字符是 |,该字符会被删除,但其之后的空格将会保留。这允许为文本行添加前导空格。
  • 在行首有 | 的情况下,可以在文本中插入一处 > 字符以标记文本对齐点。 新增于 1.15.4

具体例子见指南中的解释

音乐章节

章节头包含这些指令:

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

第二层:碎片

碎片头包含这些指令:

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

第三层:声部

声部头包含这些指令:

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

声部头中,NNa 应该写在最前面。

例外情况:每个碎片第一个声部的标记符号行 A 也可以写在音符行前面,这种写法可能是比较直观的。

第四层:歌词行

歌词行包含这些指令:

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

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