You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何全局设置Lilypond的Articulation顺序或重定义默认顺序?

全局设置Lilypond Articulation顺序的方法

当然可以全局设置或重定义Lilypond中Articulation的默认显示顺序,核心是通过调整**script-priority**属性实现——该属性数值越大,脚本的优先级越高,会被放置在更靠近音符的位置(不会被低优先级脚本挤到外侧)。以下是两种可复用为类库的实现方式:

方法1:直接全局覆盖特定Articulation的优先级

针对\accent和\portato这类有专属Grob类型的Articulation,可以直接全局修改它们的script-priority值,无需逐个音符调整。

步骤1:创建类库文件(比如articulation-order.ly)

;; 全局调整Articulation优先级的类库
;; 降低\accent的优先级,让它显示在外侧
\override Accent #'script-priority = #50
;; 提高\portato的优先级,让它显示在更靠近音符的位置
\override Portato #'script-priority = #100

;; 可扩展添加其他Articulation的调整,比如:
;; \override Staccato #'script-priority = #75

步骤2:主文件中引用类库

\include "articulation-order.ly"

\relative c'' {
  % 无论输入顺序如何,portato都会显示在accent内侧
  c4^\accent^\portato d e f
  g^\portato^\accent a b c
}

方法2:通过Lambda函数动态设置优先级

如果需要对同一类脚本(比如所有Script类型的Articulation)按类型批量调整优先级,可以用Lambda函数判断Articulation类型,灵活分配优先级数值。

类库文件示例

;; 全局动态调整Articulation优先级的类库
default-script-priority = #0

\override Script #'script-priority = #(lambda (grob)
  (let ((art-type (ly:grob-property grob 'articulation-type)))
    (cond
      ((equal? art-type 'accent) #50)
      ((equal? art-type 'portato) #100)
      ((equal? art-type 'staccato) #75)
      (else default-script-priority))))

原理说明

Lilypond中每个Articulation都有对应的articulation-type属性(比如\accent对应'accent,\portato对应'portato),Lambda函数会根据这个属性为不同Articulation分配自定义优先级,未匹配的则使用默认值。

注意事项

  • script-priority的数值没有固定范围,只需保证目标Articulation的数值高于需要排在外侧的Articulation即可;
  • 如果需要针对上下方向分别设置优先级,可以在Lambda函数中额外判断direction属性(比如(ly:grob-property grob 'direction)),再分配不同数值。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:26:17