lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: trying to solve "cyclic chain in pure-Y-offset callbacks" error in c


From: Thomas Morley
Subject: Re: trying to solve "cyclic chain in pure-Y-offset callbacks" error in custom (ScoreMarks) context
Date: Fri, 4 Aug 2017 16:14:53 +0200

d

2017-08-03 19:05 GMT+02:00 Kieren MacMillan <address@hidden>:
> Hello all,
>
> In the snippet included below, I'm using a custom ScoreMarks context to show 
> MetronomeMarks (plus, in the real world, RehearsalMarks and other things) 
> above the system. The problem is, in order to have the MetronomeMark align 
> correctly with the TimeSignature, I must (?) include the TimeSignature in 
> some form or other. But I don't want the actual grob to appear, or affect 
> spacing in any way *other than* helping with alignment.
>
> All the attempts I've tried (\omit-s, stencil tweaks, etc.) throw "cyclic 
> chain in pure-Y-offset callbacks" errors, which I have just been ignoring 
> (for years now). But I'd like to solve this once and for all, if possible…
>
> 1. Is the error more serious than a simply aesthetic problem?
>
> 2. If not, is there some way to avoid seeing the errors?
>
> 3. In any case, is there a better way of doing what I'm trying to do (i.e., 
> one that won't cause the error in the first place)?
>
> Thanks,
> Kieren.
>
> %%%  SNIPPET BEGINS
> \version "2.19"
>
> \layout {
>   \context {
>     \type "Engraver_group"
>     \name ScoreMarks
>     \consists "Staff_collecting_engraver"
>     \consists "Axis_group_engraver"
>     \override VerticalAxisGroup.staff-affinity = #DOWN
>     \consists "Metronome_mark_engraver"
>     \override MetronomeMark.break-align-symbols =
>       #'(left-edge staff-bar clef time-signature key-signature)
>     \override MetronomeMark.non-break-align-symbols =
>       #'(paper-column-interface)
>   }
>   \context {
>     \Score
>     \remove "Metronome_mark_engraver"
>     \remove "Mark_engraver"
>     \accepts ScoreMarks
>   }
> }
>
> global = {
>   \tempo "Testing"
>   \time 2/2
>   s1
> }
>
> \markup "No TimeSignature in ScoreMarks = incorrect alignment:"
> \score {
>   <<
>     \new ScoreMarks \global
>     \new Staff << \global c''1 >>
>   >>
> }
>
> \markup "TimeSignature in ScoreMarks = correct alignment + unwanted grob + 
> error:"
> \score {
>   <<
>     \new ScoreMarks \global
>     \new Staff << \global c''1 >>
>   >>
>   \layout {
>     \context {
>       \ScoreMarks
>       \consists "Time_signature_engraver"
>     }
>   }
> }
>
> \markup "TimeSignature included in and then \omit-ed from ScoreMarks = 
> correct alignment + error:"
> \score {
>   <<
>     \new ScoreMarks \global
>     \new Staff << \global c''1 >>
>   >>
>   \layout {
>     \context {
>       \ScoreMarks
>       \consists "Time_signature_engraver"
>       \omit TimeSignature
>     }
>   }
> }
> %%%  SNIPPET ENDS
>
> ________________________________
>
> Kieren MacMillan, composer
> ‣ website: www.kierenmacmillan.info
> ‣ email: address@hidden


Hi Kieren,

if I understand correctly, consisting "Staff_collecting_engraver" is
part of the Problem.
This makes sense only if ScoreMarks would be of type staff, which it
isn't currently.
More, your setting of \override VerticalAxisGroup.staff-affinity =
#DOWN let me think you don't _want_ it to be of type staff.
See NR 4.4.1:
"Setting staff-affinity to UP, CENTER, or DOWN causes a staff to be
spaced as a non-staff line."
Other problem is MetronomeMark.break-align-symbols can't do proper
aligning to time-signature if "Time_signature_engraver" is not in
ScoreMarks.

So delete the "Staff_collecting_engraver" from ScoreMarks, consist the
"Time_signature_engraver" and omit TimeSignature

If you really want the "Staff_collecting_engraver" in, consists
"Staff_symbol_engraver" and do
\override StaffSymbol.line-count = #0
Probably, don't set staff-affinity and space ScoreMarks vertically
with staff-staff-spacing.


\layout {
  \context {
    \type "Engraver_group"
    \name ScoreMarks
    \consists "Axis_group_engraver"
    \override VerticalAxisGroup.staff-affinity = #DOWN
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = 10
    \consists "Time_signature_engraver"
    \omit TimeSignature
    \consists "Metronome_mark_engraver"
    \override MetronomeMark.break-align-symbols =
      #'(left-edge staff-bar clef time-signature key-signature)
    \override MetronomeMark.non-break-align-symbols =
      #'(paper-column-interface)
  }
%% Or:
%{
  \context {
    \type "Engraver_group"
    \name ScoreMarks
    \consists "Staff_collecting_engraver"
    \consists "Staff_symbol_engraver"
    \override StaffSymbol.line-count = #0

    \consists "Axis_group_engraver"
    \override VerticalAxisGroup.staff-staff-spacing.padding = 10
    \consists "Time_signature_engraver"
    \omit TimeSignature
    \consists "Metronome_mark_engraver"
    \override MetronomeMark.break-align-symbols =
      #'(left-edge staff-bar clef time-signature key-signature)
    \override MetronomeMark.non-break-align-symbols =
      #'(paper-column-interface)
  }
%}
  \context {
    \Score
    \remove "Metronome_mark_engraver"
    \remove "Mark_engraver"
    \accepts ScoreMarks
  }
}

global = {
  \tempo "Testing"
  \time 2/2
  s1
}

\markup "correct"
\score {
  <<
    \new ScoreMarks \global
    \new Staff << \global c''1 >>
  >>
}



HTH,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]