Liedtext innerhalb eines Vocal-Systems nach unten verschieben_GELÖST

Begonnen von Adventus Domini, Freitag, 20. Juli 2018, 08:42

« vorheriges - nächstes »

Adventus Domini

Einen schönen guten Morgen wünsche ich!

Dank Eurer Hilfe konnte ich mein Projekt fast abschließen.

Nun habe ich folgendes Problem. Um die Lesbarkeit des Liedtextes zu verbessern, sollte der Liedtext ein paar Milimeter nach unten verschoben werden.

Vielleicht könnt Ihr an Hand meines Beispiels ein paar Tipps geben?


\version "2.18.2"

\header {
  title = "Titel"
  composer = "Komponist"
  arranger = "Arrangeur"
  poet = "Dichter"
}

global = {
  \key a \major
  \numericTimeSignature
  \time 3/4
  \tempo 4=60
}

scoreAViolinI = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreAViolinII = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreASopranoVoice = \relative c' {
  \global
  \dynamicUp
  % Die Noten folgen hier.
  r4 r8 a cis d
}

scoreAVerse = \lyricmode {
  % Liedtext folgt hier.
   The time -- less
}

scoreARight = \relative c' {
  \global
  % Die Noten folgen hier.
  <a' e'>4 ~ <a e'>8 d16 cis b8 a
}

scoreALeft = \relative c {
  \global
  % Die Noten folgen hier.
  e8 [ a ] <b e>4 cis
}

scoreAViolinIPart = \new Staff \with {
  instrumentName = "Violins I"
  midiInstrument = "violin"
} \scoreAViolinI

scoreAViolinIIPart = \new Staff \with {
  instrumentName = "Violins II"
  midiInstrument = "violin"
} \scoreAViolinII

scoreASopranoVoicePart = \new Staff \with {
  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = 15
  instrumentName = "Soprano"
  midiInstrument = "choir aahs"
} { \scoreASopranoVoice }
\addlyrics { \scoreAVerse }

scoreAPianoPart = \new PianoStaff \with {
  instrumentName = "Piano"
} <<
  \new Staff = "right" \with {
    midiInstrument = "acoustic grand"
  } \scoreARight
  \new Staff = "left" \with {
    midiInstrument = "acoustic grand"
  } { \clef bass \scoreALeft }
>>

\score {
  <<
    \scoreAViolinIPart
    \scoreAViolinIIPart
    \scoreASopranoVoicePart
    \scoreAPianoPart
  >>
  \layout { }
  %\midi { }
}


Auch möchte ich gerne die Anzahl der Takte auf eine bestimmte Taktzahl pro Zeile beschränken. Vielleicht gibt es dafür ebenfalls Codes.

Vielen Dank im Voraus und viele Grüße an einem heißen Tag (jetzt bereits um 08:35 gefühlte >25 °C) aus dem Schwarzwald.

Adventus Domini

Malte

Zitat von: Adventus Domini am Freitag, 20. Juli 2018, 08:42
Nun habe ich folgendes Problem. Um die Lesbarkeit des Liedtextes zu verbessern, sollte der Liedtext ein paar Milimeter nach unten verschoben werden.
Ich muß zugeben, ich bin gerade etwas überfragt. Schau mal in Abschnitt 4.4.1 der Notationsreferenz, ob du da was findest. Evtl. etwas mit nonstaff-relatedstaff-spacing?
Zitat
Auch möchte ich gerne die Anzahl der Takte auf eine bestimmte Taktzahl pro Zeile beschränken. Vielleicht gibt es dafür ebenfalls Codes.
Dafür gibt es verschiedene Möglichkeiten. Es kommt darauf an, was genau du erreichen willst:
• gleiche Anzahl Takte in jeder Zeile?
• Zeilenumbrüche an bestimmten Stellen?
• einfach überall etwas mehr Platz?
Für letzteres könntest du LilyPond anweisen, mehr Seiten (oder mehr Zeilen) für die Partitur zu verwenden. Das hat den Vorteil, daß LilyPond sich dann weiterhin selbst um die genauen Umbruchstellen kümmern kann.

