Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: donblech am Dienstag, 7. September 2010, 01:12

Titel: 1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: donblech am Dienstag, 7. September 2010, 01:12
Hallo allerseits,

im Moment beschäftigen mich folgende 3 Dinge:

1. Die 2-taktige letzte Zeile eines Stückes habe ich mit dem \ragged-last Befehl verkürzt, wobei sie jetzt etwas zu gequetscht aussieht und ich sie gerne wieder etwas verlängern würde. Ist das möglich??

2. Kann man die Länge (nicht den Winkel) eines \bendAfter verändern, und wenn ja, wie?

3. Kann ich mitten im Stück die Grösse eines Systems verändern?

Im Handbuch habe ich dazu leider nix gefunden.

Einen schönen Gruss an alle,

Stefan
Titel: Re:1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: RobUr am Dienstag, 7. September 2010, 02:19
Hallo Stefan!

Zitat
1. Die 2-taktige letzte Zeile eines Stückes habe ich mit dem \ragged-last Befehl verkürzt, wobei sie jetzt etwas zu gequetscht aussieht und ich sie gerne wieder etwas verlängern würde. Ist das möglich??
Für meinen Geschmack sieht ragged-last = ##t ohnehin schlimm aus. Für die Entwickler sicher auch, da der default-Wert ##f ist. Dass Lily aus Versehen gerade mal 2 Takte auf die letzte Zeile setzt, ist natürlich nicht besonders schön, weshalb ich versuchen würde, ein/zwei Takte davor per manuellem \break in diese Zeile zusätzlich zu befördern. Das muss man ausprobieren. Jedenfalls ist die Länge der „ausgefransten“ letzten Zeile nicht beeinflussbar, sondern richtet sich nach dem, was dort notiert ist: If set to true, the last system in the score will not fill the line width. Instead the last system ends at its natural horizontal length.

