Autor Thema: wieder offen: Incipite  (Gelesen 3214 mal)

Joei

  • Member
wieder offen: Incipite
« am: Mittwoch, 20. Februar 2013, 11:04 »
und das nächste Problem:

laut Doku sind Incipte in Arbeit - bei den Sniplets findet sich ein sehr elaboriertes Beispiel (zuviel für meine Zwecke und zu kompliziert für mein Anfängerverständnis...): http://lilypond.org/doc/v2.16/Documentation/snippets/staff-notation#staff-notation-incipit

ich möchte doch lediglich ein ganz simplen Incipt mit einem anderen Schlüssel :(  - siehe Attachment.

HSH Joei
« Letzte Änderung: Donnerstag, 7. März 2013, 15:27 von Joei »

Be-3

  • Member
Re: Incipte
« Antwort #1 am: Mittwoch, 20. Februar 2013, 14:00 »
Hallo Joei,

"ganz simpel" ist eben relativ... ;)
Im Grunde basiert der von Dir verlinkte Schnipsel auf der Idee, die Instrumentenbezeichnung "ein wenig" zu erweitern, so daß noch ein wenig Notation dahinter hängt.
Die Schwierigkeit liegt vor allem in der Plazierung der Einzelelemente.

Ich habe mal von dieser Vorlage ausgehend ein bißchen abgeändert/vereinfacht, so daß ein "normaler" (kein mensuraler) Staff angelegt wird und auch die Notenlinien durchgehend sind.
In der Partitur muß dann der Instrumentenname gesetzt werden und  z. B. \incipit { \clef soprano } eingefügt werden.

Die Verschiebungen sind einfach durch Probieren fest eingefügt, erfüllen aber ihren Zweck.

\version "2.16.1"

incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
  #{
    \once \override Staff.InstrumentName #'self-alignment-X = #LEFT
    \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 #'extra-offset = #'(5 . 0)
    \once \override Staff.InstrumentName #'stencil =
      #(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text)))
   (set! (ly:grob-property grob 'long-text)
#{ \markup
      \score
         {
     { \context Staff \with {
                          instrumentName = \markup \fill-line { #instrument-name \null }
                                \override InstrumentName #'self-alignment-X = #LEFT                               
                                \override InstrumentName #'extra-offset = #'(4 . 0)
                                \override InstrumentName #'X-extent = #'(0 . 16)
                                \override Clef #'font-size = #-3
                                \override TimeSignature #'stencil = ##f
          \override VerticalAxisGroup #'Y-extent = #'(-4 . 4)
                                \override StaffSymbol #'extra-offset = #'(-2.5 . 0)
                                \override Clef #'extra-offset = #'(-2.5 . 0)
                     } $incipit-music s1 \bar ""
     }
                   \layout { $(ly:grob-layout grob)
             line-width = #18
                     indent = #12
             ragged-right = ##f
             ragged-last = ##f
                           }
}
  #})
           (system-start-text::print grob)))
  #})

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


sopranoMusic = \relative c'' {
  \clef treble
  c1
}
altoMusic = \relative c'' {
  \clef treble
  c1
}
tenoreMusic = \relative c' {
  \clef "treble_8"
  c1
}
bassoMusic = \relative c {
  \clef bass
  c1
}

\score {
    \new ChoirStaff <<
      \new Staff {
        \set Staff.instrumentName = "Soprano"
        \incipit { \clef soprano }
        \sopranoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Alto"
        \incipit { \clef alto }
        \altoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Tenore"
        \incipit { \clef tenor }
        \tenoreMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Basso I"
        \bassoMusic
      }
    >>
    \layout {
      indent = #24
      \context {
        \Staff
        \override InstrumentName #'self-alignment-X = #LEFT
      }
    }
}

Viele Grüße
Torsten

Joei

  • Member
Re: Incipte
« Antwort #2 am: Mittwoch, 20. Februar 2013, 14:15 »
fantastisch. HERZLICHEN DANK! Funktioniert superb :)

Joei

  • Member
Wieder offen: Incipte
« Antwort #3 am: Donnerstag, 7. März 2013, 10:53 »
Moin :)

