Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: chf am Donnerstag, 27. Februar 2025, 14:27

Titel: Ganztakpausen als Balken
Beitrag von: chf am Donnerstag, 27. Februar 2025, 14:27
Liebe Freunde,


{
  \override MultiMeasureRestNumber.stencil =
  #(lambda (grob)
    (let* ((expand-limit (ly:grob-property grob 'expand-limit 10))
           (txt (ly:grob-property grob 'text))
           (txt-number (string->number txt)))
      (if (and (> txt-number 1) (<= txt-number expand-limit))
          (begin
            (ly:grob-set-property! (ly:grob-parent grob Y) 'transparent #t)
            (ly:grob-set-property! grob 'Y-offset 2.45)
            (ly:stencil-combine-at-edge
              (ly:stencil-aligned-to
                (ly:text-interface::print grob)
                X
                CENTER)
              Y
              DOWN
              (ly:stencil-aligned-to
                (grob-interpret-markup grob
                  #{
                      \markup
                        \override #'(multi-measure-rest-number . #f)
                        \override #'(multi-measure-rest . #t)
                        \rest #txt
                  #})
                X
                CENTER)
              1.45))
          (ly:text-interface::print grob))))

\compressEmptyMeasures
 
R1*11 }
Funktioniert wunderbar ...

Leider bekomme ich in bei meinen Anwendungsversuchen aber eine Fehlermeldung, die ich nicht deuten kann:

In procedure string->number in expression (string->number txt):
Wrong type argument in position 1 (expecting string): (#<procedure line-markup (layout props args)> ((#<procedure override-markup (layout props new-prop arg)> (baseline-skip . 2.5) (#<procedure center-column-markup (layout props args)> ((#<procedure line-markup (layout props args)> (#)) (#<procedure line-markup (layout props args)> (#)))))))


Gibt es Abhilfe?
Oder eine andere Möglichkeit, den Balken zu erzwingen?

Gruß Christa
Titel: Antw:Ganztakpausen als Balken
Beitrag von: Manuela am Samstag, 1. März 2025, 14:40
Wie schaut dein Anwendungsbeispiel aus? Und was soll \override MultiMeasureRestNumber.stencil bewirken, ich sehe keinen Unterschied im Ergebnis, wenn ich den Override weglasse.
Titel: Antw:Ganztakpausen als Balken
Beitrag von: Lilysetter am Samstag, 1. März 2025, 21:34
\version "2.25.6"{
  \override MultiMeasureRest.expand-limit = #0
  \compressEmptyMeasures
  R1*12 R1*11 R1*10 R1*9 R1*8 R1*7 R1*6 R1*5 R1*4 R1*3 R1*2  R1*1 R1
  }
Ergebnis siehe Anhang.
Default ist, dass zwischen 2 und 10 Takten Kirchenpausen gedruckt werden, ab 11 Balkenpausen.
Steht alles im Handbuch: "Die Erscheinung von Pausentakten ¨andern".

Der von Christa gepostete Code bringt folgenden Fehler, wenn die Pausenlänge <= 10 (Defaultwert) ist (vermutlich weil dann Kirchenpausen gedruckt werden sollten):
C:/ProgramFiles/lily2256/share/lilypond/2.25.6/ly/init.ly:66:2: Fehler: falscher Typ für Argument 1; duration erwartet, "10" gefunden
#
 (let ((book-handler (if (defined? 'default-toplevel-book-handler)
C:/ProgramFiles/lily2256/share/lilypond/2.25.6/ly/init.ly:66:2: Fehler: Guile signaled an error for the expression beginning here
#
 (let ((book-handler (if (defined? 'default-toplevel-book-handler)
In procedure reverse!: Wrong type argument in position 1: ("10" . #f)
Titel: Antw:Ganztakpausen als Balken
Beitrag von: chf am Montag, 3. März 2025, 17:46
Danke für eure Antworten!

An Lilysetter:

Dein code funktioniert offensichtlich auch in \version ""2.22.0".
Wunderbar!