首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Lilypond 2.20中将颜色带回指板上的圆点?

如何在Lilypond 2.20中将颜色带回指板上的圆点?
EN

Stack Overflow用户
提问于 2020-11-02 20:06:54
回答 1查看 61关注 0票数 1

我需要帮助解决一个相当晦涩的问题。但作为一名教育者对我来说很重要。

在Lilypond 2.18和更早的版本中,使用代码片段(https://t1p.de/b7s8)中的配色方案,我能够用根音符颜色给指导板上的点着色。我会简单地使用下面的代码:

代码语言:javascript
复制
\override FretBoard #'color = #color-notehead.

(附图的上半部分)

当我升级到Lilypond 2.20时,小圆点上的颜色消失了,取而代之的是黑色(如所附图片的底部)。我没有更改任何代码(如果需要,我可以提供)。

现在,使用

代码语言:javascript
复制
\override FretBoard  #'(fret-diagram-details dot-color) = #'white 

我可以将点颜色覆盖为一些静态颜色--但它与动态颜色点的美观相去甚远。

有人能告诉我哪里出了问题吗?

Attached image with 2.18 and 2.20 renditions of the same code

这是一个最小的代码示例,它在2.18中通过根音符对点进行动态着色,但在2.20中使用静态颜色

代码语言:javascript
复制
\version "2.20.0"
\header { title = "Guitar Chords"}
{
%Chords
\storePredefinedDiagram #default-fret-table \chordmode {a}
#guitar-tuning #"o;o;2-2;2-3;2-4;o;"
\storePredefinedDiagram #default-fret-table \chordmode {bes}
#guitar-tuning #"1-1-(;1-1;3-2;3-3;3-4;1-1-);"
\storePredefinedDiagram #default-fret-table \chordmode {c}
#guitar-tuning #"3-3;3-4;2-2;o;1-1;o;"
}
%Colour map
#(define color-mapping
(list
(cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red3))
(cons (ly:make-pitch 0 5 NATURAL) (x11-color 'blue3))
(cons (ly:make-pitch 0 6 FLAT) (x11-color 'magenta3))
)
)
%Compare pitch and alteration (not octave).
#(define (pitch-equals? p1 p2)
(and
(= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
(= (ly:pitch-notename p1) (ly:pitch-notename p2))))

#(define (pitch-to-color pitch)
(let ((color (assoc pitch color-mapping pitch-equals?)))
(if color
(cdr color))))
#(define (color-notehead grob)
(pitch-to-color
(ly:event-property (event-cause grob) 'pitch)))
chordNames = \chordmode { a2 bes c }
\score {
<<
\new ChordNames \chordNames
\new FretBoards
{ \override FretBoards.FretBoard #'size = #'2.0
\override FretBoard #'(fret-diagram-details finger-code) = #'in-dot
\override FretBoard #'(fret-diagram-details orientation) = #'portrait
%This command changes the colour of the fretboard (and used to change the dots in 2.18)
\override FretBoard #'color = #color-notehead
\chordNames
}
>>
}
EN

回答 1

Stack Overflow用户

发布于 2020-11-05 15:50:54

在Lilypond论坛上,Harm发布了一个黑客攻击。当添加时,它将点着色为与指纹板相同的颜色。这是一种暂时的解决方案,但却是一种魅力。

代码语言:javascript
复制
\override FretBoards.FretBoard.before-line-breaking =
        #(lambda (grob)
          (ly:grob-set-nested-property! grob '(fret-diagram-details dot-color)
          (color-dot grob)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64645309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档