Hello,

I just had this idea about a *new* method of spacing.
Maybe this is nuts, and it's almost a hack, but I'm seeing that it could
work, so, please, leave me a feedback.
The idea is create an invisible "obstacle", with a length set in
staff-space units, between grobs.
Then, assign a position to each grob.

The obstacle has a grey color in the following example, but you can use
white color as well.

Here is the example:

%%%%%%%%%%%%%%%%%%%%%%%%

#(define (SpaceBeforePos1 length)  #{ \tweak
TextScript.outside-staff-priority 100 ^\markup{ \draw-line #(cons 0
length)} #})
#(define (SpaceBeforePos2 length)  #{ \tweak
TextScript.outside-staff-priority 200 ^\markup{ \draw-line #(cons 0
length)} #})
#(define (SpaceBeforePos3 length)  #{ \tweak
TextScript.outside-staff-priority 300 ^\markup{ \draw-line #(cons 0
length)} #})
#(define (SpaceBeforePos4 length)  #{ \tweak
TextScript.outside-staff-priority 400 ^\markup{ \draw-line #(cons 0
length)} #})

#(define DynamicTextAtPos1 #{ \once \override
DynamicLineSpanner.outside-staff-priority = 110 #})
#(define DynamicTextAtPos2 #{ \once \override
DynamicLineSpanner.outside-staff-priority = 210 #})
#(define DynamicTextAtPos3 #{ \once \override
DynamicLineSpanner.outside-staff-priority = 310 #})
#(define DynamicTextAtPos4 #{ \once \override
DynamicLineSpanner.outside-staff-priority = 410 #})

#(define ScriptAtPos1 #{ \once \override Script.outside-staff-priority =
110 #})
#(define ScriptAtPos2 #{ \once \override Script.outside-staff-priority =
210 #})
#(define ScriptAtPos3 #{ \once \override Script.outside-staff-priority =
310 #})
#(define ScriptAtPos4 #{ \once \override Script.outside-staff-priority =
410 #})

#(define TupletBracketAtPos1 #{ \once \override
TupletBracket.outside-staff-priority = 110 #})
#(define TupletBracketAtPos2 #{ \once \override
TupletBracket.outside-staff-priority = 210 #})
#(define TupletBracketAtPos3 #{ \once \override
TupletBracket.outside-staff-priority = 310 #})
#(define TupletBracketAtPos4 #{ \once \override
TupletBracket.outside-staff-priority = 410 #})

#(define OttavaBracketAtPos1 #{ \once \override
Staff.OttavaBracket.outside-staff-priority = 110 #})
#(define OttavaBracketAtPos2 #{ \once \override
Staff.OttavaBracket.outside-staff-priority = 210 #})
#(define OttavaBracketAtPos3 #{ \once \override
Staff.OttavaBracket.outside-staff-priority = 310 #})
#(define OttavaBracketAtPos4 #{ \once \override
Staff.OttavaBracket.outside-staff-priority = 410 #})

{

\time 2/4

% assign a position to each grob

$TupletBracketAtPos1
$OttavaBracketAtPos2
$DynamicTextAtPos3
$ScriptAtPos4

% We want 4 staff spaces before position 1, 2 staff spaces before position
2, 3 staff-spaces before position 3 and 4 staff-spaces before position 4

\once \override TupletBracket.direction = #UP
\once \override TextScript.color = #grey
\tuplet 3/2 { \ottava #1 c'''-#(SpaceBeforePos1 4) -#(SpaceBeforePos2 2)
 -#(SpaceBeforePos3 3) ^\mf -#(SpaceBeforePos4 4) ^>  c''' c''' \ottava #0 }

r2

% change the position of the grobs

$OttavaBracketAtPos1
$TupletBracketAtPos2
$ScriptAtPos3
$DynamicTextAtPos4

\once \override TupletBracket.direction = #UP
\once \override TextScript.color = #grey
\tuplet 3/2 { \ottava #1 c'''-#(SpaceBeforePos1 4) -#(SpaceBeforePos2 2)
 -#(SpaceBeforePos3 3) ^\mf -#(SpaceBeforePos4 4) ^>  c''' c''' \ottava #0 }

}

Reply via email to