Fermate zwischen zwei Pausen (gelöst)

Begonnen von juppes, Samstag, 7. Oktober 2017, 22:43

« vorheriges - nächstes »

juppes

Liebe Forumsgmitglieder,

ich wollte etwas aus einem alten Manuskript nachbauen, aber es ist mir nicht gelungen: dort sieht man schon einmal, daß eine Fermate nicht über eine einzelne Pause wie meist üblich, sondern mitten zwischen zwei Pausen geschrieben wird. Meine Fermate läßt sich zwar anstandslos nach oben bewegen, aber horizontale Bewegungen lehnt sie kategorisch ab. Gibt es dafür überhaupt eine Lösung?

Ich verwende Lilypond 2.18.2 und hoffe nun, daß jemand mit tieferen Einblicken in das Räderwerk von Lilypond dazu etwas sagen kann.

Vielen Dank schon mal im voraus.

Malte

Zitat von: juppes am Samstag,  7. Oktober 2017, 22:43
Meine Fermate läßt sich zwar anstandslos nach oben bewegen, aber horizontale Bewegungen lehnt sie kategorisch ab. Gibt es dafür überhaupt eine Lösung?
Was heißt ,,lehnt sie kategorisch ab", was hast du probiert? X-offset funktioniert doch. Und die Haudrauf-Methode extra-offset geht in jedem Fall (ist aber wegen ignoriertem Spacing nicht zu empfehlen).

Zitat
Ich verwende Lilypond 2.18.2 und hoffe nun, daß jemand mit tieferen Einblicken in das Räderwerk von Lilypond dazu etwas sagen kann.
Klar :) Wie gesagt, X-offset ist die erste Möglichkeit, die mir dazu eingefallen ist. Das funktioniert auch ganz gut und mit wenig Aufwand, aber es hat einen gewaltigen Nachteil: Du mußt für jede Stelle den geeigneten Offset-Wert durch Ausprobieren rauskriegen und wenn sich dann nochmal was verschiebt, z. B. weil sich Zeilenumbrüche ändern und Takte schmaler oder breiter werden, mußt du alles nochmal machen. Ich habe noch weitere Dinge probiert, am vielversprechendsten ist es, eine Tuplet (zu deutsch glaub ich n-Tole?) zu setzen und die TupletNumber durch eine Fermate zu ersetzen. Das ganze kann auch noch mit einer kleinen Funktion abgekürzt werden:\version "2.18.2"
\language "deutsch"

% 1. Lösung: X-offset
% Vorteil:
% • einfach, wenig Code
% Nachteile:
% • Wert von Hand raussuchen
% • geänderten Zeilenumbrüchen etc. ggf. anpassen
\relative {
  \time 3/4
  a' a h
  c
  \once \override Script.X-offset = 1.7
  r\fermata r
}

% 2. und 3. Lösung (BreathingSign bzw. RehearsalMark mißbrauchen)
% verworfen, weil nicht besser als 1. und nicht einfacher als 4. Lösung

% 4. Lösung: TupletNumber
% Vorteil:
% • einzige Lösung mit anständiger Zentrierung
\relative {
  \time 3/4
  a' a h
  c
  \once \override TupletBracket.bracket-visibility = ##f
  \once \override TupletNumber.text = \markup \musicglyph #"scripts.ufermata"
  \once \override TupletNumber.font-size = 0
  \tuplet 1/1 { r r }
}

% 5. Lösung: 4. Lösung abgekürzt
% Vorteil:
% • weniger Tipparbeit, falls oft gebraucht
centerFermata =
#(define-music-function (parser location music) (ly:music?)
   #{
     \once \override TupletBracket.bracket-visibility = ##f
     \once \override TupletNumber.text = \markup \musicglyph #"scripts.ufermata"
     \once \override TupletNumber.font-size = 0
     \tuplet 1/1 #music
   #})

\relative {
  \time 3/4
  a' a h
  c \centerFermata { r r }
}

juppes

#2
Da werd doch der Hund in der Pfanne verrückt! Ich war dicht an der Lösung dran, habe aber immer nicht ganz den richtigen Ausdruck verwendet. Kein Wunder, daß es nicht geht.

Lösung 1 reicht mir, da das nicht sooo oft vorkommt. Habe sogar den Wert beibehalten können!

Blöde Frage am Schluß: wo suche ich am besten nach solchen Dingen? Habe im Netz gesucht, aber vielleicht nicht die richtig formulierte Frage gestellt und auch im Handbuch, aber das letztere scheint mir an der Stelle einsilbig zu sein oder ich verstehe seine Struktur nicht richtig. Auch im Snippet Repository gab es nichts, was mich auf den rechten Weg gebracht hätte. Woher hast zum Beispiel du diese Kenntnisse?

Schließlich und endlich auch noch herzlichen Dank für die Lösungen - die sind direkt in meine Snippet-Sammlung gewandert!

Malte