Adventus Domini

Hallo Malte!

Danke für Deine schnelle Reaktion.

Zitat
Ich muß zugeben, ich bin gerade etwas überfragt. Schau mal in Abschnitt 4.4.1 der Notationsreferenz, ob du da was findest. Evtl. etwas mit nonstaff-relatedstaff-spacing?

Deinen Rat werde ich berherzigen. Wahrscheinlich erst nach dem Wochenende. Wenn ich etwas erreichen sollte, dann melde ich mich wieder.

Zitat
Dafür gibt es verschiedene Möglichkeiten. Es kommt darauf an, was genau du erreichen willst:
• gleiche Anzahl Takte in jeder Zeile?
• Zeilenumbrüche an bestimmten Stellen?
• einfach überall etwas mehr Platz?
Für letzteres könntest du LilyPond anweisen, mehr Seiten (oder mehr Zeilen) für die Partitur zu verwenden. Das hat den Vorteil, daß LilyPond sich dann weiterhin selbst um die genauen Umbruchstellen kümmern kann.

Mein Gedanke war, dass ich eine maximale Anzahl an Takten pro Zeile definiere. Weniger Takte sollten erlaubt sein. In meinem Projekt gibt es viele Binde- und Phrasierungsbögen und es sieht immer ein bißchen unglücklich aus, wenn diese über den Zeilenumbruch gehen. Leider sind diese Bögen nicht im einem bestimmten Taktverhältnis verteilt, sodass eine vorgegebene gleiche Taktanzahl/Zeile nicht über das gesamt Stück funktioniert.
Falls alle Stricke reißen sollten muss ich es vielleicht manuell mit dem \break Befehl einrichten. Scheue mich aber etwas davor.

Ich wünsche ein schönes Wochenende.

Viele Grüße

Adventus Domini

P.S.
Es ist immer noch sehr heiß.   

ingmar

Versuch mal zuerst, die Zahl der Zeilen insgesamt pro Stück zu beschränken.

Dazu musst du nur in dem \layout-Block, den du ja schon innerhalb des Scores angelegt hast, den system-count festlegen:

     \layout { system-count = 12 }

Probier halt ein bisschen mit der Zahl herum. Meist ist es, wie Malte schon schrieb, besser, LilyPond selber die finale Aufteilung zu überlassen.


Viel Erfolg,
--ingmar

Adventus Domini

#4
Guten Morgen!

Zuerst möchte ich mich bei Euch für die Hinweise bedanken.

Am gestrigen ersten Tag dieser neuen Woche habe ich mir die Zeit genommen und verschiedene Ansätze ausprobiert, um den Liedtext etwas nach unten zu verschieben.

1. Ansatz - Verwendung der Funktion "nonstaff-related-spacing"
Ergebnis: Unter Verwendung dieser Funktion ist der Text nach oben! gerutscht. War nicht das gewünschte Resultat. Habe versucht die Parameter zu variieren - ohne Änderung des Effekts.

2. Ansatz - Verwendung der Funktion "nonstaff-unrelated-spacing"
Ergebnis: gleicher Effekt wie unter Ansatz 1.

3. Ansatz - Verwendung der Funktion "extra-offset"
Ergebnis: kein Effekt - evtl. habe ich diese Funktion auch falsch zugeordnet.

4. Ansatz - Erneutes Studium der Handbücher (hauptsächlich in der Notationsreferenz Kapitel 4.4)
Dabei bin ich auf die Funktion "Staff-Affinity" gestossen.

Um die richtige Syntax für diese Funktion zu verwenden habe ich nach Beispielen bei den Snippets gesucht und dann für die Layout-Umgebung folgenden Code gefunden:


