Autor Thema: Bedeutung von ...staff...size... ?  (Gelesen 1800 mal)

stefanhuglfing

  • Member
Bedeutung von ...staff...size... ?
« am: Freitag, 14. August 2015, 02:49 »
Um die Größe der Notenzeilen und Noten festzulegen, kann ich

#(set-global-staff-size 20)
verwenden. Mit dem Ersetzen der Zahl 20 kann ich die gewünschte Größe einstellen.
So weit, so gut.
 Falls ich aber verschiedene Schriftarten verwenden will, habe ich mir von irgendwoher folgenden code kopiert:

\version "2.18.2"   

#(set-global-staff-size 20)

\paper 
 {
  myStaffSize = #20
  #(define fonts
    (make-pango-font-tree "NewCenturySchoolbook"
                          "Liberation Sans"
                          "Liberation Sans Narrow"
                           (/ myStaffSize 20)))
 }

\score { { c' d' e' f' } \layout {} } 

Darin kommen drei Größenangaben vor:
#(set-global-staff-size 20)          myStaffSize = #20           / myStaffSize 20

Wenn ich eine der beiden letzen weg lasse, werde ich mit einer Fehlermeldung bestraft.

um die gewünschte Größe zu erhalten verändere ich die beiden ersten 20er auf die gleiche Zahl, den dritten Wert lasse ich auf 20.
Gut, das funktioniert. Aber ich wüsste gern, warum! Und was die drei Werte bedeuten.

So viel habe ich schon herausgefunden:
Der erste Wert (bei set-global-staff-size) legt die Größe der Notenzeile fest.
Der Zweite Wert (bei myStaffSize = #)   geteilt durch   den dritten Wert (bei / myStaffSize)
ergibt den Faktor, um den die Größe der Notenköpfe verändert wird.

Kann es mir jemand erklären?

fugenkomponist

  • Member
Re: Bedeutung von ...staff...size... ?
« Antwort #1 am: Freitag, 14. August 2015, 10:12 »
Aaaalso, folgendes:

20pt Systemhöhe ist die Standardgröße, deswegen musst du immer um myStaffSize/20 skalieren. Es geht aber einfacher, als die Systemhöhe an zwei verschiedenen Stellen zu definieren. Üblicher ist es, die von LilyPond definierte Variable staff-height zu verwenden und dann im #(define fonts …)-Block diese durch pt und durch 20 zu teilen.

Das hat anscheinend folgenden Hintergrund: staff-height ist die Systemhöhe in Millimetern (warum auch immer nicht pt). Um die in pt umzurechnen gibts die Konstante pt=0.35… (außerdem gibts mm=1). Da set-global-staff-size die Systemhöhe in pt angibt, muss man staff-height also erst einmal durch pt teilen, um von mm nach pt umzurechnen, und dann noch durch 20 wie oben beschrieben. Denn wie du richtig festgestellt hast, ist die Zahl, die da angegeben werden soll, tatsächlich der Skalierungsfaktor bezüglich der Standardgröße. Klingt komplizierter als es in der Anwendung nachher ist. Und der folgende Code ist auch nur so lang, weil er die ganzen Zwischenschritte dieser Rechnung beim Übersetzen der Datei ausgibt, die write- und newline-Befehle brauchst du natürlich nicht.
\version "2.18.2"

#(set-global-staff-size 10)

\paper
{
  #(write mm) % 1mm = 1mm
  #(newline)
  #(write pt) % 1pt = 0.35…mm
  #(newline)
  #(write staff-height) % staff-height = 10pt = 3.5…mm
  #(newline)
  #(write (/ staff-height pt)) % staff-height / 1pt = 10
  #(newline)
  #(write (/ (/ staff-height pt) 20)) % (staff-height / 1pt) / 20 = 10 / 20 = 0.5
  #(newline)
  #(write (/ staff-height pt 20)) % kürzere Schreibweise für staff-height / 1pt / 20 = 0.5

  #(define fonts
     (make-pango-font-tree "NewCenturySchoolbook"
       "Liberation Sans"
       "Liberation Sans Narrow"
       (/ staff-height pt 20))) % die Fonts um 0.5 skalieren
}