Zitat
2. Kann man die Länge (nicht den Winkel) eines \bendAfter verändern, und wenn ja, wie?
Welche Mittel fehlen dir? NR 1.3.2 Falls and doits (http://lilypond.org/doc/v2.12/Documentation/user/lilypond/Curves#Falls-and-doits)
\bendAfter #±Y bestimmt den Höhenverlauf; [\once] \override Score.SpacingSpanner #'shortest-duration-space = #X legt die horizontale Länge des Spanner-Objekts fest.

Zitat
3. Kann ich mitten im Stück die Grösse eines Systems verändern?
Welche Größe genau? Zeilenhöhe, Zeilenabstand, Systemhöhe, Notengröße?

Grüße, Robert
Titel: Re:1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: donblech am Mittwoch, 8. September 2010, 01:30
Hallo nochmal,

1.
die kurze letzte Zeile hat Lily nicht aus Versehen gemacht, das war Absicht von mir. Manchmal braucht man so was ja, zum Beispiel bei einer Coda.

2.
folgender Befehl ist bei mir (Version 2.12.3) wirkungslos:
\override Score.SpacingSpanner #'shortest-duration-space = #4.0
Warum ist mir ein Rätsel ???
Wenn ich vor dem \bendAfter ein Minus-Zeichen eingebe, wie im Handbuch gefordert, kriege ich eine Fehlermeldung.

3.
Mein Problem ist folgendes:
in einem Bigband-Arrangement sind manche Systeme zu gross für die Seite, z.Bsp.  aufgrund der Tonhöhen einzelner Instrumente. Meine eigentliche Frage ist nun kann man für eine Seite die einzelnen Systeme verkleinern, so dass alles passt, und auf der nächsten Seite auch wieder vergrössern?

Vielen Dank schon mal für Eure Geduld,

Stefan

Titel: Re:1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: RobUr am Mittwoch, 8. September 2010, 03:42
Hallo Stefan!

Zitat
1.
die kurze letzte Zeile hat Lily nicht aus Versehen gemacht, das war Absicht von mir. Manchmal braucht man so was ja, zum Beispiel bei einer Coda.
Dann versuch’s mal nach dem manuellen \break (i.V.m. ragged-last = ##t natürlich) mit \set Score.proportionalNotationDuration = #(ly:make-moment 1 8) (kleinerer Bruch, also größerer Nenner bewirkt mehr Dehnung).

Zitat
2.
folgender Befehl ist bei mir (Version 2.12.3) wirkungslos:
\override Score.SpacingSpanner #'shortest-duration-space = #4.0
Warum ist mir ein Rätsel ???
Probier mal, den SpacingSpanner-Overrides ein \newSpacingSection voranzustellen, dadurch werden die Spacing Spanner zurückgesetzt und können neu überschrieben werden.

Zitat
Wenn ich vor dem \bendAfter ein Minus-Zeichen eingebe, wie im Handbuch gefordert, kriege ich eine Fehlermeldung.
Normalen Bindestrich statt Minuszeichen verwendet? Wie lautet die Fehlermeldung?

Zitat
3.
Mein Problem ist folgendes:
in einem Bigband-Arrangement sind manche Systeme zu gross für die Seite, z.Bsp.  aufgrund der Tonhöhen einzelner Instrumente. Meine eigentliche Frage ist nun kann man für eine Seite die einzelnen Systeme verkleinern, so dass alles passt, und auf der nächsten Seite auch wieder vergrössern?
Ja, das geht. Man benötigt dazu mehrere Tweaks gleichzeitig. Zum Verkleinern:
\set fontSize = #-3
\override Staff.StaffSymbol #'staff-space = #(magstep -3)
Zum Zurücksetzen:
\unset fontSize
\revert Staff.StaffSymbol #'staff-space
Die Abstände zwischen den Zeilen und Systemen müssen zusätzlich mit der VerticalAxisGroup überschrieben werden.

Poste doch am besten ein Minimalbeispiel zum besseren Verständnis.

Grüße, Robert
Titel: Re:1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: donblech am Mittwoch, 8. September 2010, 13:25
Hallo Robert,

1. Hat super funktioniert, vielen Dank.

2. Auch mit \newSpacingSection klappts immer noch nicht. Das Minus-Zeichen wird allerdings akzeptiert. Kurzes Beispiel habe ich gepostet.

3. Der Befehl verkleinert zwar die Noten, nicht aber die einzelnen Notenzeilen. Kurzes Beispiel ist ebenso gepostet.

Schönen Gruss und vielen Dank,

Stefan
Titel: Re:1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: fugenkomponist am Freitag, 10. September 2010, 16:24
\new Staff {
    \relative c'' {
        c c c c \break
        << R1 \\ { \new Staff \with {
            fontSize = #-3
            \override StaffSymbol #'staff-space = #(magstep -3)
            \remove "Time_signature_engraver" }
        { c4 c c c } } >>
    }
}
\layout { \context { \RemoveEmptyStaffContext } }

Das könnte es bringen...
Übrigens: Um das Klavier zu benennen, kannst du PianoStaff.instrumentName statt Staff.instrumentName schreiben.
Titel: Re:1. länge der Zeile, 2. Länge des bendAfter, 3. Grösse der Systeme
Beitrag von: RobUr am Freitag, 10. September 2010, 23:34
Hallo Stefan!

Zitat
2. Auch mit \newSpacingSection klappts immer noch nicht.
Aber so klappt’s (hab mich bemüht, es so komfortabel wie möglich zu halten):
\version "2.12.3"

%% horizontal ausdehnen: \bendLonger #X
bendLonger = #(define-music-function (parser location space) (number?)
#{
\newSpacingSection
\override Score.SpacingSpanner #'shortest-duration-space = #$space
#})

%% Ausdehnung zurücksetzen: \bendNormal
bendNormal = {
\newSpacingSection
\revert Score.SpacingSpanner #'shortest-duration-space
}

violin = \relative c'' {
c4 d e f |
\bendLonger #4.0
g2-\bendAfter #-4
\bendNormal
r | g4 f e d | c2 r |
\break
c4 d e f | \bendAfter #-4 g2 r | g4 f e d | c2 r |
\bar "|."
}

\score {
\new Staff \violin
\layout { }
}
\newSpacingSection wirkt immer sofort und für alles folgende. Deshalb muss das Spanner-Objekt gleich nach \bendAfter wieder zurückgesetzt werden.

Zitat
3. Der Befehl verkleinert zwar die Noten, nicht aber die einzelnen Notenzeilen.
Stimmt. Man würde \stop[\start]Staff benötigen, was wieder andere Probleme mit sich bringt. Aber eine praktikable Lösung habe ich nach einigem Experimentieren gefunden: je Instrument eine normal große und eine verkleinerte Zeile anlegen und den Notentext per \change Staff umleiten. Zusätzlich werden aber noch folgende Zutaten benötigt: Unterdrücken der leeren Systemzeilen mittels \RemoveEmptyStaffContext und \override VerticalAxisGroup #'remove-first = ##t sowie die Hilfsmittel \show[\hide]MMR aus diesem Thread (https://liarchiv.joonet.de/index.php?topic=610.0). Klingt erstmal viel, ist dann aber ganz easy zu handhaben:
1. Eine normale und eine kleine Zeile für das Instrument anlegen, wobei die kleine Zeile komplett mit Spacern gefüllt sein muss. Takt- und Tonart nicht vergessen.
%% normal große Zeile für AltSax1
\context Staff = "Alto-Sax 1" <<
\context Voice = "Alto-Sax 1" \AltXBA
>>

%% verkleinerte Zeile für AltSax1
\context Staff = "Alto-Sax 1 small" \with {
fontSize = #-3
\override StaffSymbol #'staff-space = #(magstep -3)
\override StaffSymbol #'thickness = #(magstep -3)
} <<
\context Voice = "Alto-Sax 1 small" {
\key bes \major
\time 4/4
s1*30
}
>>
2. Im Verlaufe des Stückes kann nun per \change Staff = "Alto-Sax 1 small" in die kleinere Zeile und per \change Staff = "Alto-Sax 1" wieder zurückgesprungen werden.
3. Definition der keepAliveInterfaces nicht vergessen:
%% Makros, um \RemoveEmptyStaffContext temporär zu umgehen
showMMR = \set Staff.keepAliveInterfaces = #'( multi-measure-rest-interface )
hideMMR = \unset Staff.keepAliveInterfaces
und bei Bedarf \showMMR in den gewünschten Stimmen verwenden, um leere Zeilen bzw. Zeilen mit ausschließlich Ganztaktpausen auch mal anzeigen zu lassen.
4. Einen Schönheitsfehler (Bug???) korrigieren: die automatische Verbalkung vor einem Zeilenumbruch funktioniert nicht. Abhilfe schafft manuelle Verbalkung: a8[ c]

Noch einige Hinweise:
Dein Editor (NoteEdit war’s doch?) stopft beharrlich die alte Syntax \set Staff.instrument in das Dokument, weswegen wir erstmal von einer Unmenge an Warnungen überflutet werden :( Das könntest du beim nächsten Mal vielleicht vorher selbst schon bereinigen ;)
Für Klaviersysteme gibt es PianoStaff und PianoStaff.instrumentName (die Instrumentenbezeichnung ist dann vertikal zentriert).
Für die Rhythmusgruppe würde ich ChoirStaff verwenden, um dort nicht auch noch durchgezogene Taktstriche zu haben.

Viele Grüße, Robert