\context {
\Lyrics
\override VerticalAxisGroup.staff-affinity = ##f
\override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2)
(padding . 2))
}
\context {
\Staff
\override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2)
(padding . 2))
}


Da in diesem Beispiel die Texte größere Abstände hatten, habe ich den Code in meine Partitur kopiert und ausprobiert - danach waren die Systeme höher und ich hatte fast doppelt soviele Seiten - aber der Liedtext war nach unten verschoben! Sofort an den Parametern gespielt und letzendlich für mein Projekt folgendes Ergebnis erzielt.


\version "2.18.2"

\header {
  title = "Titel"
  composer = "Komponist"
  arranger = "Arrangeur"
  poet = "Dichter"
}

global = {
  \key a \major
  \numericTimeSignature
  \time 3/4
  \tempo 4=60
}

scoreAViolinI = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreAViolinII = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreASopranoVoice = \relative c' {
  \global
  \dynamicUp
  % Die Noten folgen hier.
  r4 r8 a cis d
}

scoreAVerse = \lyricmode {
  % Liedtext folgt hier.
   The time -- less
}

scoreARight = \relative c' {
  \global
  % Die Noten folgen hier.
  <a' e'>4 ~ <a e'>8 d16 cis b8 a
}

scoreALeft = \relative c {
  \global
  % Die Noten folgen hier.
  e8 [ a ] <b e>4 cis
}

scoreAViolinIPart = \new Staff \with {
  instrumentName = "Violins I"
  midiInstrument = "violin"
} \scoreAViolinI

scoreAViolinIIPart = \new Staff \with {
  instrumentName = "Violins II"
  midiInstrument = "violin"
} \scoreAViolinII

scoreASopranoVoicePart = \new Staff \with {
  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = 15
  instrumentName = "Soprano"
  midiInstrument = "choir aahs"
} { \scoreASopranoVoice }
\addlyrics { \scoreAVerse }

scoreAPianoPart = \new PianoStaff \with {
  instrumentName = "Piano"
} <<
  \new Staff = "right" \with {
    midiInstrument = "acoustic grand"
  } \scoreARight
  \new Staff = "left" \with {
    midiInstrument = "acoustic grand"
  } { \clef bass \scoreALeft }
>>

\score {
  <<
    \scoreAViolinIPart
    \scoreAViolinIIPart
    \scoreASopranoVoicePart
    \scoreAPianoPart
  >>
  \layout {
      \context {
         \Lyrics
         \override VerticalAxisGroup.staff-affinity = ##f
         \override VerticalAxisGroup.staff-staff-spacing =
         #'((basic-distance . 0)
         (minimum-distance . 1)
         (padding . 1))
    }
      \context {
         \Staff
         \override VerticalAxisGroup.staff-staff-spacing =
         #'((basic-distance . 0)
         (minimum-distance . 1)
         (padding . 1))
      }
  }
  %\midi { }
}


Und hier nochmal zum Vergleich das Ergbnis mit deaktiviertem Layout-Code.


\version "2.18.2"

\header {
  title = "Titel"
  composer = "Komponist"
  arranger = "Arrangeur"
  poet = "Dichter"
}

global = {
  \key a \major
  \numericTimeSignature
  \time 3/4
  \tempo 4=60
}

scoreAViolinI = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreAViolinII = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreASopranoVoice = \relative c' {
  \global
  \dynamicUp
  % Die Noten folgen hier.
  r4 r8 a cis d
}

scoreAVerse = \lyricmode {
  % Liedtext folgt hier.
   The time -- less
}

scoreARight = \relative c' {
  \global
  % Die Noten folgen hier.
  <a' e'>4 ~ <a e'>8 d16 cis b8 a
}

scoreALeft = \relative c {
  \global
  % Die Noten folgen hier.
  e8 [ a ] <b e>4 cis
}

scoreAViolinIPart = \new Staff \with {
  instrumentName = "Violins I"
  midiInstrument = "violin"
} \scoreAViolinI

