Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: martinmagtenor am Freitag, 30. Mai 2014, 19:10
-
Hallo,
gibt es eine Möglichkeit, eine einzelne Notenzeile (nicht die letzte), vom Ausgleich auszunehmen.
Hintergrund: zweiseitiger Chorsatz, erste Seite Refrain, zweite Strophe(n). Zeilen teilen sich gut auf. Ausnahme, als Schluss werden zwei abweichende Takte am Ende des Refrains gesungen, die sollen aber nicht über die ganze Seite gedehnt werden (sieht blöd aus, liest sich schlecht).
Irgendeine Idee?
Hier ein Beispiel
\version "2.16.2"
#(set-default-paper-size "a7" 'landscape)
\include "deutsch.ly"
\header {
tagline = ##f
}
global = { \key f \major }
bach = \relative c'' { b a c h }
\score {
\new Staff { \clef treble
\global
\bach \bach \break
\bach \bach \break
% die folgende Zeile soll nicht ausgeglichen werden.
\bach \pageBreak
\bach \bach \bach \bach
\bach \bach
}
}
\paper {
indent = 0\cm
ragged-bottom = ##t
}
Wie immer ist das Beispiel stark vereinfacht. Der Ernstfall mit mehreren Stimmen und Text ...
Grüße
Martin
-
Hallo,
die Funktionalität von ragged-right, ragged-last etc ist tief im C++ -Code weggeschlossen und via scheme nicht erreichbar, afaik.
Man bräuchte aber Zugang dazu, um eventuell ragged-right auf eine einzelne Zeile anwenden zu können.
Insoweit habe ich nur zwei workarounds:
1)
Du kannst das file auf zwei scores aufteilen und dann ragged-last im ersten setzen. Natürlich muß der Text dann auch aufgeteilt werden, sowie die currentBarNumber für den zweiten score gesetzt und sichtbar gemacht werden. etc
2)
Das folgende Coding drängt die items aus BreakAlignGroup nach links via 'spaceRight'
Allerdings hat man dann rechts davon leere Linien, die ich mit einem markup überlagere.
Ist allerdings alles manuelles Gefummel. Ich hab' das schon mal mit ein paar hundert Zeilen mehr Code versucht, nur um am Ende feststellen zu müssen, daß ich manuell einzugebende Zusätze doch nicht vermeiden konnte. :(
\version "2.19.6"
spaceRight =
#(define-music-function (parser location space)(number?)
(let* ((space-right `(extra-space . ,space)))
#{
%% Maybe additional layout-objects must be affected!?
\once \override Score.BarLine #'space-alist #'right-edge = #space-right
\once \override Score.KeySignature #'space-alist #'right-edge = #space-right
\once \override Score.KeyCancellation #'space-alist #'right-edge = #space-right
\once \override Score.TimeSignature #'space-alist #'right-edge = #space-right
#}))
#(set-default-paper-size "a7" 'landscape)
\include "deutsch.ly"
\header {
tagline = ##f
}
global = { \key f \major }
bach = \relative c'' { b a c h }
\score {
<<
\new Staff \new Voice = "BACH"
{ \clef treble
\global
\bach \bach \break
\bach \bach \break
% die folgende Zeile soll nicht ausgeglichen werden.
\bach \pageBreak
\spaceRight #24.6
\once \override Score.RehearsalMark.break-visibility = ##(#t #f #f)
\mark
\markup
\with-dimensions #'(0 . 0) #'(0 . 0)
\with-color #white
\filled-box #(cons 0.098 26) #(cons -6 0) #0
\bach \bach \bach \bach
\bach \bach
}
\new Lyrics \lyricsto "BACH" { \repeat unfold 11 { B -- a -- c -- h } }
>>
}
\paper {
indent = 0\cm
ragged-bottom = ##t
}
HTH a bit,
Harm
-
Hallo Harm,
vielen Dank, YIH ;). In diesem Fall läuft das dann wohl auf Aufteilen raus, das ist akzeptabel.
die Funktionalität von ragged-right, ragged-last etc ist tief im C++ -Code weggeschlossen und via scheme nicht erreichbar, afaik.
Man bräuchte aber Zugang dazu, um eventuell ragged-right auf eine einzelne Zeile anwenden zu können.
[...]
Das klingt plausibel. Vor dem C++-Code an sich ist mir nicht bange, aber das Wechselspiel zwischen den Scheme-Anteilen und dem C++-Kern erschließt sich mir noch nicht.
Grüße
Martin
-
Das klingt plausibel. Vor dem C++-Code an sich ist mir nicht bange, aber das Wechselspiel zwischen den Scheme-Anteilen und dem C++-Kern erschließt sich mir noch nicht.
Ich kann C++ nicht, insoweit vermag ich da nichts zu tun.
Aber bei jeder Änderung im C++ Teil muß man LilyPond neu kompilieren, insoweit hilft es ja nicht Deine lokale LilyPond-Installation zu patchen, denn dann kann niemand anderes Deinen Code kompilieren.
Falls Du aber eine Lösung für dieses Problem findest, dann reich doch offiziell einen patch ein.
Oder wie Graham Percival sagte: "Patches are welcome" :D
Gruß,
Harm
-
Hallo in die Runde,
ich hatte neulich ein Problem (https://liarchiv.joonet.de/index.php?topic=1722.msg9534#msg9534) bei dem die Lösung vielleicht auch hier helfen könnte.
Im folgenden Workaround wird der Stencil des Taktstrichs am Zeilenende mit einem leeren Markup kombiniert.
\version "2.19.5"
#(set-default-paper-size "a7" 'landscape)
\include "deutsch.ly"
\header {
tagline = ##f
}
global = { \key f \major }
bach = \relative c'' { b a c h }
spaceRight =
#(define-music-function (parser location int) (number?)
#{
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(let ((stil (ly:bar-line::print grob))
(break-dir (ly:item-break-dir grob)))
(if (= -1 break-dir)
(ly:stencil-combine-at-edge
stil
X RIGHT
(grob-interpret-markup grob #{
\markup {
\with-dimensions #`(0 . ,int) #'(-2.2 . 2.2)
\with-color #white
\filled-box #(cons 0 (+ 1 int)) #(cons -2.2 2.2) #0
}
#})
0)
stil)))
#})
\score {
\new Staff { \clef treble
\global
\bach \bach \break
\bach \bach \break
% die folgende Zeile soll nicht ausgeglichen werden.
\bach
\spaceRight #24.5
\pageBreak
\bach \bach \bach \bach
\bach \bach
}
}
\paper {
indent = 0\cm
ragged-bottom = ##t
}
Gruß,
infranator
-
Danke Infranator,
das ist ja eine interessante Variante, die, b.t.w., auch mit Version 2.16.2 funktioniert.
Der Vorteil gegenüber dem Aufteilen in zwei Scores ist folgender:
Das Aufsplitten in ein weiteres Score erzeugt die gewünschte "letzte" Zeile, die dann aber "so kurz wie möglich" gesetzt wird. Diese Nebenwirkung kann unerwünscht sein. Gegebenenfalls muss man dann noch mit \newSpacingSection und base-shortest-duration ein paar Iterationen machen, bis in etwa die gewünschte Dehnung erreicht ist.
Hallo in die Runde,
ich hatte neulich ein Problem (https://liarchiv.joonet.de/index.php?topic=1722.msg9534#msg9534) bei dem die Lösung vielleicht auch hier helfen könnte.
Im folgenden Workaround wird der Stencil des Taktstrichs am Zeilenende mit einem leeren Markup kombiniert.
Deine Lösung hat zwar auch einen freien Parameter, der ist aber frei wählbar und ganz gut abschätzbar.
Wie sich das in mehrstimmigem Satz nutzen lässt, habe ich (noch) nicht ausprobiert, aber den Vorschlag werde ich mir merken.
Grüße
Martin