#3
Zitat von: juppes am Samstag,  7. Oktober 2017, 23:59
Blöde Frage am Schluß: wo suche ich am besten nach solchen Dingen? Habe im Netz gesucht, aber vielleicht nicht die richtig formulierte Frage gestellt und auch im Handbuch, aber das letztere scheint mir an der Stelle einsilbig zu sein oder ich verstehe seine Struktur nicht richtig. Auch im Snippet Repository gab es nichts, was mich auf den rechten Weg gebracht hätte. Woher hast zum Beispiel du diese Kenntnisse?
Ich denke mal, meine Kenntnisse kommen aus ganz vielen verschiedenen Quellen:

  • Ich hatte selbst schon einige Probleme, die andere im Forum und auf der Mailingliste gelöst haben. Diese Lösungen kann man sich entweder merken/aufschreiben (z. B. wenn sie nur aus nem einfachen \override bestehen) oder analysieren und probieren Zeile für Zeile (!) zu verstehen (wenns mehrere \overrides oder auch ganze Scheme-Funktionen sind).
  • Stoße ich auf ein größeres Problem, suche ich erst im Snippet Repository, hier im Forum (und im Archiv) und auf der englischen Mailingliste. Werd ich da nicht fündig, probier ich mich selbst an einer Lösung.
  • Stoße ich auf ein kleineres Problem oder bin gerade auf der Lösungssuche für ein größeres, schau ich vor allem in die Referenz der Interna/Internals Reference. Dort schau ich mir an, welche Eigenschaften ein Grob hat (aufpassen: manche Eigenschaften finden sich nur in den Interfaces, die jeweils unter der Auflistung der Eigenschaften verlinkt sind) und probiere herauszufinden, was mir davon weiterhilft. Ähnlich auch für andere Dinge als Grobs und scheme-Funktionen.
  • Ich habe immer eine aktuelle Kopie des LilyPond-Codes rumliegen. Dort sind vor allem die .ly- und .scm-Dateien interessant. Ich kann diese nach Grob-, Eigenschafts-, Funktionsnamen etc. durchsuchen. Das geht übrigens auch ohne den Code extra herunterzuladen: Die .ly- und .scm-Dateien sind ja auch in jedem Release enthalten, nur der C++-Code und ein paar andere Dinge nicht ;)
  • Und zu guter Letzt der Punkt, der vielleicht am meisten beiträgt: Ich helfe Leute bei ihren Problemen, auch wenn ich die Lösung selbst nicht kenne. Dadurch hab ich eine viel größere Bandbreite von Problemstellungen, komme mit unterschiedlichstem Code in Kontakt, und lerne vor allem mehr in gleicher Zeit ;)

Edit: Speziell zu Positionierung von Objekten sind X-offset, extra-spacing-width, X-extent, Y-offset, extra-spacing-height, Y-extent, padding, staff-padding, staff-position und outside-staff-priority sowie extra-offset zu nennen. Nicht alle Grobs haben alle diese Eigenschaften, aber man kommt damit doch recht weit. Ich würde die ungefähr in der Reihenfolge outside-staff-priority → staff-padding/padding → staff-position → X/Y-offset → extra-spacing-width/height → X/Y-extent → extra-offset abklappern; sie sind hier ungefähr nach ,,wie voraussehbar ist ihr Effekt und wie viel kann kaputt gehen" sortiert ;)

So hat outside-staff-priority nur Einfluß auf die (vertikale) Reihenfolge von Grobs, staff-padding und padding auf Abstände zu anderen Grobs, staff-position auf eine genaue Position, X/Y-offset auf eine Abweichung von der Standardposition (wobei die nicht immer standardmäßig 0 sind, weshalb z. B. bei Pausen staff-position zu bevorzugen ist).
extra-spacing-width/height sowie X/Y-extent sorgen dafür, daß für ein Grob andere Maße bei der Positionierung angenommen werden, extra-offset verschiebt ein Grob, nachdem alles positioniert wurde (und ist damit gefährlich: Einerseits wird an der ursprünglichen Stelle des Grobs Platz freigehalten, andererseits kann das Grob an seiner neuen Stelle mit anderen kollidieren).

juppes

Hallo Malte,

ich war ein paar Tage mit ganz anderen Dingen beschäftigt und auf Reisen. Ich möchte aber noch danke sagen für Deine sehr ausführliche Antwort, die mir eine Menge Anregungen gegeben hat. Ich habe immer einen Widerwillen gehabt, mich allzutief in die .scm- und .ly-Dateien reinzulesen, werde aber wohl kaum darum herumkommen, wenn ich solche Sonderwünsche habe. Die innere Logik mancher Zusammenhänge in Lilypond ist mir dafür offenbar leider nicht klar genug. Wer aber "schrauben" will, braucht das, mal mehr, mal weniger. Du hast mich motiviert, noch einmal die Ärmel aufzukrempeln.

Ein so vielseitiges Programm wie Lilypond hat eben auch sehr, sehr viele Schrauben zum Drehen. Wir alle brauchen wahrscheinlich sowieso immer nur einen Bruchteil seiner Fähigkeiten, je nach dem Repertoire, für das wir Noten setzen wollen oder müssen. Aber es ist eben so hervorragend, daß man beinahe alles, was man sich nur vorstellen kann, auch realisiert bekommt. Sicher ist dazu manchmal auch eine gewisse Ausdauer nötig, aber bisher ist mir noch kein Problem wirklich ungelöst liegengeblieben, auch dank der Unterstützung von Leuten, die sich tiefer in die Materie eingearbeitet haben oder konnten als ich. Wer viel Noten schreibt, der schafft es manchmal einfach nicht, weiter links und rechts zu schauen - sonst wird er nicht fertig...  :-\