scoreAViolinIIPart = \new Staff \with {
  instrumentName = "Violins II"
  midiInstrument = "violin"
} \scoreAViolinII

scoreASopranoVoicePart = \new Staff \with {
  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = 15
  instrumentName = "Soprano"
  midiInstrument = "choir aahs"
} { \scoreASopranoVoice }
\addlyrics { \scoreAVerse }

scoreAPianoPart = \new PianoStaff \with {
  instrumentName = "Piano"
} <<
  \new Staff = "right" \with {
    midiInstrument = "acoustic grand"
  } \scoreARight
  \new Staff = "left" \with {
    midiInstrument = "acoustic grand"
  } { \clef bass \scoreALeft }
>>

\score {
  <<
    \scoreAViolinIPart
    \scoreAViolinIIPart
    \scoreASopranoVoicePart
    \scoreAPianoPart
  >>
  \layout {
%{      \context {
         \Lyrics
         \override VerticalAxisGroup.staff-affinity = ##f
         \override VerticalAxisGroup.staff-staff-spacing =
         #'((basic-distance . 0)
         (minimum-distance . 1)
         (padding . 1))
    }
      \context {
         \Staff
         \override VerticalAxisGroup.staff-staff-spacing =
         #'((basic-distance . 0)
         (minimum-distance . 1)
         (padding . 1))
      }
%}
  }
  %\midi { }
}


Bzgl. des Zeilenumbruchs habe ich mich dazu durchgerungen gezielt einige \breaks zu setzen. Es waren weniger nötig als ich dachte.

@ingmar
Zitat
Dazu musst du nur in dem \layout-Block, den du ja schon innerhalb des Scores angelegt hast, den system-count festlegen:

     \layout { system-count = 12 }

Versuche ich mal bei Gelegenheit.

Viele Grüße aus dem Schwarzwald und viele kreative Ideen

Adventus Domini

harm6

Zitat
1. Ansatz - Verwendung der Funktion "nonstaff-related-spacing"
Ergebnis: Unter Verwendung dieser Funktion ist der Text nach oben! gerutscht. War nicht das gewünschte Resultat. Habe versucht die Parameter zu variieren - ohne Änderung des Effekts.

Vom Prinzip ist das der richtige Ansatz. Wenn er nicht funktioniert, dann ist in der Anwendung etwas falsch.
In solchem Fall poste bitte Deinen Versuch, sodaß wir helfen können.

Zitat2. Ansatz - Verwendung der Funktion "nonstaff-unrelated-spacing"
Ergebnis: gleicher Effekt wie unter Ansatz 1.

Wenn die Lyrics sich dadurch tatsächlich verschieben, so nur als Nebenwirkung. Im Prinzip ist dieses property (es ist keine Funktion) nicht zielführend.

Zitat
3. Ansatz - Verwendung der Funktion "extra-offset"
Ergebnis: kein Effekt - evtl. habe ich diese Funktion auch falsch zugeordnet.
Ebenfalls nicht zielführend, ganz gerell solltest Du 'extra-offset als last resort betrachten oder es verwenden, wenn Du Kollisionen haben willst.
Wenn es aber völlig ohne Effekt bleibt, dann ist es falsch angewendet. In diesem Fall poste den Code, s.o.

Zitat
4. Ansatz - Erneutes Studium der Handbücher (hauptsächlich in der Notationsreferenz Kapitel 4.4)
Dabei bin ich auf die Funktion "Staff-Affinity" gestossen.

Das property (s.o.) staff-affinity kann benutzt werden um nonstaffs für die spacing-engine als staffs erscheinen zu lassen.
Das ist in der Tat manchmal hilfreich, kann aber auch Nachteile mitbringen...
Eigentlich ist es hier gar nicht nötig, s.u.


