用lilypond自带案例编命令:给一列音加Staccato
lilypond有一个教学,是如何设计一个命令为音符加accent的,具体可看:
Extending LilyPond: 1.3.4 Adding articulation to notes (example)
但是,这个命令只适合加单音,不适合加在一列音上,所以把它稍加改造,可以加到一串音上,这样就能节省很多打代码的时间
例子:给一列音加上断奏记号(staccato)
命令格式:\addStaccato { 音列 }
要命令生效,需要将下面命令区的内容全部复制。
先贴效果,再贴代码
效果图:
%%%%%%%%%%%%% 以下是命令区,要使用该命令请复制全部内容 %%%%%%%%%%%%% %%%%%%%%%%%%% 基础指令区 %%%%%% #(define (get-elements mymusic) (ly:music-property mymusic 'elements) ) #(define (get-sequential-music mymusic) (ly:music-deep-copy mymusic) ) %%%%%%%%%%%%% 根据官方文档改造得来 %%%%%%%%%%%%%%%% addStaccatoSingle = #(define-music-function (note-event) (ly:music?) (set! (ly:music-property note-event 'articulations) (cons (make-music 'ArticulationEvent 'articulation-type "staccato") (ly:music-property note-event 'articulations))) note-event) %%%%%%%%%%%%% 把单音上的命令运用到音列上 %%%%%%%%%%%% addStaccato= #(define-music-function (mymusic) (ly:music?) (make-sequential-music (map addStaccatoSingle (get-elements(ly:music-deep-copy mymusic)) ))) %%%%%%%%%%%%%% 命令区结束,复制到此为止 %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% 下面是试验效果 %%%%%%%%%%%%%%%%%% MyNote ={ % 这是做实验用的音符 c'4 d' } \markup {"这是原来的样子"} { \MyNote } \markup {"这是加了命令的样子"} { \addStaccato \MyNote }