Wechselschlüssel und Zeilenumbruch

Begonnen von chf, Samstag, 17. November 2018, 14:25

« vorheriges - nächstes »

chf


\version "2.19.2"
enhA = \relative c'' {
  \clef treble 
c1~c\fermata \time 1/4
\break
r8 c
}

vcA = \relative c' {
  \clef bass
c1~c \once \override Staff.Clef.X-offset = #1
\clef tenor \time 1/4 
r4
}

\score {
<<
\new Staff < <\enhA>>
\new Staff  <<\vcA >>
>>
}


Liebe Freunde,

die Verschiebung des Wechselschlüssels überträgt sich - wie man sieht - auch auf den Zeilenanfang.
Wie kann ich das abändern  (außer durch Umbruch an anderer Stelle...!) ?

Wenn es eine Möglichkeit gibt, wisst ihr sie doch sicher.

Gruß Christa

Malte

Warum versetzt du überhaupt den Schlüssel? Das hat im Minimalbeispiel keine Auswirkung auf die erste Zeile ...

chf

ZitatWarum versetzt du überhaupt den Schlüssel?

Hallo Malte,

um diese Frage zu beantworten, habe ich die Bildchen beigefügt. Sie zeigen die tatsächlichen Platzverhältnisse...


Malte

Ich find ihn da nicht schlecht ... ist das die Version vor oder nach dem \override?

chf


harm6

Hallo,

das Problem ist folgendes:
Dein \once \override Staff.Clef.X-offset = #1 hat keine sichtbare Auswirkung auf das Ende der ersten Zeile, die Auswirkung auf die zweite Zeile möchtest Du gerne nicht haben.
Also ist die Frage "Warum das ganze?" durchaus legitim.
Deine Antworten auf die Frage verweisen auf das Bild welches aber gerade zeigt, daß die erste Zeile nicht beinflußt wird.



;)

Helf uns bitte, indem Du das Problem so darstellst, daß wir Dir helfen können.


Bis denn,
  Harm


chf

#6
Jetzt bin ich ratlos. Sehe ich anders als ihr?
Der Wechselschlüssel am Ende des ersten Systems war zu nahe an der Note. Den habe ich um ein Weniges nach außen gerückt. Dort soll er auch bleiben.
Im Ergebnis steht nun am Anfang des neuen Systems der Tenorschlüssel zu weit innen.

Lässt sich die Position des Schlüssels nach dem Umbruch unabhängig vom Wechselschlüssel korrigieren?


harm6

ZitatJetzt bin ich ratlos. Sehe ich anders als ihr?
Offensichtlich. Dein Beispiel-Code gibt exakt dasselbe Bild (für die erste Zeile), sowohl mit als auch ohne den override.

Zitat
Der Wechselschlüssel am Ende des ersten Systems war zu nahe an der Note. Den habe ich um ein Weniges nach außen gerückt.
Nicht in Deinem Beispiel-Code.

Möglicherweise zeigt Dein Beispiel-Code das Problem nicht!

Ich kann Dir natürlich zeigen, wie man den override am Zeilenanfang ausknipst.
Aber dann hat er keine Wirkung auf das Zeilenende und auch keine Wirkung auf den Zeilenanfang.

Also wozu?

Überprüfe Deinen Beispielcode (da ist sowieso ein Tippfehler, der die Kompilation erstmal verhindert) und modifizier ihn so daß das Problem dargestellt wird.


Gruß,
  Harm

chf

#8
Hallo Harm,

bitte schau in Deine privaten Mitteilungen.
Um zu zeigen, was ich sehe, hänge ich den Ausschnitt in "Lebensgröße an" - das übersteigt den Umfang der Dateianhänge hier.

Christa

harm6

#9
Hallo Christa,

dieser thread zeigt einmal mehr wie wichtig, sinvoll und vor allem unerläßlich minimal Examples sind.

