Text und Akkorde (ohne Noten)

Begonnen von Bastiane, Montag, 11. März 2019, 12:35

« vorheriges - nächstes »

Bastiane

Hallo nochmal!
Das nächste Lied ist fast fertig... Ein paar kleine Problemchen gibt's noch, aber da kümmere ich mich später drum. Jetzt habe ich nochmal das Problem mit dem Abstand zwischen den Strophen. Ich finde, hier ist in der Mitte viel zu viel Platz. Ich weiß nicht, ob es gut aussieht, aber vielleicht könnte man den Abstand in der Mitte festlegen, dass er dann bei jedem Lied gleich ist, und das Ganze dann zentrieren? Oder dass alles immer links an einer bestimmten Stelle anfängt und ich den mittleren Abstand jeweils einzeln eingeben kann?

Ginge das beides? Dann könnte ich mir beides mal anschauen und entscheiden, was besser ist.

Hier mein Code (habe glaube ich - abgesehen von den Strophentexten - nichts verändert):
%2. Strophe
Verszwei =
  \lyricmode {
    when8 the8 bro8 -- ken8 hear8 -- ted8 peo8 -- ple8 \break
    li8 -- ving8 in8 the8 world8 agree,4. \break
    there8 will8 be8 an8 answer,4. \break
    let16 it16 be2. \break
     8 But8 though8 they8 may8 be8 parted,4 \break
    there8 is8 still8 a8 chance8 \break
    that8 they8 may16 see.4 \break
     16 There8 will8 be8 an8 answer,4 \break
    let8 it8 be.1 \break
    \set stanza = #"Ref2: " \break
    Let4 it4 be,4 let8 it8 be,4 let8. it16 be,4 let8 it8 be,2 \break
    there8 will8 be8 an8 answer,4 let8 it8 be.4
  }

%3. Strophe
Versdrei =
  \lyricmode {
    when8 the8 night8 is8 cloudy,4 \break
    there8 is8 still8 a8 light8 \break
    that8 shines8 on16 me16 \break
     4 shine8 on8 till8 to8 -- morrow,4 \break
     8 let16 it16 be.2. \break
     8 I8 wake8 up8 to8 the8 sound8 of8 mu8 -- sic,8 \break
    Mother4 Mary4 comes8 to16 me,16 \break
     4 speaking4 words8 of8 wisdom,4 \break
    let16 it16 be.2. \break
    \markup { \bold Ref2 } \break
    \markup { \bold Ref1 } \break
  }

%Erklärung?
\score {
  <<
    \new ChordNames { \chrdsIntro \chrds \chrdsRef \chrdsCoda }
    \new Staff \new Voice=melody { \melodieIntro \melodie \melodieRef \melodieOutro }
    \new Lyrics \lyricsto melody { \Intro \Verseins \VerseinsRef \Outro }
  >>
}

%Erklärung?
generalLayout =
  \layout {
    indent = 0
    ragged-right = ##t
    \context {
      \Score
      \override SpacingSpanner.spacing-increment = 0
      \omit BarNumber
    }
    \context {
      \Lyrics
      \override VerticalAxisGroup.staff-affinity = -1
      \override LyricText.self-alignment-X = #-1
    }
  }

%Erklärung?
stropheIIChordsScore = 
  \markuplist
    \score-lines {
      <<
      \new ChordNames { \chrds \chrdsRefII }
      \new Lyrics \Verszwei
      >>
      \layout {
        \generalLayout
        \context {
          \Lyrics
          instrumentName = \markup \fontsize #-1 \bold "2."
        }
      }
    }

%Erklärung?
stropheIIIChordsScore = 
  \markuplist
    \score-lines {
      <<
      \new ChordNames \chrds
      \new Lyrics \Versdrei
      >>
      \layout {
        \generalLayout
        \context {
          \Lyrics
          instrumentName = \markup \fontsize #-1 \bold "3."
        }
      }
    }

%Erklärung?
\markup
  \override #'(baseline-skip . 6) %% adjust to taste
  \fill-line {
    \column \stropheIIChordsScore
    \column \stropheIIIChordsScore
  }
 
%Entfernen der Taktzahlen
  \layout {
  \context {
    \Score
    \omit BarNumber
    % or:
    %\remove "Bar_number_engraver"
  }
}



Viele Grüße
Bastiane

FionaFelamìn

#31
Hallo,

und entschuldigung, wenn ich das Fass jetzt so spät nochmal aufmache, aber da ich mir so ähnliche Fragen auch schon gestellt habe, und bei meinen vorläufigen Antworten mehr so in die \devnull-Richtung gedacht hatte, könnt ihr mir vielleicht - solange ihr gerade im Thema drin seid - sagen, was dagegen sprach. Dann wüsste ich, ob es sich rentiert, mit meiner Version weiterzuprobieren.