Ich sehe noch ein anderes Problem: Deine Verwendung von \addlyrics.
addlyrics ist ein short-cut. Wie jeder short-cut verkürzt es die Schreibarbeit und etabliert dabei aber gewisse defaults, die in 2.18.2 allerdings nur über den Umweg via \layout modifizierbar sind. In neueren devel-Versionen geht auch \addlyrics \with { ... } (oder war das nur in 2.21? Bin mir gerade nicht sicher)

Ich mißtraue short-cuts dieser Art, sobald versucht wird sie auf komplexere Situationen anzuwenden. Ich habe schon zu oft erlebt das irgenwas krachen geht oder zumindest nicht einstellbar ist.

Besser die ausführliche Variante, i.e.:
<<
  \new Staff \new Voice = "nam" { ... }
  \new Lyrics \lyricsto "nam" \lyricmode { ... }
>>
Da kann man dann auch in 2.18.2. problemlos einen \with-Block an den Lyrics-context schreiben.

Führt zu:

\version "2.18.2"

\header {
  title = "Titel"
  composer = "Komponist"
  arranger = "Arrangeur"
  poet = "Dichter"
}

global = {
  \key a \major
  \numericTimeSignature
  \time 3/4
  \tempo 4=60
}

scoreAViolinI = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreAViolinII = \relative c'' {
  \global
  % Die Noten folgen hier.
  R2.
}

scoreASopranoVoice = \relative c' {
  \global
  \dynamicUp
  % Die Noten folgen hier.
  r4 r8 a cis d
}

scoreAVerse = \lyricmode {
  % Liedtext folgt hier.
   The time -- less
}

scoreARight = \relative c' {
  \global
  % Die Noten folgen hier.
  <a' e'>4 ~ <a e'>8 d16 cis b8 a
}

scoreALeft = \relative c {
  \global
  % Die Noten folgen hier.
  e8 [ a ] <b e>4 cis
}

scoreAViolinIPart = \new Staff \with {
  instrumentName = "Violins I"
  midiInstrument = "violin"
} \scoreAViolinI

scoreAViolinIIPart = \new Staff \with {
  instrumentName = "Violins II"
  midiInstrument = "violin"
} \scoreAViolinII

scoreASopranoVoicePart =
<<
  \new Staff \with {
      \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = 15
      instrumentName = "Soprano"
      midiInstrument = "choir aahs"
    }
    \new Voice = "sop" \scoreASopranoVoice
  \new Lyrics \with {
      \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.basic-distance = 8
    }
    \lyricsto "sop" { \scoreAVerse }
>>

scoreAPianoPart = \new PianoStaff \with {
  instrumentName = "Piano"
} <<
  \new Staff = "right" \with {
    midiInstrument = "acoustic grand"
  } \scoreARight
  \new Staff = "left" \with {
    midiInstrument = "acoustic grand"
  } { \clef bass \scoreALeft }
>>

\score {
  <<
    \scoreAViolinIPart
    \scoreAViolinIIPart
    \scoreASopranoVoicePart
    \scoreAPianoPart
  >>
  \layout { }
  %\midi { }
}


Cheers,
  Harm



Adventus Domini

Hallo harm6!

Vielen Dank für Deine ausführliche Ausarbeitung.

Dein Ansatz scheint mir logischer zu sein und vor allem sehr elegant.

Danke nochmals und viele Grüße

Adventus Domini

Adventus Domini

Hallo Zusammen!

@harm6
@ingmar

Ich habe Eure Tipps in meine Partitur integriert und alles hat wunderbar geklappt. Es war nur noch an einer Stelle ein \break notwendig. Eher aus optischen Gründen.

Der ausführliche Code bzgl. der Lyrics-Umgebung werde ich für weitere Projekte verwenden. Beim Erstellen meines Projektes habe ich mich wohl zu sehr auf den Partitur-Assistent von Frescobaldi (Version 2.20.0) verlassen. Hatte bisher immer funktioniert.

Viele Grüße bis zum nächsten Projekt.

Adventus Domini

Neue Projekte = neue Herausforderungen