Lilypond和弦网格名称自定义覆盖技术问询
替换LilyPond和弦指板网格上方的自定义和弦名称
针对你遇到的和弦指板(FretBoards)上方显示自动生成和弦名的问题,以下是两种实现目标的解决方案:
方案1:设置自定义文本名称(如"A:Quartal")
直接在和弦定义中指定chordName属性,FretBoards上下文会自动读取这个值替换默认生成的名称。修改和弦定义部分:
%%% A Quartal 自定义名称 aQuartal = \relative c' { \set chordName = #"A:Quartal" % 自定义和弦名称 < a d g c f >1-\markup { \super "Quartal" } } \storePredefinedDiagram #default-fret-table \aQuartal #guitar-tuning #"x; 12-1; 12-1; 12-1; 13-2; 13-2;"
修改后,指板网格上方会显示你设置的"A:Quartal",而非自动生成的"A7 sus 4 b10 b13"。
方案2:生成规范的级数标记(如"A^min11b6")
如果需要使用LilyPond标准和弦命名格式显示级数标记,改用\chordmode定义和弦,而非直接编写音符组。示例如下:
%%% 用chordmode定义带升降级的和弦 aMin11b6 = \chordmode { a:min11 \flat 6 } \storePredefinedDiagram #default-fret-table \aMin11b6 #guitar-tuning #"x; 12-1; 12-1; 12-1; 13-2; 13-2;"
然后在music和formNames中调用该和弦:
formNames = \chordmode { \set chordNameExceptions = #chExceptions \aMin11b6 } music = { \set chordNameExceptions = #chExceptions \aMin11b6 \bar "||" }
此时指板网格上方会自动显示规范格式的"A^min11b6"。
完整修改代码示例
整合两种方案的完整代码如下:
%%%%%%%%% ChordGrid Name Issue Code \include "predefined-guitar-fretboards.ly" %%% 方案1:自定义名称的Quartal和弦 aQuartal = \relative c' { \set chordName = #"A:Quartal" < a d g c f >1-\markup { \super "Quartal" } } \storePredefinedDiagram #default-fret-table \aQuartal #guitar-tuning #"x; 12-1; 12-1; 12-1; 13-2; 13-2;" %%% 方案2:带级数标记的和弦 aMin11b6 = \chordmode { a:min11 \flat 6 } \storePredefinedDiagram #default-fret-table \aMin11b6 #guitar-tuning #"x; 12-1; 12-1; 12-1; 13-2; 13-2;" %%% Exceptions chExceptionMusic = { \aQuartal \aMin11b6 } chExceptions = #( append ( sequential-music-to-chord-exceptions chExceptionMusic #t) ignatzekExceptions) formNames = \chordmode { \set chordNameExceptions = #chExceptions \aQuartal \aMin11b6 } music = { \set chordNameExceptions = #chExceptions \aQuartal \bar "|" \aMin11b6 \bar "||" } \version "2.22.2" % necessary for upgrading to future LilyPond versions. \book { \header { title = "ChordGrid Name Issue" } %%% Chords \score { << %%% Chord Names \new ChordNames { \set chordChanges = ##t \formNames } %%% Chord diagrams \new FretBoards { \override FretBoards.FretBoard.size = #'1.2 \override FretBoard.fret-diagram-details.number-type = #'roman- \music } %%% Staff \new Staff \with { instrumentName = #'"Ex. 1" } { \clef "treble_8" \new Voice { \music } } %%% TAB \new TabStaff { \music } >> \layout { \context { \Score \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16) } } } }
内容的提问来源于stack exchange,提问作者BlueEnamel
相关产品推荐
相关产品推荐