\score { { c' d' e' f' } \layout {} }

Ab Version 2.19.12 gibt es übrigens einen neuen Befehl set-global-fonts, mit dem einzelne Fonts benannt gesetzt werden können (man braucht also nicht immer serif, sans und monospace); dieser kann außerdem auch die Noten- und Systemklammernfonts ersetzen (default: Emmentaler/Feta, mir ist da die Benennung nicht ganz klar; die Fontdateien heißen Emmentaler, in der Dokumentation wird er Feta genannt …). Im folgenden Beispiel setze ich z. B. nur den serif- und den sans-Font und verwende außerdem den neuen Musikfont haydn:\paper {
  #(define fonts
    (set-global-fonts
    #:music "haydn"
    #:brace "haydn"
    #:roman "Times New Roman"
    #:sans "Arial"
    #:factor (/ staff-height pt 20)))
}
« Letzte Änderung: Freitag, 14. August 2015, 10:19 von fugenkomponist »

mgd

  • Member
Re: Bedeutung von ...staff...size... ?
« Antwort #2 am: Freitag, 14. August 2015, 12:12 »
Ausgezeichnete und ausführliche Beschreibung :)

Zitat
(default: Emmentaler/Feta, mir ist da die Benennung nicht ganz klar; die Fontdateien heißen Emmentaler, in der Dokumentation wird er Feta genannt …).

Soweit ich weiß ist Feta ein kommerzieller Notenfont und der de facto Standard. Emmentaler ist ein freier Nachbau von Feta. Dem geneigten Leser wird aufgefallen sein, es ist alles Käse...  8)

Als Ergänzung zu den Erklärungen von fugenkomponist möchte ich noch auf die Seite http://fonts.openlilylib.org/ verweisen. Für die Verwendung von alternativen Fonts eine erstklassige Quelle. Der Autor (Abraham Lee) verwaltet unter https://sites.google.com/site/tisimst/Home noch eine weitere wie ich finde extrem informative Site mit vielen interessanten Aspekten von Lilypond. Schwerpunkt sind Fonts aber es sind auch andere spannende Dinge zu finden.

Liebe Grüße,
Michael

fugenkomponist

  • Member
Re: Bedeutung von ...staff...size... ?
« Antwort #3 am: Freitag, 14. August 2015, 12:31 »
Soweit ich weiß ist Feta ein kommerzieller Notenfont und der de facto Standard. Emmentaler ist ein freier Nachbau von Feta. Dem geneigten Leser wird aufgefallen sein, es ist alles Käse...  8)
Falsch, Feta ist LilyPond-eigen und definitiv ein freier Font ;) Und ich glaube, so etwas wie einen de-facto-Standard gibt es nicht, weil viele Verlage eigene Fonts haben (manche Verlage sogar mehrere), desgleichen auch die verschiedenen großen Notationsprogramme. Ich habe allerdings inzwischen nach einiger Suche etwas dazu herausgefunden: Han-Wen Nienhuys, einer der beiden LilyPond-Väter hat das auf der Mailingliste erklärt. Mit Ergänzungen aus meinem Gedächtnis ergibt sich: LilyPond hat ganz zu Anfang den MusiXTeX-Font verwendet, nach und nach wurden aber alle Zeichen neugeschrieben, daraus wurde Feta. Für die Notation alter Musik wurde der Font Parmesan geschaffen. Und Emmentaler vereinigt einfach diese beiden Fonts in einer Datei (pro Entwurfsgröße, und emmentaler-brace für die GrandStaff-Klammern). Außerdem hat er einige Templates für verschiedene Standard-Besetzungen etc.

Edit: Abraham Lee schreibt hier über Fortschritte mit den neuen Fonts (z. B. wird es ein besseres Improviso-Stylesheet geben).

2. Edit: Feta stand ursprünglich für „Font-En-Tja“, witzige Entstehungsgeschichte ;)
« Letzte Änderung: Freitag, 14. August 2015, 14:08 von fugenkomponist »