LilyPond: 括号内音调无词干(手风琴记谱法)

LilyPond: pitch in parenthesis without stem (accordion notation)

对于手风琴音乐 sheet 通常指定乐谱 括号中的球场,例如(下面代码段中括号中的 E)。这是我的目标:

括号 (1) 中的音高不演奏,不应在小节中占用额外的逻辑时间(它们用于演奏者阅读音乐时方便 sheet),(2) 它们应该保留靠近和弦。

我现在的LilyPond代码如下:

\version "2.18.2"
\include "deutsch.ly"
#(set-global-staff-size 20.0)

\relative c {
    \clef bass
    e8 <gis d' e>^7 h, q

    \override Stem.details.beamed-lengths = #'(0)  
    \grace \parenthesize  e
    \revert Stem.details

    e <gis d' e> gis, q

    \override Stem.details.beamed-lengths = #'(0)  
    \grace \parenthesize  e'
    \revert Stem.details
}

使用 lilypond --pdf sample.ly 结果如下:

我在 LilyPond 中获得的结果有几个问题:(i) 主干长度对装饰音符没有影响,(ii) 装饰音符被移动到下一个小节,理想情况下它应该保持在和弦附近,(iii)括号太小了(虽然这是一个次要的评论)。

如何使用 LilyPond 达到预期的效果(如第一张图所示)?

P.S。编辑:

我能够创建一个解决方法(见下文),虽然不优雅,但可以完成工作:

\version "2.18.2"
\include "deutsch.ly"
#(set-global-staff-size 20.0)

\relative c {
  \clef bass
  e8 <gis d' e>^7 h, \afterGrace q 
  {
  \override Stem.thickness = #-1.0
  \parenthesize e4
  \revert Stem.thickness
  }
  e8 <gis d' e> gis,_B \afterGrace q
  {
  \override Stem.thickness = #-1.0
  \parenthesize e'4
  \revert Stem.thickness
  }
}

以上片段的输出如下:

有没有更好的实现方式?

而不是使用 \override Stem.thickness = #-1.0,更优雅的解决方案是使用 stencil 属性。此 属性 可用于省略词干、标记、音符头等。此外,如果您只想覆盖单个 note/chord 并在之后自动恢复,则可以使用语句 \once \override <something>它。最后,您还可以定义一个音乐函数来自动处理所有这些,特别是如果您经常使用这种结构。在下面的这个例子中,参数是紧接在装饰音之前的 note/chord 和装饰音本身,参见:

\version "2.18.2"
\include "deutsch.ly"
#(set-global-staff-size 20.0)

accordionGrace = #(define-music-function
     (parser location firstNote secondNote)
     (ly:music? ly:music?)
      #{
        \afterGrace
        $firstNote
        {
          \once \override Stem.stencil = ##f
          \once \override Flag.stencil = ##f
          \parenthesize $secondNote
        }
      #}
     )

\relative c {
  \clef bass
  e8 <gis d' e>^7 h, 
  \accordionGrace q e8
  e8 <gis d' e> gis,_B 
  \accordionGrace q e'8
}