Du solltest Dir wirklich der Mühe unterziehen Deinen Code so runterzubrechen, daß nichts außer dem Problem übrig bleibt. Im vorliegenden Fall wär Dir dann vielleicht aufgefallen, daß X-offset zu setzen nicht zum Ziel führt, weiter unten mehr dazu.
Außerdem, indem Du mir Deinen vollständigen Code privat zuschickst, beraubst Du Dich selbst der Hilfe aller anderen Mitglieder dieses Forums. Auch schätze ich es nicht besonders, daß Du damit mir die Arbeit erstmal ein minimal zu erstellen aufbürdest, zumal Dein Code in der privaten Nachricht auch nicht die richtigen tags an den nötigen Stellen hatte, das ist Dir durcheinander geraten, also mehr Arbeit für mich :(

Insoweit:
Punkt 1: ERSTELLE EIN MINIMAL
Punkt 2-47: siehe Punkt 1
Punkt 48: Bevor Du es hier postest, prüfe ob es wirklich compiliert (so hättest Du den Tippfehler im ersten post dieses threads vermeiden können)
Punkt 49: Schau Dir Deinen post an, bevor Du ihn veröffentlichst. D.h. click auf "Vorschau" und überprüfe alles. (so hättest Du den Formatierungsfehler in Deiner PM direkt bemerkt)



Wie dem auch sei, ich guck mir solch einen Code durchschnittlich einmal im Jahr an, alles andere ist eine Zumutung und Verschwendung meiner Zeit. Aber es ist ja bald Weihnachten.

Hier das minmal:

\version "2.19.49"

vcA = {
  \repeat unfold 40 f'8
  %\once \override Staff.Clef.X-offset = #1
  \clef tenor
  R1
}

mTwoA = {
  \repeat unfold 40 f'8
  \break
  %\once \override Staff.Clef.X-offset = #0.5
  \clef bass
  R1
}

<< 
  \new Staff \vcA 
  \new Staff \mTwoA
>>


Die X-offsets sind auskommentiert. (Ich hoffe Du hattest bemerkt, daß Du einen solchen Befehl in zwei Stimmen hattest)
Du kannst jetzt beide Befehle einkommentieren und mit den Werten rumspielen.
Achte zunächst nicht auf die neue Zeile sondern auf das Ende der Alten. Du wirst feststellen, daß die Clefs sich nur gegeneinander verschieben, bei verschiedenen Werten. Und bei gleichen Werten passiert gar nix.
In der neuen Zeile hast Du vorher wahrscheinlich nicht immer bemerkt (im PianoStaff), daß die X-offset-overrides auch dort eine Verschiebung bewirken, da eine Zeile per \RemovEmptyStaves gelöscht war. Auch deshalb ein minimal, die layout-Sachen hab ich rausgeschmissen.
Zusammengefaßt: X-offset kann hier nicht sinvoll eingesetzt werden.

Soweit hättest Du selbst kommen können, um dann zu fragen: Wenn nicht X-offset, wie sonst?
Das wäre dann eine Frage gewesen, die bestimmt das Interesse nicht nur von mir sondern auch von anderen geweckt hätte.

Zur Antwort:
Das zu setzende property ist 'extra-spacing-width auf Score-level.
Um es auf das Zeilenende zu begrenzen, muß man es abhängig machen von ly:item-break-dir
Damit es seine Wirkung auch auspielen kann, muß das Ganze 'before-line-breaking passieren.
Der einfacheren Handhabung wegen könnte es als music-function aufrufbar gemacht werden.

Hier die Lösung im minimal:


\version "2.19.49"


#(define (clef-extra-width-at-line-end number-pair)
  (lambda (grob)
    (if (> 0 (ly:item-break-dir grob))
        (ly:grob-set-property! grob 'extra-spacing-width number-pair))))

clefExtraWidthAtLineEnd =
#(define-music-function (pair)(number-pair?)
#{
  \once \override Score.Clef.before-line-breaking =
    #(clef-extra-width-at-line-end pair)
#})

vcA = {
  \repeat unfold 40 f'8
  \clef tenor
  R1
}

mTwoA = {
  \repeat unfold 40 f'8
  \break
  \clefExtraWidthAtLineEnd #'(-1 . 0)
  \clef bass
  R1
}

<< 
  \new Staff \vcA 
  \new Staff \mTwoA
>>vcA = {
  \repeat unfold 40 f'8
  \clef tenor
  R1
}

mTwoA = {
  \repeat unfold 40 f'8
  \break
  \clefExtraWidthAtLineEnd #'(-1 . 0)
  \clef bass
  R1
}

<< 
  \new Staff \vcA 
  \new Staff \mTwoA
>>


Funktioniert in Deinem originalen Code ebenfalls (hab' ich überprüft). Die Werte mußt Du Deinen Wünschen nach evtl noch anpassen.


Gruß,
  Harm


EDIT
Zitat
Um es auf das Zeilenende zu begrenzen, muß man es abhängig machen von ly:item-break-dir
Wahrscheinlich ist das noch nicht mal nötig, schadet aber auch nicht ...

Man könnte natürlich schauen ob ein Befehl wie
\once \override Score.Clef.extra-spacing-width = #'(-1 . 0)
bereits genügt, bin jetzt aber zu müde dazu ...



chf

#10
Hallo Harm,

zuerst danke für Deine Mühe mit mir und für die Lösung des Problems - auch dafür, dass Du es der Allgemeinheit wieder zugänglich gemacht hast.

Zu Punkt 1: Jetzt - endlich - habe ich wohl begriffen, was als Minimalbeispiel verstanden wird. Mit Abstraktionen habe ich ein Problem...
Mit dem konkreten Schnipsel hat's nicht funktioniert - ich wusste mir nicht anders zu helfen.


ZitatWenn nicht X-offset, wie sonst?
Das wäre dann eine Frage gewesen, die bestimmt das Interesse nicht nur von mir sondern auch von anderen geweckt hätte.

Dieser Gedanke war mein Anliegen - hätte ich ihn nur so klar formulieren können!
Im alten Forum stand der schöne Satz: Du weißt, was du machen willst, nur nicht wie?

Gruß
Christa

Danke auch für Deine Erläuterungen und Ermahnungen.