Autor Thema: Incipit und Ausrichtung instrumentName von 2.16→2.18  (Gelesen 1698 mal)

RobUr

  • Member
Incipit und Ausrichtung instrumentName von 2.16→2.18
« am: Donnerstag, 8. Mai 2014, 16:38 »
Liebe Lilypond-Gemeinde,

nach langer Zeit habe ich ein Problem, das ich nicht selbst zu beheben vermag  :(

In 2.16 leistete mir folgendes Incipit-Snippet ganz vorzügliche Dienste:
\version "2.16.2"
%\version "2.18.2"
 
Incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
  #{
    \once \override Staff.InstrumentName #'self-alignment-X = #RIGHT
    \once \override Staff.InstrumentName #'self-alignment-Y = #UP
    \once \override Staff.InstrumentName #'Y-offset =
      #(lambda (grob)
         (+ 4 (system-start-text::calc-y-offset grob)))
    \once \override Staff.InstrumentName #'padding = #0.3
    \once \override Staff.InstrumentName #'stencil =
      #(lambda (grob)
         (let* ((instrument-name (ly:grob-property grob 'long-text))
                (layout (ly:output-def-clone (ly:grob-layout grob)))
                (music (make-sequential-music
                        (list (context-spec-music
                               (make-sequential-music
                                (list (make-property-set
                                       'instrumentName instrument-name)
                                      (make-grob-property-set
                                       'VerticalAxisGroup
                                       'Y-extent '(-4 . 4))))
                               'MensuralStaff)
                              incipit-music)))
                (score (ly:make-score music))
                (mm (ly:output-def-lookup layout 'mm))
                (indent (ly:output-def-lookup layout 'indent))
                (width (ly:output-def-lookup layout 'incipit-width))
                (incipit-width (if (number? width)
                                   (* width mm)
                                   (* indent 0.5))))

           (ly:output-def-set-variable! layout 'indent (- indent
                                                          incipit-width))
           (ly:output-def-set-variable! layout 'line-width indent)
           (ly:output-def-set-variable! layout 'ragged-right #f)
           (ly:output-def-set-variable! layout 'ragged-last #f)
           (ly:output-def-set-variable! layout 'system-count 1)
           (ly:score-add-output-def! score layout)
           (ly:grob-set-property! grob 'long-text
                                  (markup #:score score))
           (system-start-text::print grob)))
  #})

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

#(set-global-staff-size 14)
#(set-default-paper-size "executive")
\language "deutsch"

Global = {
\key c \major
\time 4/2
s\breve*7
}

CantusIncipit = \context MensuralVoice = "CantusIncipit" << {
\clef "petrucci-c1"
\set Score.measureLength = #(ly:make-moment 16 1)
a'1. s2 s1*14
} >>

CantusNoten = \relative c'' {
a1. fis4 g a1. r2
\set Staff.shortInstrumentName = \markup { \italic "S.I" }
r2 a h h cis1 r R\breve
r2 d1 d cis2 d2. cis!8[ h]
}

QuintusIncipit = \context MensuralVoice = "QuintusIncipit" << {
\clef "petrucci-c1"
\set Score.measureLength = #(ly:make-moment 16 1)
e'\breve\rest e'1\rest r2 a'1 s2 s1*11
} >>

QuintusNoten = \relative c'' {
R\breve
\set Staff.shortInstrumentName = \markup { \italic "S.II" }
r1 r2 a1 a gis2 a1. a2 g!2. a4 h2 r R\breve
r1 r2 d,
}

CantusText = \lyricmode {
Draw on sweet night, draw on sweet night,
best friend un -- to those _
}

QuintusText = \lyricmode {
Draw on sweet night, draw on sweet night,
best
}

\score {
\context StaffGroup = "Chor"
<<
\context Staff = "Cantus" \with {
instrumentName = \markup \center-column {
\larger "Cantus"
\italic "Sopran I"
}
}
<<
\context Voice = "Cantus" {
\Incipit \CantusIncipit
<< \Global \CantusNoten >>
}
\context Lyrics = "CantusText" \with {
alignBelowContext = "Cantus" }
\lyricsto "Cantus" { \CantusText }
>>

\context Staff = "Quintus" \with {
instrumentName = \markup \center-column {
\larger "Quintus"
\italic "Sopran II"
}
}
<<
\context Voice = "Quintus" {
\Incipit \QuintusIncipit
<< \Global \QuintusNoten >>
}
\context Lyrics = "QuintusText" \with {
alignBelowContext = "Quintus" }
\lyricsto "Quintus" { \QuintusText }
>>
>>

\layout {
indent = #35
short-indent = #7
%incipit-width = #22
}
}

Die Breite des Incipit ist einheitlich, und die Instrumentenbezeichnungen sind vertikal zentriert. In 2.18 aber wird nun alles rechtsbündig gesetzt (mein Code kompiliert in beiden Versionen)!!!

Könnt ihr mir helfen, die 2.16-Methode in 2.18 zu ermöglichen?

Vielen lieben Dank vorab!

Robert

fugenkomponist

  • Member
Re: Incipit und Ausrichtung instrumentName von 2.16→2.18
« Antwort #1 am: Donnerstag, 8. Mai 2014, 17:06 »
Ich glaub, ich versteh entweder nicht, was du meinst, oder ich kann das nicht reproduzieren – bei mir kommt mit Version 2.18.2 das Bild im Anhang raus, mit zentrierten Instrumentenbezeichnungen und gleichbreiten Incipits …

Edit: doch, ich hab mal das untere Incipit noch um ein paar ganze Noten ergänzt
e'\breve\rest e'1\rest r2 a'1 h' c'' d'' e'' s2 s1*7Die sind dann tatsächlich nicht mehr gleich lang. Aber bei gleich langen Incipits sind die Namen zentriert (siehe die beiden nächsten Anhänge)
« Letzte Änderung: Donnerstag, 8. Mai 2014, 17:10 von fugenkomponist »

RobUr

  • Member
Re: Incipit und Ausrichtung instrumentName von 2.16→2.18
« Antwort #2 am: Freitag, 9. Mai 2014, 18:59 »
Hallo fugenkomponist,

danke für die Erhellung, dass es auf anderen Maschinen anders funktioniert! Ich hatte wie wild in Millionen Durchgängen mit 2.16 und 2.18 kompiliert und verschiedene Werte ausprobiert – immer mit dem Ergebnis, dass 2.18 anders einrückt. Manchmal habe ich das Gefühl, dass Lily sich verschluckt oder „heimlich“ eine Art Cache anlegt oder minimale Änderungen schlicht ignoriert …

DASS Lily den indent in 2.18 anders berechnet/verarbeitet, zeigen meine Anhänge.

Ich habe mich nun damit abgefunden, den Einzug etwas zu vergrößern, wodurch die Instrumentenbezeichnungen wieder untereinander zentriert erscheinen.

Vielen Dank für die Mühe – auch diese hat geholfen!

Gruß, Robert