在 Lilypond 我可以用一条线改变一种对象的颜色
\override Staff.Clef #'color = #(rgb-color 0.4 0.5 0.6)
我希望所有东西都采用相同的(非默认)颜色,但我既没有找到我可以着色的所有对象的列表,也没有找到一次更改所有颜色的命令。有人可以指点我吗?
在 Lilypond 我可以用一条线改变一种对象的颜色
\override Staff.Clef #'color = #(rgb-color 0.4 0.5 0.6)
我希望所有东西都采用相同的(非默认)颜色,但我既没有找到我可以着色的所有对象的列表,也没有找到一次更改所有颜色的命令。有人可以指点我吗?
LilyPond Snippet Repository有一个解决方案,它遍历包含在中的对象列表all-grob-descriptions
:
#(define (override-color-for-all-grobs color)
(lambda (context)
(let loop ((x all-grob-descriptions))
(if (not (null? x))
(let ((grob-name (caar x)))
(ly:context-pushpop-property context grob-name 'color color)
(loop (cdr x)))))))
% Example of usage:
\relative c' {
\applyContext #(override-color-for-all-grobs (x11-color 'blue))
c4\pp\< d e f
\grace { g16[( a g fis]) } g1\ff\!
}
请注意,仅当您在适当的上下文中运行它时,这才会更改每个图形对象的颜色(Score
我认为,通常就足够了),因此如果您处于中间,则可能需要执行以下操作Voice
语境:
\stopStaff
\context Score
\applyContext #(override-color-for-all-grobs (x11-color 'blue))
\startStaff
您需要的图形对象列表位于本页底部。因此,一个简单但乏味的方法是遍历您使用的所有对象,例如
\override Staff.Clef #'color = #(rgb-color 0.4 0.5 0.6)
\override Staff.NoteHead #'color = #(rgb-color 0.4 0.5 0.6)
\override Staff.Beam #'color = #(rgb-color 0.4 0.5 0.6)
\override Staff.Slur #'color = #(rgb-color 0.4 0.5 0.6)
等等
可能有更好的方法,但我无法弄清楚。或者,正如之前建议的那样,您可以考虑对 Lilypond 的输出进行一些后处理,这可能更简单,具体取决于您可用的工具。
我强烈建议您阅读优秀的文档,尤其是学习手册和符号参考中介绍的如何导航内部参考
您也可以从lilypond-user mailing list获得更好的答案。