6

在 Lilypond 我可以用一条线改变一种对象的颜色

\override Staff.Clef #'color = #(rgb-color 0.4 0.5 0.6)

我希望所有东西都采用相同的(非默认)颜色,但我既没有找到我可以着色的所有对象的列表,也没有找到一次更改所有颜色的命令。有人可以指点我吗?

4

2 回答 2

8

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
于 2012-09-10T17:28:32.287 回答
2

您需要的图形对象列表位于本页底部。因此,一个简单但乏味的方法是遍历您使用的所有对象,例如

\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获得更好的答案。

于 2011-11-08T12:07:06.587 回答