tja... alles prächtig - bis das zweite System kam...  der ShortInstrumentName ist "verrückt". Ich vermute, dass ich entsprechend die incipit Definition um overrides für ShortInstrumentName erweitern muss - da da aber ja keinerlei Notation mehr auftauchen muss ist das sicher nicht so komplex wie die Anfangsdefinition. Allerdings scheint soetwas wie

\once \override Staff.shortInstrumentName #'extra-offset = #'(5 . 0)
nicht zu gehen...

Kann mir jemand bitte auf die Sprünge helfen? Habe auch meine Verständnisfragen im Quelltext kommentiert...   Danke!

\version "2.16.2"



incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
  #{
    \once \override Staff.InstrumentName #'self-alignment-X = #CENTER
    \once \override Staff.InstrumentName #'self-alignment-Y = #UP
    \once \override Staff.InstrumentName #'Y-offset = #(lambda (grob) (+ 4 (system-start-text::calc-y-offset grob))) %Was geschieht hier?!?
    \once \override Staff.InstrumentName #'extra-offset = #'(5 . 0) % Positioniert Gesamtsystem aus Instrumentenname und "Vortakt"
    \once \override Staff.InstrumentName #'stencil =  % Hier wird das Gesamtkonstrukt zusammengesetzt
      #(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text)))
   (set! (ly:grob-property grob 'long-text)
#{ \markup
      \score
         {
     { \context Staff \with {
                          instrumentName = \markup \fill-line { #instrument-name \null }
                                \override InstrumentName #'self-alignment-X = #CENTER      %Auswirkung?!? Ggf im Layout überschrieben.. s.u.                         
                                \override InstrumentName #'extra-offset = #'(0 . 0)  %Positioniert den Instrumentennamen
                                \override InstrumentName #'X-extent = #'(0 . 16) %??? 16 = Breite des möglichen Namens?
                                \override Clef #'font-size = #-3 %kleinerer Extra-Schlüssel
                                \override TimeSignature #'stencil = ##f %keine Taktangabe
          \override VerticalAxisGroup #'Y-extent = #'(-4 . 4) %???
                                \override StaffSymbol #'extra-offset = #'(-2.5 . 0)  %Positioniert die Notenlinien des Vortaktes
                                \override Clef #'extra-offset = #'(-2.5 . 0) %Positioniert den Extraschlüssel
                           
                     } $incipit-music s1 \bar "" %"füllt" den Vortakt
     }
                   \layout { $(ly:grob-layout grob)
             line-width = #18
                     indent = #12
             ragged-right = ##f
             ragged-last = ##f
                           }
}
  #})
           (system-start-text::print grob)))
  #})

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


sopranoMusic = \relative c'' {
  \clef treble
  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1 e1
}
altoMusic = \relative c'' {
  \clef treble
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}
tenoreMusic = \relative c' {
  \clef "treble_8"
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}
bassoMusic = \relative c {
  \clef bass
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}

\score {
    \new ChoirStaff <<
      \new Staff {
        \set Staff.instrumentName = "Soprano II"
        \incipit { \clef soprano }
        \set Staff.shortInstrumentName = "S II"
        \sopranoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Alto"
        \set Staff.shortInstrumentName = "A II"
        \incipit { \clef alto }
        \altoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Tenore"
        \incipit { \clef tenor }
        \tenoreMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Basso I"
        \bassoMusic
      }
    >>
    \layout {
      indent = #30
      short-indent = #15
      \context {
        \Staff
        \override InstrumentName #'self-alignment-X = #LEFT
      }
    }
}
« Letzte Änderung: Donnerstag, 7. März 2013, 11:01 von Joei »

harm6

  • Member
Re: wieder offen: Incipte
« Antwort #4 am: Donnerstag, 7. März 2013, 13:30 »
Hallo joei,

leider gibt es derzeit kein grob ShortInstrumentName in LilyPond (eine Schwäche, wie ich finde), vielmehr wird der shortInstrument dem InstrumentName zugeordnet.
Das führt dazu, daß viele Befehle die eigentlich nur für den InstrumentName gedacht sind auch Auswirkungen auf den shortInstrumentName haben.

Das Problem ist nachstellbar mit diesem kurzen snippet:

