Autor Thema: Incipit und horizontale Ausrichtung des shortInstrumentName  (Gelesen 312 mal)

Grisu76

  • Newbie
  • *
  • Beiträge: 1
Incipit und horizontale Ausrichtung des shortInstrumentName
« am: Sonntag, 28. März 2021, 22:14 »
Liebe Spezialisten,
ich habe einen alten Code (2.12) mit 2.22 laufen lassen. Der alte Code mit dem Incipit hat nicht mehr funktioniert, aber ich habe die Funktion
\incipit verwendet; jetzt werden alle alle Instrumente mit \override Staff.InstrumentName #'self-alignment-X = #LEFT linksbündig gedruckt, aber nur die Stimmen mit dem Incipit nicht - siehe Attachment. Wie bekomme ich die Abkürzungen bei den Stimmen mit den Incipits linksbündig?
Bei meinem Minimalexample ist es auch so, dass bei den Incipits nicht in das horizontal Alignment eingegriffen wird (siehe unten);
Ich danke für Eure Hilfe!
Cheers, Christian

\score{
\new ChoirStaff
         <<
         
            \new Staff = Soprano

            {
                                  \override Staff.InstrumentName #'self-alignment-X = #LEFT
                                  \set Staff.instrumentName = #"Soprano"
                        \set Staff.shortInstrumentName =#"S"
                        \set Staff.midiInstrument = #"violin"
            <<
               \incipit {\clef "soprano" \override Staff.TimeSignature #'stencil = ##f s1}
               \repeat unfold 12 {c''4 c'' c'' c''}
            >>
            }   
            
            \new Staff = Alto
            {
              \override Staff.InstrumentName #'self-alignment-X = #LEFT
                                  \set Staff.instrumentName = #"Alto"
                        \set Staff.shortInstrumentName =#"A"
                        \set Staff.midiInstrument = #"violin"
            <<
               \incipit {\clef "alto" \override Staff.TimeSignature #'stencil = ##f s1} 
               \repeat unfold 12 {c''4 c'' c'' c''}
            >>
            }
      
            \new Staff = Tenore
            {
              \override Staff.InstrumentName #'self-alignment-X = #LEFT
                                  \set Staff.instrumentName = #"Tenore"
                        \set Staff.shortInstrumentName =#"T"
                        \set Staff.midiInstrument = #"viola"
            <<
               \incipit {\clef "tenor" \override Staff.TimeSignature #'stencil = ##f s1}
               \clef "treble_8"
               \repeat unfold 12 {c'4 c' c' c'}
            >>
            }

            \new Staff = Basso
            {
            \override Staff.InstrumentName #'self-alignment-X = #LEFT
                      \set Staff.instrumentName = #"Basso   " %\markup{\normalsize{Basso}}
                      \set Staff.shortInstrumentName =#"B"
                      \set Staff.midiInstrument = #"cello"
            <<
               \repeat unfold 12 {c''4 c'' c'' c''}
            >>
            }

         >>
}

harm6

  • Hero Member
  • *****
  • Beiträge: 912
Antw:Incipit und horizontale Ausrichtung des shortInstrumentName
« Antwort #1 am: Montag, 29. März 2021, 00:36 »
Hallo Grisu,

willkommen im Forum.

Ein paar allgemeine Sachen:
Bitte setze längeren Code in code-tags:
[ code ] mein-code [ / code ]
Natürlich ohne die Leerzeichen, erreichbar über den #-Button

Füge auf jeden Fall die Version ein.

Du erhöhst Deine Chancen eine schnelle und hilfreiche Antwort zu bekommen, wenn Du Deinen Code minimal gestaltest, z.B. hätten es zwei Staffs getan/midi-Setzungen hättest Du auch weglassen können.
Eine vernünftige Indentation gehört auch dazu.

Allgemeine Ratschläge:
Mit neuer Syntax können viele Angaben weniger aufwendig vorgenommen werden. Siehe meinen Code unten.
Füge nach { und vor } immer ein Leerzeichen ein, ansonsten kann es schon mal seltsame Fehlermeldungen geben:
  \new Staff \with { \override NoteHead.color = #red} { b1 }
->
Zitat von: terminal
error: GUILE signaled an error for the expression beginning here
\new Staff \with { \override NoteHead.color = #
                                               red} { b1 }
Unbound variable: red}
atest-105.ly:2107:58: error: Unfinished main input
\new Staff \with { \override NoteHead.color = #red} { b1
                                                         }
atest-105.ly:2107:53: warning: Music unsuitable for context-mod
\new Staff \with { \override NoteHead.color = #red}
                                                    { b1 }
atest-105.ly:2107:58: error: syntax error, unexpected end of input
\new Staff \with { \override NoteHead.color = #red} { b1
                                                         }

Zur eigentlichen Frage.
Ich glaube \incipit hat einen kleinen bug:
es muß self-alignment-X auf RIGHT setzen, tut es auch, aber danach kommt man da nie wieder von weg...
Also habe ich \incipit so verändert, daß das (self-alignment-X auf RIGHT) nur für den ersten InstrumentName gilt, also die instrumentName-Setzung aber nicht für die folgenden, die shortInstrumentName-Setzungen. Stattdessen wird dort der vom user gesetzte Wert genommen, mit CENTER als fall-back.
Ansonsten setze indent, short-indent und incipit-width auf vernünftige Werte (unten sind sie der Demonstration wegen sehr gross).

\version "2.22.0"

incipit =
#(define-music-function (incipit-music) (ly:music?)
  (_i "Output @var{incipit-music} before the main staff as an indication of
    its appearance in the original music.")
  #{
    \once \override Staff.InstrumentName.stencil =
      #(lambda (grob)
        (let* ((instrument-name (ly:grob-property grob 'long-text))
               (align-x (ly:grob-property grob 'self-alignment-X 0))
               (align-y (ly:grob-property grob 'self-alignment-Y 0)))
        (set! (ly:grob-property grob 'long-text)
          #{ \markup {
            \score
            {
              \new MensuralStaff \with {
                \override InstrumentName.self-alignment-X = #align-x
                \override InstrumentName.self-alignment-Y = #align-y
                instrumentName = #instrument-name
              }
              {
                $incipit-music
              }
              \layout {
                $(ly:grob-layout grob)
                indent-incipit-default = 15\mm
                line-width = #(primitive-eval
                  '(or (false-if-exception indent)
                    indent-incipit-default))
                indent = #(primitive-eval
                           '(or (false-if-exception (- line-width incipit-width))
                            (* 0.5 line-width)))
                ragged-right = ##f
                ragged-last = ##f
                system-count = 1
                \context {
                  \Score
                  \remove "Default_bar_line_engraver"
                }
              }
            }
            }
          #})
          (set! (ly:grob-property grob 'self-alignment-Y) #f)
          ;(set! (ly:grob-property grob 'self-alignment-X) RIGHT)
          (let ((parts (ly:spanner-broken-into (ly:grob-original grob))))
            (if (and (pair? parts) (not (equal? grob (car parts))))
                (ly:grob-set-property! grob 'self-alignment-X align-x)
                (ly:grob-set-property! grob 'self-alignment-X RIGHT)))

          (system-start-text::print grob)))
  #})

\score {
  \new ChoirStaff
    <<
      \new Staff = Soprano
        \with {
          instrumentName = "Soprano"
          shortInstrumentName = "S"
          midiInstrument =  "violin"
        }
        {
          \incipit { \clef "soprano" \omit Staff.TimeSignature s1 }
          \repeat unfold 12 { c''4 c'' c'' c''}
        }

      \new Staff = Alto
        \with {
          instrumentName = "Alto"
          shortInstrumentName = "A"
          midiInstrument = "violin"
        }
        {
          \incipit { \clef "alto" \omit Staff.TimeSignature  s1 }
          \repeat unfold 12 { c''4 c'' c'' c''}
        }

      \new Staff = Tenore
        \with {
          instrumentName = "Tenore"
          shortInstrumentName = "T"
          midiInstrument = "viola"
        }
        {
          \incipit { \clef "tenor" \omit Staff.TimeSignature s1 }
          \clef "treble_8"
          \repeat unfold 12 { c'4 c' c' c' }
        }

      \new Staff = Basso
        \with {
          instrumentName = "Basso"
          shortInstrumentName = "B"
          midiInstrument = "cello"
        }
        {
          \repeat unfold 12 { c''4 c'' c'' c'' }
        }
    >>
  \layout {
    indent = 5\cm
    short-indent = 5\cm
    incipit-width = 3\cm
    \override Staff.InstrumentName.self-alignment-X = #LEFT
  }
}

Gruß,
  Harm

EDIT diverse Tippfehler korrigiert, gibt wahrscheinlich noch mehr ...
« Letzte Änderung: Dienstag, 30. März 2021, 00:45 von harm6 »

harm6

  • Hero Member
  • *****
  • Beiträge: 912
Antw:Incipit und horizontale Ausrichtung des shortInstrumentName
« Antwort #2 am: Montag, 29. März 2021, 18:12 »
Zitat von: Harm
Ich glaube \incipit hat einen kleinen bug
Patch dazu:
https://gitlab.com/lilypond/lilypond/-/merge_requests/707

EDIT hier auch :(
« Letzte Änderung: Dienstag, 30. März 2021, 00:46 von harm6 »