-------------
(Ich sage mal, welche Vor- und Nachteile ich sehe:

Nachteile:
Ich hab das mit dem Spacing noch nicht richtig hingekriegt, die Akkordsymbole dürften gern wesentlich näher am Text stehen, sonst ist die Seite schnell voll.
(edit: hab damit noch mal rumgespielt, neue Version im Code, finde es aber immer noch geräumig)

Vorteile:
Man muss beim Eingeben weniger denken und weniger tippen.
Man kann sich später relativ leicht überlegen, welche Strophen ganz unten haben will, und welche als lyrics unter dem Lied - in Chorzusammenhängen ist das manchmal sehr praktisch (sagen wird Strophen im Wechsel mit der Gemeinde, und nächstes Jahr andere Strophen im Wechsel mit der Gemeinde).

Hier ein kurzes Lied:
\version "2.18.2"

\paper   {
  system-system-spacing #'basic-distance = #16
  markup-system-spacing #'basic-distance = #17
}

\header {
  title = "Mors lilla Olle"
  composer = "schwedisches Volkslied"
}

generalLayout =
  \layout {
    indent = 0
    ragged-right = ##t
    line-width = 99\mm
    \context {
      \Score
      \override SpacingSpanner.spacing-increment = 0
      \omit BarNumber
    }
    \context {
      \Lyrics
      \override VerticalAxisGroup.staff-affinity = -1
      \override LyricText.self-alignment-X = #-1
    }
  }

global = {
  \key g \major
  \time 4/4
}

chordNames = \chordmode {
  \global
  % Akkorde folgen hier.
  g1 | d:7 | g | d |
  g | d:7 |s1 | g |

}

melody = \relative c'' {
  \global
  % Die Noten folgen hier.
  g4 d8 d g4 d8d |fis4 e d r |
  d g8 a b4 b8 e| d4 a8 a  a4 r |
  b b8b b4 a8b | c4 c8b a4 r|
  fis4 fis8 g a4 a8b |g4 g8 d g4 r \bar "|."


}

verseOne = \lyricmode {
  \set stanza = "1."
  % Liedtext folgt hier.
  Mors lil -- la Ol -- le i sko -- gen gick,
ro -- sor på kind -- en och  sol -- sken i blick!
Läp -- par -- na små u -- tav bär ä -- ro  blå,
'Ba -- ra jag slapp att så en -- sam här gå!'
   
}

verseTwo = \lyricmode {
  \set stanza = "2."
  % Liedtext folgt hier.
  Brum -- me -- li -- brumm, vem \skip4  luf -- sar där? %\break
Bus -- kar -- na  kna -- kar, en hund visst det är. %\break
Lur -- vig är päl -- sen. Men Ol -- le blir glad: %\break
'Å, en kam -- rat, det var bra, se god -- dag!' %\break

}

verseThree = \lyricmode {
  \set stanza = "3."
  % Liedtext folgt hier.
  Klap -- par sa björ -- nen med hän -- der små, \break
rä -- cker fram kor -- gen: 'Se där, sma -- ka på!' \break
Nal -- le, han slu -- kar mest allt vad där är: \break
'Hör du, jag tror, att du ty -- cker om bär!' \break

}

verseFour = \lyricmode {
  \set stanza = "4."
  % Liedtext folgt hier.
  Mor fick nu se dem, \skip4 gav "till ett" skri. \break
Björ -- nen sprang bort, nu är le -- ken för -- bi. \break
'Å, var -- för skräm -- de de un -- dan min vän? \break
Mor lil -- la, bed ho -- nom kom -- ma i -- gen!' \break


}

\score {
  <<
    \new ChordNames \chordNames
    \new Staff { \melody }
    \addlyrics { \verseOne }
    \addlyrics { \verseTwo }
    %\addlyrics { \verseThree }
    %\addlyrics { \verseFour }
  >>
  \layout { }
  \midi {
    \tempo 4=100
  }
}

\markup
\column {
\fill-line {
  \vspace #4

  \score {
  <<
    \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics  \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseTwo
  >>
  \layout {
    \generalLayout
   
  }}

\hspace #1
\score {
  <<
    \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics 
    \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseThree
  >>
  \layout {
    \context {
      \Score
      \omit BarNumber
    }
    indent = 0
    line-width = 99\mm
    ragged-right = ##t
    }
}
\hspace #4
}
\vspace #4
\fill-line {
  \score {
   
  <<
   % \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics  \lyricsto "Melodie"  \verseFour
    >>
   \layout {
    \generalLayout
   
  }}


}}


1001 Dank im Voraus!
Fiona

harm6

Zitat von: BastianeJetzt habe ich nochmal das Problem mit dem Abstand zwischen den Strophen. Ich finde, hier ist in der Mitte viel zu viel Platz. Ich weiß nicht, ob es gut aussieht, aber vielleicht könnte man den Abstand in der Mitte festlegen, dass er dann bei jedem Lied gleich ist, und das Ganze dann zentrieren? Oder dass alles immer links an einer bestimmten Stelle anfängt und ich den mittleren Abstand jeweils einzeln eingeben kann?

Warum nicht stattdessen den Abstand links und rechts festlegen?


myText = "Lorem ipsum dolor sit amet, consectetur adipisicing
  elit, sed do eiusmod tempor incididunt ut labore et dolore magna
  aliqua.  Ut enim ad minim veniam, quis nostrud exercitation ullamco
  laboris nisi ut aliquip ex ea commodo consequat."


#(define-markup-command (foo layout props margins args)(number? markup-list?)
  (let ((line-width (ly:output-def-lookup layout 'line-width)))
    (interpret-markup
      layout
      props
      #{
      \markup
        \fill-line {
          \override #`(line-width . ,(- line-width (* 2 margins)))
          \fill-line { $args }
        }
      #})))
     
   
\markup \foo #10 {
  \override #'(line-width . 40) \wordwrap-string #myText
  \override #'(line-width . 40) \wordwrap-string #myText
}


"foo" solltest Du wohl passender benennen ;)

Gruß,
  Harm

harm6

Zitat von: FionaFelamìn
da ich mir so ähnliche Fragen auch schon gestellt habe, und bei meinen vorläufigen Antworten mehr so in die \devnull-Richtung gedacht hatte, könnt ihr mir vielleicht - solange ihr gerade im Thema drin seid - sagen, was dagegen sprach. Dann wüsste ich, ob es sich rentiert, mit meiner Version weiterzuprobieren.

Ich sehe momentan nichts was prinzipiell gegen den Devnull-Ansatz spricht.
Allerdings verwendest Du \score im markup und nicht \score-lines, und hast deshalb mehr Probleme mit den vertikalen Abständen.
Natürlich ergeben sich in Folge noch ein paar Anpassungen.

Hier Dein revidiertes Beispiel.
In einer Strophe habe ich zur Demonstartion den Abstand stark erhöht.
Die lästige Warnung
warning: staff-affinities should only decrease
ist bereingt.


\version "2.18.2"

\paper   {
  system-system-spacing.basic-distance = #16
  markup-system-spacing.basic-distance = #17
}

\header {
  title = "Mors lilla Olle"
  composer = "schwedisches Volkslied"
}

generalLayout =
  \layout {
    indent = 0
    ragged-right = ##t
    line-width = 99\mm
    \context {
      \Score
      \override SpacingSpanner.spacing-increment = 0
      \omit BarNumber
    }
    \context {
      \Lyrics
      \override VerticalAxisGroup.staff-affinity = -1
      \override LyricText.self-alignment-X = #-1
    }
  }

global = {
  \key g \major
  \time 4/4
}

chordNames = \chordmode {
  \global
  % Akkorde folgen hier.
  g1 | d:7 | g | d |
  g | d:7 |s1 | g |

}

melody = \relative c'' {
  \global
  % Die Noten folgen hier.
  g4 d8 d g4 d8d |fis4 e d r |
  d g8 a b4 b8 e| d4 a8 a  a4 r |
  b b8b b4 a8b | c4 c8b a4 r|
  fis4 fis8 g a4 a8b |g4 g8 d g4 r \bar "|."


}

verseOne = \lyricmode {
  \set stanza = "1."
  % Liedtext folgt hier.
  Mors lil -- la Ol -- le i sko -- gen gick,
ro -- sor på kind -- en och  sol -- sken i blick!
Läp -- par -- na små u -- tav bär ä -- ro  blå,
'Ba -- ra jag slapp att så en -- sam här gå!'
   
}

verseTwo = \lyricmode {
  \set stanza = "2."
  % Liedtext folgt hier.
  Brum -- me -- li -- brumm, vem \skip4  luf -- sar där? %\break
Bus -- kar -- na  kna -- kar, en hund visst det är. %\break
Lur -- vig är päl -- sen. Men Ol -- le blir glad: %\break
'Å, en kam -- rat, det var bra, se god -- dag!' %\break

}

verseThree = \lyricmode {
  \set stanza = "3."
  % Liedtext folgt hier.
  Klap -- par sa björ -- nen med hän -- der små, \break
rä -- cker fram kor -- gen: 'Se där, sma -- ka på!' \break
Nal -- le, han slu -- kar mest allt vad där är: \break
'Hör du, jag tror, att du ty -- cker om bär!' \break

}

verseFour = \lyricmode {
  \set stanza = "4."
  % Liedtext folgt hier.
  Mor fick nu se dem, \skip4 gav "till ett" skri. \break
Björ -- nen sprang bort, nu är le -- ken för -- bi. \break
'Å, var -- för skräm -- de de un -- dan min vän? \break
Mor lil -- la, bed ho -- nom kom -- ma i -- gen!' \break


}
%%{
\score {
  <<
    \new ChordNames \chordNames
    \new Staff { \melody }
    \addlyrics { \verseOne }
    \addlyrics { \verseTwo }
    %\addlyrics { \verseThree }
    %\addlyrics { \verseFour }
  >>
  \layout { }
  \midi {
    \tempo 4=100
  }
}


\markup
\column {
\fill-line {
  \vspace #4
  \column
  \score-lines {
  <<
    \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics  \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseTwo
  >>
  \layout {
    \generalLayout
   
  }}

\hspace #1
\override #'(baseline-skip . 10)
\column
\score-lines {
  <<
    \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics
    \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseThree
  >>
  \layout {
    \context {
      \Score
      \omit BarNumber
    }
    \context {
      \Lyrics
      \override VerticalAxisGroup.staff-affinity = -1
      \override LyricText.self-alignment-X = #-1
    }
   
    indent = 0
    line-width = 99\mm
    ragged-right = ##t
    }
}
\hspace #4
}
\vspace #4
\fill-line {
\column {
  \score-lines {
   
  <<
   % \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics  \lyricsto "Melodie"  \verseFour
    >>
   \layout {
    \generalLayout
   
  }}


}}
}


Gruß,
  Harm

FionaFelamìn

#34
Hallo und danke für die Arbeit!

Der Trick mit dem "baseline-skip" hat mich sehr beglückt.
Den Trick mit "score-lines" kann ich einandermal probieren zu verstehen, da weigert sich mein Frescobaldi, das auszuführen.

harm6

ZitatDen Trick mit "score-lines" kann ich einandermal probieren zu verstehen, da weigert sich mein Frescobaldi, das auszuführen.

Nun - \score-lines gibt es in 2.18.2 wohl noch nicht ...

Ich würde ja auf die neueste devel-Version upgraden, d.h.momentan 2.19.83.
Die ist sowieso ein prerelease für 2.20.

Gruß,
  Harm

FionaFelamìn

Tja,

können vor Lachen, das mit dem Upgrade. Grad hab ich es auf Anhieb erstmal nicht hingekriegt, aber das lässt sich mit ein wenig Nachdenken sicher hinkriegen.

Grad versuch ich nochmal, die Sache mit dem Geskippe in Bastianes Beispiel "Country Roads" nachzuvollziehen. Und da scheint mir, dass leider bei der "Devnull"-Variante die Binde- und Haltebögen nicht gelesen werden, wie diese Testseite andeutet:


\version "2.18.2"

\paper   {
  system-system-spacing #'basic-distance = #16
  markup-system-spacing #'basic-distance = #14
}


\header {
  title = "Take me Home, Country Roads"
}

generalLayout =
  \layout {
    indent = 0
    ragged-right = ##t
    \context {
      \Score
      \omit BarNumber
    }
  }

global = {
  \key g \major
  \time 4/4
}

chordNames = \chordmode {
  \global
  % Akkorde folgen hier.
  g1 s e:m s |
    d s c g
}

melody = \relative c' {
  \global
  % Die Noten folgen hier.
  r2 d4 d e4. d8 ~d4 r4 | r2 e4 d8 e8 ~ e4 g2.
  r2 a4 a b8 (a) a4  r2  | e4 e e d e( g) g2 |
}

melodyOhneBoegen = \relative c' {
  \global
  % Die Noten folgen hier.
  r2 d4 d e4. d4. r4 | r2 e4 d4 e4 g2.
  r2 a4 a b8 a a4  r2  | e4 e e d e( g) g2 |
}

verseOne = \lyricmode {
  \set stanza = "1."
  % Liedtext folgt hier.
   Al -- most hea -- ven, West Vir -- gin -- ia,
  Blue Ridge Moun -- tains, Shen -- an -- do -- ah Ri -- ver
}

verseTwo = \lyricmode {
  \set stanza = "2."
  % Liedtext folgt hier.
  All my mem' -- ries,  ga -- ther' round her.
Mi -- ner's La -- dy,  stran -- ger to blue wa -- ter
 
 
}

verseThree = \lyricmode {
  \set stanza = "3."
  % Liedtext folgt hier.
    All my mem' -- ries, \skip4  ga -- ther' round \skip4 her.
   Mi -- ner's La -- \skip8 dy, stran -- ger to blue wa -- ter
 
}

verseFour = \lyricmode {
  \set stanza = "4."
  % Liedtext folgt hier.
    Al -- most hea -- ven, West Vir -- gin -- ia,
  Blue Ridge Moun -- \skip8  tains, Shen -- an -- do -- ah Ri -- ver
 
}


\score {
  <<
    \new ChordNames \chordNames
    \new Staff { \melody }
    \addlyrics { \verseOne }
    \addlyrics { \verseTwo }
    %\addlyrics { \verseThree }
    %\addlyrics { \verseFour }
  >>
  \layout { }
  \midi {
    \tempo 4=100
  }
}

\markup
\column {
\vspace #3
\bold "OHNE EXTRA \SKIPS"
\vspace #0.5
{
  \fill-line{
  \hspace #0.5
  \override #'(baseline-skip . 1)
  \score {   
  <<
  \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics  \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseTwo
    >>
   \layout {
    \generalLayout
   }
}
\hspace #0.5
}}
}

\markup
\column {
\vspace #3
\bold "EIN \SKIP PRO BOGEN"
\vspace #0.5
{
  \fill-line{
  \hspace #0.5
  \override #'(baseline-skip . 1)
  \score {   
  <<
  \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melody}
    \new Lyrics  \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseThree
    >>
   \layout {
    \generalLayout
   }
}
\hspace #0.5
}}
\vspace #3

}

\score {
  <<
    \new ChordNames \chordNames
    \new Staff { \melodyOhneBoegen }
    %\addlyrics { \verseOne }
    %\addlyrics { \verseTwo }
    %\addlyrics { \verseThree }
    \addlyrics { \verseFour }
  >>
  \layout { }
  \midi {
    \tempo 4=100
  }
}

\markup
\column {
\vspace #3
\bold "EH KEINE VERWIRRENDEN BÖGEN"
\vspace #0.5
{
  \fill-line{
  \hspace #0.5
  \override #'(baseline-skip . 1)
  \score {   
  <<
  \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull  = "Melodie" {\melodyOhneBoegen}
    \new Lyrics  \with {
    \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
      #'((basic-distance . 1))
  }
    \lyricsto "Melodie"  \verseFour
    >>
   \layout {
    \generalLayout
   }
}
\hspace #0.5
}}
}


Gibt es da einen Trick? Denn das wäre ja sonst ein Schönheitsfehler im Hinblick auf "gleichermaßen zwischen den Noten und untendrunten verwenden".

harm6

Bitte versuch Deine Code-Beispiele mehr Richtung minimal zu gestalten.
Ich hab' nur beschränkt Zeit, die ich nicht ins wichtig/unwichtig-Sortieren stecken möchte.
Geht wahrscheinlich nicht nur mir so ;)

Zum Thema:
Devnull scheint Ties und Slurs nicht so wie gewünscht zu beachten, dafür ist er ja eugentlich auch nicht gedacht.
Ich habe mal folgendes probiert:


\version "2.19.82"

mel = { c'1 d'1~ d' e'( f') g' }
lyr = \lyricmode { foo bar buzz nuh }

<<
  \new Devnull \with {\accepts "NullVoice" }
    \new NullVoice = "mel" \mel
  \new Lyrics \lyricsto "mel" \lyr
>>

Scheint zu funktionieren braucht aber braucht 2.19., 2.18.2 endet mit einem segfault.

Insoweit:
Zitatkönnen vor Lachen, das mit dem Upgrade. Grad hab ich es auf Anhieb erstmal nicht hingekriegt, aber das lässt sich mit ein wenig Nachdenken sicher hinkriegen.
Was genau ist das Problem und mit welchem Betriebssystem?

Zitatdas wäre ja sonst ein Schönheitsfehler im Hinblick auf "gleichermaßen zwischen den Noten und untendrunten verwenden".
Ich hatte mir eingebildet mein Code hier würde das schon gewährleisten, habe ich was übersehen?
Das heißt aber nicht, daß der Devnull-Ansatz nicht Vorteile hat, vielleicht sogar überlegen ist.


Gruß,
  Harm




Bastiane

Hallo Harm!
Vielen Dank für deine Antwort. Leider verstehe ich noch sehr wenig von diesem, deinem Code. Ich habe ein bisschen gegoogelt, bin aber nicht wirklich schlau geworden. Könntest du vielleicht einige Zeilen kommentieren?

myText = "Lorem ipsum dolor sit amet, consectetur adipisicing
  elit, sed do eiusmod tempor incididunt ut labore et dolore magna
  aliqua.  Ut enim ad minim veniam, quis nostrud exercitation ullamco
  laboris nisi ut aliquip ex ea commodo consequat."


%Hier wird der Befehl(?) "foo" definiert
#(define-markup-command (foo layout props margins args)(number? markup-list?)
  (let ((line-width (ly:output-def-lookup layout 'line-width)))
    (interpret-markup
      layout
      props
      #{
      \markup
        \fill-line {
          \override #`(line-width . ,(- line-width (* 2 margins)))
          \fill-line { $args }
        }
      #})))
     
%Hier wird der Befehl "foo" angewendet, aber was macht der eigentlich???
\markup \foo #10 {
  \override #'(line-width . 50) \wordwrap-string #myText %Textbreite linke Spalte
  \override #'(line-width . 30) \wordwrap-string #myText %Textbreite rechte Spalte
}


Ich würde gerne verstehen, was hier passiert, um das Ganze selbstständig anpassen zu können und nicht jedes Mal nachfragen zu müssen.

Ist es denn auch wirklich nötig, einen Befehl zu definieren (sofern ich das überhaupt richtig verstanden habe)? Meine Lieder schreibe ich jedes einzeln in eine neue Datei. Kann man da die Ränder nicht einfacher einzeln einstellen?

Viele Grüße
Bastiane

FionaFelamìn

Hallo Harm,

und nochmal danke. Fürs Update (Ubuntu) hat tatsächlich Nachdenken geholfen, und Rebooten und was man so macht.

In der Tat, mit der NullVoice funktionieren die Bögen, dafür sind im Text dann gele - gentliche Bin - destriche, wie in Lyrics auch. Ich wäre nun schon sehr beglückt, und würde das so nehmen, wie es ist.

Ich zeig trotzdem mal, was ich meine, falls jemand auch dazu noch eine einfache Lösung einfällt:

\version "2.19.83"



chordNames = \chordmode {
  g1 s e:m s |
    d s c g
}

melody = \relative c' {
  % Die Noten folgen hier.
  r2 d4 d e4. d8 ~d4 r4 | r2 e4 d8 e8 ~ e4 g2.
  r2 a4 a b8 (a) a4  r2  | e4 e e d e( g) g2 |
}

verseTwo = \lyricmode {
  \set stanza = "2."
  All my mem' -- ries,  ga -- ther' round her.
Mi -- ner's La -- dy,  stran -- ger to blue wa -- ter   
}



  <<
  \new ChordNames \chordNames
    % \new Staff  \new Voice = "Melodie" {\Melody}
    \new Devnull \with {\accepts "NullVoice" }
    \new NullVoice = "Melodie" {\melody}
    \new Lyrics 
    \lyricsto "Melodie"  \verseTwo
    >>
   




harm6

Nimm doch den Code meines `generalLayout´ (früher in diesem thread, auch bereits verlinkt ...), da ist alles drin.
Kuriert auch
warning: staff-affinities should only decrease

-Harm

harm6

Zitat von: Bastiane am Freitag, 29. März 2019, 11:42
Leider verstehe ich noch sehr wenig von diesem, deinem Code. Ich habe ein bisschen gegoogelt, bin aber nicht wirklich schlau geworden. Könntest du vielleicht einige Zeilen kommentieren?

[...]

Ich würde gerne verstehen, was hier passiert, um das Ganze selbstständig anpassen zu können und nicht jedes Mal nachfragen zu müssen.

Ist es denn auch wirklich nötig, einen Befehl zu definieren (sofern ich das überhaupt richtig verstanden habe)? Meine Lieder schreibe ich jedes einzeln in eine neue Datei. Kann man da die Ränder nicht einfacher einzeln einstellen?

Ich definiere `foo´ als ein markup-command. Wenn Du da tiefer einsteigen willst so lies den Kommentar oben im file define-markup-commands.scm als ersten Schritt.
Dauert schon ein bißchen bevor man sich gut zurecht findet. Das Extending Manual gibts ja auch.

Im speziellen:
`foo´ liest die line-width aus dem layout.
Von diesem Wert wird das doppelte der Variablen `margins´ subtrahiert. Dieser Wert wird genommen, um die line-width eines inneren fill-line-markups zu bestimmen, welches die Argumente, die durch die markup-list `args´ übergeben werden, auf dieser line-width verteilt.
Ein äußeres fill-line-markup zentriert das innere dann auf der default-line-width.

Im Endeffekt bestimmt `margins´ also einen linken bzw rechten Rand zusätzlich zu den gegebenen paper-margins.
Insoweit ist der Vergleich mit right/left-margin unzutreffend.

Geht alles auch manuell. Aber Papier und Bleistift geht auch ...
Doch wir verwenden Computer, wir könnten sie dann ja auch benutzen, insbesondere wenn wir ein anpassbares Program wie LilyPond verwenden.

Gruß,
  Harm


Bastiane

Hallo Harm!
Leider bin ich da immer noch nicht ganz durchgestiegen... Im Moment versuche ich, mehr als zwei Strophen unter den Text zu bekommen. Wie muss ich das denn machen? Folgendes Lied hat 8 Strophen, und am besten sollten immer zwei nebeneinander (also 4. und 5. unter die 2. und 3. usw.) und die letzte dann in die Mitte. Geht das irgendwie?

\version "2.19.82"

%Akkorde
chrds = \chordmode {
\skip 8 a2.:m c d f a:m c e e:7 a:m c d f a:m e:7 a:m e:7
}


%2. Strophe
Verszwei =
  \lyricmode {
    My8 mother2. she's4. \skip 4 a8 tailor.2. \skip 2 \skip 8 \break
    She8 sews2 those4 new2 blue4 jeans.2. \skip 2 \skip 8 \break
    My8 father2. was2 a4 gambling2. man2. \break
    down4. in4. New2 Or4 -- leauns.2. \skip 2 \skip 8
  }

%3. Strophe
Versdrei =
  \lyricmode {
    My8 | best4. friend4. | is4. \skip 4 a8 | gambler.2. \skip 2 \skip 8 \break
    He8 goes2 from4 town2 to4 town.2. \skip 2 \skip 8 \break
    The8 only2. | time2 he4 | is4 satis2 -- fied2 is4 \break
    when4 he2 drinks4 his4 liquor4 down.
  }

%4. Strophe
Versvier =
  \lyricmode {
    My best freind is a gambler. \break
    He goes from town to town. \break
    The only time he is satisfied \break
    is when he drinks his liquor down.
  }
 
  %5. Strophe
Versfünf =
  \lyricmode {
    My best freind is a gambler. \break
    He goes from town to town. \break
    The only time he is satisfied \break
    is when he drinks his liquor down.
  }
 
  %6. Strophe
Verssechs =
  \lyricmode {
    My best freind is a gambler. \break
    He goes from town to town. \break
    The only time he is satisfied \break
    is when he drinks his liquor down.
  }
  %7. Strophe
Verssieben =
  \lyricmode {
    My best freind is a gambler. \break
    He goes from town to town. \break
    The only time he is satisfied \break
    is when he drinks his liquor down.
  }
  %8. Strophe
Versacht =
  \lyricmode {
    My best freind is a gambler. \break
    He goes from town to town. \break
    The only time he is satisfied \break
    is when he drinks his liquor down.
  }

%Erklärung?
generalLayout =
  \layout {
    indent = 0
    ragged-right = ##t
    \context {
      \Score
      \override SpacingSpanner.spacing-increment = 0
      \omit BarNumber
    }
    \context {
      \Lyrics
      \override VerticalAxisGroup.staff-affinity = -1
      \override LyricText.self-alignment-X = #-1
    }
  }

%Erklärung?
stropheIIChordsScore = 
  \markuplist
    \score-lines {
      <<
      \new ChordNames \chrds
      \new Lyrics \Verszwei
      >>
      \layout {
        \generalLayout
        \context {
          \Lyrics
          instrumentName = \markup \fontsize #-1 \bold "2."
        }
      }
    }

%Erklärung?
stropheIIIChordsScore = 
  \markuplist
    \score-lines {
      <<
      \new ChordNames \chrds
      \new Lyrics \Versdrei
      >>
      \layout {
        \generalLayout
        \context {
          \Lyrics
          instrumentName = \markup \fontsize #-1 \bold "3."
        }
      }
    }

%Erklärung?
\markup
  \override #'(baseline-skip . 6) %% adjust to taste
  \fill-line {
    \column \stropheIIChordsScore
    \column \stropheIIIChordsScore
  }
 
%Entfernen der Taktzahlen
  \layout {
  \context {
    \Score
    \omit BarNumber
    % or:
    %\remove "Bar_number_engraver"
  }
}



Viele Grüße
Bastiane

FionaFelamìn

Hallo,

in deinem Abschnitt:

%Erklärung?
\markup
  \override #'(baseline-skip . 6) %% adjust to taste
  \fill-line {
    \column \stropheIIChordsScore
    \column \stropheIIIChordsScore
  }

werden die Strophen sortiert. Da müsstest du deine vordefinierten Strophen in die bereits angelegten Spalten (\column) reinstellen. Ca nach diesem Muster:




\markup {

\center-column { %damit die letzte Strophe unten in der Mitte steht,
%wenn das dein Layout schreddet, dann musst du noch mal anders gucken

\fill-line {
  \column {
  "strophe 2"
  "strophe 4"
  "strophe 6" }
   \column {
  "strophe 3"
  "strophe 5"
  "strophe 7"}     
  }
  "strophe 8"}
}

harm6

Hallo Fiona,

Dein Code ist korrekt, allerdings berücksichtigst Du nicht mein foo-markup (weiter unten umbenannt in `pad-fill-line´). Auch mag es gewünscht sein bei vielen Strophen einen Seitenumbruch zu ermöglichen.

Hier mein Vorschlag (einschließlich weiterer Veränderungen):


\version "2.19.82"

chrds =
  \chordmode {
    s2 c1  s  f  c  s  a:m  g  s  c s  f  c  a:m  g  c  s
  }

Verszwei =
  \lyricmode {
    foo4 foo4  foo2 foo4 foo -- bar,2 \break
    foo4 foo4  foo2 -- bar4 foo4 -- bar,2 \break
    foo4 foo4  foo4 foo2 -- bar4  foo4 -- bar2 -- buzz4 foo,1. \break
    foo4 foo4  foo2 -- bar4 foo4 foo2 \break
    foo4 -- bar  foo2 foo4 foo4 -- bar2 \break
    foo4 foo4  foo-2 foo4 -- bar foo2 -- bar4 foo4 foo.1.
  }

Versdrei =
  \lyricmode {
    foo4 foo4  foo2 -- bar4 foo4 -- bar,2 \break
    foo4 foo4  foo,2 foo'4 foo4  foo,2 \break
    foo4 foo4  foo4 -- bar2 foo4 -- bar4 foo2 foo4 foo.1. \break
    foo4 foo4  foo2 foo,4 foo4  foo,2 \break
    foo4 foo4  foo2 -- bar4 foo4  foo,2 \break
    foo4 foo4  foo'2 foo4 -- bar foo2 -- bar4 foo4  foo.1.
  }

generalLayout =
  \layout {
    indent = 0
    ragged-right = ##t
    \context {
      \Score
      %% Ensure tight spacing
      \override SpacingSpanner.spacing-increment = 0
      \omit BarNumber
    }
    \context {
      \Lyrics
      %% Adjust staff-affinity
      \override VerticalAxisGroup.staff-affinity = -1
      %% Align LyricText at left edge
      \override LyricText.self-alignment-X = #-1
    }
  }

   
vers =
#(define-scheme-function (stanza chrds vers)(markup? ly:music? ly:music?)
"Returns a markuplist containing a score built from @var{chrds} and @var{vers}.
This score is done via @code{score-lines} to get a list of lines each with
a part of the text and the corresponding chords.
The stanza-number is supplied by @var{stanza}.
"
;; Because this is later used with \column and \pad-fill-line, the
;; advantages of using markuplist here are mostly denied.
;; Though in spite of further changes/development we stay with it.
#{
  \markuplist
    \score-lines {
      <<
      \new ChordNames $chrds
      \new Lyrics $vers
      >>
      \layout {
        \generalLayout
        \context {
          \Lyrics
          instrumentName = \markup \fontsize #-1 \bold $stanza
        }
      }
    }
#})

#(define-markup-command
  (pad-fill-line layout props margins args)(number? markup-list?)
  #:category align
  #:properties ((line-width #f))
"Put @var{args} in a horizontal line. This line starts at @var{margin} at the
left side and is shortened by @var{margin} at right side, compared with the
given @code[line-width}, falling back to the default line-width, if not
specified.
@lilypond[verbatim,quote]
\\markup
  \\column
    \\box {
      \\pad-fill-line #10 { left right }
    }
@end lilypond"
  (let ((line-width (or line-width (ly:output-def-lookup layout 'line-width))))
    (interpret-markup
      layout
      props
      #{
      \markup
        \fill-line {
          \override #`(line-width . ,(- line-width (* 2 margins)))
          \fill-line { $args }
        }
      #})))
     
   
%% Use markuplist (together with override-lines and column-lines) to get the
%% possibility of page-breaks
\markuplist
  %% adjust baseline-skip between columns
  \override-lines #'(baseline-skip . 10)
  \column-lines
    %% adjust baseline-skip for each column
    \override #'(baseline-skip . 5)
    {
      %% `pad-fill-line´ and `column´ are not markup-list-commands.
      %% Thus page-breaks are possible only between verses.
      \pad-fill-line #10 {
        \column \vers "2." \chrds \Verszwei
        \column \vers "3." \chrds \Versdrei
      }
      \pad-fill-line #10 {
        \column \vers "2." \chrds \Verszwei
        \column \vers "3." \chrds \Versdrei
      }
      \pad-fill-line #10 {
        \column \vers "2." \chrds \Verszwei
        \column \vers "3." \chrds \Versdrei
      }
      \pad-fill-line #10 {
        \column \vers "2." \chrds \Verszwei
        \column \vers "3." \chrds \Versdrei
      }
      \pad-fill-line #10 {
        \column \vers "2." \chrds \Verszwei
        \column \vers "3." \chrds \Versdrei
      }
      \pad-fill-line #10 {
        \column \vers "2." \chrds \Verszwei
      }
    }


HTH,
  Harm