\version "2.16..2"

  \new Staff \with { \override InstrumentName #'extra-offset = #'(5 . 0) }
     {
        \set Staff.instrumentName = "xyzxyz"
        \set Staff.shortInstrumentName = "xyzxyz"
        c''1 \break c''
      }

möglicher Lösungsweg:
AFAIK, ist auch der Instrument ein (broken) Spanner.
Auslesen des ersten Teils des spanners via ly:spanner-broken-into und dann die Funktion nur auf das erste Element anwenden.
Vielleicht komme ich heute abend dazu es auszuarbeiten, es sei denn Torsten ist schneller, jetzt muß ich zur Arbeit :(


Gruß,
  Harm

Be-3

  • Member
Re: wieder offen: Incipte
« Antwort #5 am: Donnerstag, 7. März 2013, 14:12 »
Hallo Joei,

wie Harm schon geschrieben hat, macht Lilypond - was die Anordnung, Verschiebungen usw. angeht - keinen Unterschied zwischen dem langen und dem kurzen Instrumentennamen: für beide ist das Grob InstrumentName zuständig.

Eine Lösung habe ich jetzt auf brutale, aber effektive Weise dadurch erreicht, daß ich alle Änderungen an X- und Y-Position und vor allem die immer etwas unglücklichen extra-offsets entfernt habe und stattdessen feste X-Ausdehnungen der Instrumentenbezeichnungen vorgebe.

\incipit-Funktion setzt X-Ausdehnung fix und ändert den Stencil der (langen) Instrumentenbezeichnung:

Der Instrumentenname (egal, ob lang oder kurz) wird erhält links die Ausdehnung 2 und nach rechts die Ausdenung 0 (also keine) um die Verschiebung des Incipit-Notensystems erzwingen zu können, denn normalerweise würden die Instrumentennamen nach links "ausweichen", wenn sie zu lang werden.

    \override Staff.InstrumentName #'X-extent = #'(2 . 0)


Innerhalb der Incipit-Score-Definition

Innerhalb des Incipit-Scores dann wiederum eine kleine "Korrektur" der linken Ausdehnung des Instrumentennamens, damit die Instrumentennamen mit und ohne Incipit schön untereinanderstehen.

    \override InstrumentName #'X-extent = #'(-0.3 . 0)

Damit die Incipit-Systeme genau auf der selben Höhe sitzen wie die Haupt-Systeme, setzten wir gewaltsam die Y-Ausdehnung nach oben und unten auf jeweils 0, damit Lilypond nicht auf die Idee kommt, sie vertikal verschieben zu müssen:
    \override VerticalAxisGroup #'Y-extent = #'(0 . 0)
Kommentiere die Zeile aus, und Du wirst sehen, daß die Notenlinien auf der falschen Höhe sind.

Mit line-width und indent kann man jetzt komfortabel einstellen, wie lang die Incipit-Linien sind und wie groß der Abstand zwischen Namen und Linien ist.

Im "Haupt-Score" habe ich auch indent und short-indent noch ein wenig angepaßt, damit auch die langen und kurzen Instrumentenbezeichnungen untereinanderstehen.


\version "2.16.2"

incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
  #{
    \override Staff.InstrumentName #'X-extent = #'(2 . 0)
    \override Staff.InstrumentName #'stencil =  % Hier wird das Gesamtkonstrukt zusammengesetzt
      #(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text)))
   (set! (ly:grob-property grob 'long-text)
#{ \markup %\combine "" \translate #'(1 . 0)
      \score
         {
     { \context Staff \with {
                          instrumentName = \markup \fill-line { #instrument-name \null }
                                \override InstrumentName #'X-extent = #'(-0.3 . 0)
                                \override Clef #'font-size = #-3 %kleinerer Extra-Schlüssel
                                \override TimeSignature #'stencil = ##f %keine Taktangabe
          \override VerticalAxisGroup #'Y-extent = #'(0 . 0) %Incipit-System ohne Y-Ausdehnung wg. Positionierung
                     } $incipit-music s1 \bar "" %"füllt" den Vortakt
     }
                   \layout { $(ly:grob-layout grob)
             line-width = #18
                     indent = #12
             ragged-right = ##f
             ragged-last = ##f
                           }
}
  #})
           (system-start-text::print grob)))   
  #})

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


sopranoMusic = \relative c'' {
  \clef treble
  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1 e1
}
altoMusic = \relative c'' {
  \clef treble
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}
tenoreMusic = \relative c' {
  \clef "treble_8"
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}
bassoMusic = \relative c {
  \clef bass
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}

\score {
    \new ChoirStaff <<
      \new Staff {
        \set Staff.instrumentName = "Soprano II"
        \incipit { \clef soprano }
        \set Staff.shortInstrumentName = "S II"
        \sopranoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Alto"
        \incipit { \clef alto }
        \set Staff.shortInstrumentName = "A II"
        \altoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Tenore"
        \incipit { \clef tenor }
        \tenoreMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Basso I"
        \bassoMusic
      }
    >>
    \layout {
      indent = #28
      short-indent = #10
      \context {
        \Staff
        \override InstrumentName #'self-alignment-X = #LEFT
      }
    }
}


Ich hoffe, das hilft Dir weiter...

Viele Grüße
Torsten


Joei

  • Member
Re: wieder offen: Incipte
« Antwort #6 am: Donnerstag, 7. März 2013, 15:22 »
Danke Harm, Danke Torsten,

vor allem auch für die Erläuterungen - so komfortabel das auch ist, wenn Ihr fix eine Lösung strickt - ich will ja irgendwann auch weniger nerven und mehr selber können. Leider ists damit noch nicht weit her...

Torsten ich habe in Deinem Source Code noch einen auskommentierten \combine "" \translate #'(-3 . 0) gefunden. Der hat bei mir letztlich geholfen die Incipite mit den restlichen Instrumentennamen bündig zu machen... (ich brauchte den Beginn weiter links... und mit \override InstrumentName #'X-extent = #'(5 . 0) und positiven Werten (hier 5) kam ich nicht weiter.

allerdings habe ich nicht verstanden, wie die feste X-Ausdehnung die Darstellung beinflusst - ich merke keinerlei Unterschied zwischen\override Staff.InstrumentName #'X-extent = #'(1 . 0) und \override Staff.InstrumentName #'X-extent = #'(10 . 0)
Auch noch nicht völlig klar ist mir, was  \override InstrumentName #'X-extent = #'(-0.3 . 0) bewirkt - hier scheinen positive Werte auch keinerlei einfluss zu haben.

line-width und indent hab ich kapiert und sie funktionieren jetzt...

Danke für Eure "Nachhilfe"

Joei

Hier noch das etwas ausgedehntere Beispiel mit dem "extra-offset in der Layoutumgebung...

\version "2.16.2"
\paper {
  %#(set-paper-size "a4")
  annotate-spacing = ##f
  two-sided = ##t
  inner-margin = 17\mm
  outer-margin = 18\mm
  top-margin = 15\mm
  bottom-margin = 17\mm
  ragged-bottom = ##f
 
  indent = 3.2\cm  % space for instrumentName
  short-indent = 1.5\cm  % space for shortInstrumentName
  first-page-number = 0
}

\header {
  title =
    \markup
      \column {
         \vspace #0 %\translate #'(0 . -1)
         \fill-line {
             \override #'(font-name . "Calluna Italic")
               \italic \abs-fontsize #13 { "Beispielkantate zum Thema" }
             \null
         }
         \vspace #1 %Abstand Komponist zu Titel
      }
     
       
   
  subtitle = 
    \markup 
      \fill-line {
         \override #'(font-name . "Calluna")
            \abs-fontsize #22 "Incipit" %hier war der Name mit Leerzeichen verschovben
         \null
      }
 

%{ subsubtitle =  \markup
      \column {
         \vspace #1 %\translate #'(19 . 0)
         \fill-line {
             \override #'(font-name . "Calluna")
               \italic \abs-fontsize #13 { "Psalm 43" }
             \null
         }
         \vspace #1 %Abstand Komponist zu Titel
      }%}
 
 
 
 
  composer = \markup  \override #'(font-name . "Calluna")  \abs-fontsize #10 {  \concat { "Johann " Ern\char ##xFB06 " Bach" }  }
  opus = "1722-1777"
  copyright =\markup \smaller  { \char ##x00A9 "Johannes Roeßler CC BY-NC-SA 3.0 // engraved with LilyPond" }
  tagline = ""
 
 
}


incipit =
#(define-music-function (parser location incipit-music) (ly:music?)
  #{
    \override Staff.InstrumentName #'X-extent = #'(3 . 0)
    \override Staff.InstrumentName #'stencil =  % Hier wird das Gesamtkonstrukt zusammengesetzt
      #(lambda (grob)
(let* ((instrument-name (ly:grob-property grob 'long-text)))
   (set! (ly:grob-property grob 'long-text)
#{ \markup \combine "" \translate #'(-3.6 . 0)
      \score
         {
     { \context Staff \with {
                          instrumentName = \markup \fill-line { #instrument-name \null }
                                \override InstrumentName #'X-extent = #'(-0.3 . 0)
                                \override Clef #'font-size = #-3 %kleinerer Extra-Schlüssel
                                \override TimeSignature #'stencil = ##f %keine Taktangabe
          \override VerticalAxisGroup #'Y-extent = #'(0 . 0) %Incipit-System ohne Y-Ausdehnung wg. Positionierung
                     } $incipit-music s1 \bar "" %"füllt" den Vortakt
     }
                   \layout { $(ly:grob-layout grob)
             line-width = #22
                     indent = #16
             ragged-right = ##f
             ragged-last = ##f
                           }
}
  #})
           (system-start-text::print grob)))   
  #})

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


sopranoMusic = \relative c'' {
  \clef treble
  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1 e1
}
altoMusic = \relative c'' {
  \clef treble
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}
tenoreMusic = \relative c' {
  \clef "treble_8"
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}
bassoMusic = \relative c {
  \clef bass
  c1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1  c1 c1 d1 e1 f1 d1 c1 d1 e1
}

\score {
    \new ChoirStaff <<
      \new Staff {
        \set Staff.instrumentName = "Soprano II"
        \incipit { \clef soprano }
        \set Staff.shortInstrumentName = "S II"
        \sopranoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Alto"
        \incipit { \clef alto }
        \set Staff.shortInstrumentName = "A II"
        \altoMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Tenore"
        \incipit { \clef tenor }
        \set Staff.shortInstrumentName = "T II"
        \tenoreMusic
      }
      \new Staff {
        \set Staff.instrumentName = "Basso I"
        \set Staff.shortInstrumentName = "B II"
        \bassoMusic
      }
    >>
    \layout {
      %indent = #28
     % short-indent = #10
     \context {
        \Staff
        \override InstrumentName #'self-alignment-X = #LEFT %überschreibt die Ausrichtung der Intrumentennamen für "nicht incipit"
        \override InstrumentName #'extra-offset = #'(3 . 0) %
      }
    }
}
« Letzte Änderung: Donnerstag, 7. März 2013, 15:30 von Joei »

prott

  • Member
Re: wieder offen: Incipite
« Antwort #7 am: Donnerstag, 7. März 2013, 18:38 »
Hallo zusammen,

Eine Bitte, die ungefähr mit dem Thema zu tun hat:
Ein ShortInstrumentName ist eigentlich nur nötig, wenn man Notenzeilen zeitweise ausblenden will. Tut letzteres bitte zumindest für einen Chor nach Möglichkeit nicht. Das gesparte Papier ist die Orientierungsschwierigkeiten, die ich z. B. in der (ansonsten sehr schönen) Byrd-Ausgabe von Fraser auf der CPDL hatte, nicht wert. Es mag Ausnahmen geben, wie  ||: 5 Zeilen Solo, 1 Zeile Chor :|| .

Joei

  • Member
Re: wieder offen: Incipite
« Antwort #8 am: Donnerstag, 7. März 2013, 19:50 »
Moin prott,

ich finde bei einer großen Partitur mit Orchester und zweí Chören die ShortInstrumentNames durchaus sinnvoll - der Chor bekommt ohnehin nur eine Chorpartitur mit Klaviersystem drunter - da wird dann nicht weggelassen...

Joei