Autor Thema: RehearsalMark mit Zahl und Text - Ausrichtung  (Gelesen 1737 mal)

Thomas

  • Member
RehearsalMark mit Zahl und Text - Ausrichtung
« am: Donnerstag, 13. Oktober 2016, 21:29 »
Hallo,

wenn ich eine RehearsalMark mit zusätzlichem Text haben möchte, kann ich die nicht so genau ausrichten.

\version "2.18.2"

\markup{ \wordwrap { Der Default sieht ganz gut aus, ausser dass die '1' etwas weit links und deshalb wegen des Notenschlüssels etwas oben steht. } }

\relative c' {
  \set Score.markFormatter =  #format-mark-circle-numbers

  \mark \default
  c4 d e f
  g2 g
  a4 a a a
  g1
  \mark \default
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

\markup{ \wordwrap { Das gleiche Ergebnis bekommt auch manuell. } }

\relative c' {
  \mark \markup{ \circle \bold 1 }
  c4 d e f
  g2 g
  a4 a a a
  g1
  \mark \markup{ \circle \bold 2 }
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

\markup{ \wordwrap { Wenn jetzt noch Text dazukommt, weis man nicht mehr wo die Marke dazugehört. } }

\relative c' {
  \mark \markup{ \circle \bold 1 "Alle meine Entchen" }
  c4 d e f
  g2 g
  a4 a a a
  g1
  \mark \markup{ \circle \bold 2 "Hänschen klein" }
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

\markup{ \wordwrap { Also wird das ganze linksbündig gemacht. Jetzt ist der Kreis aber nicht mehr genau über dem Taktstrich. } }

\relative c' {
  \override Score.RehearsalMark #'self-alignment-X = #LEFT
  \mark \markup{ \circle \bold 1 "Alle meine Entchen" }
  c4 d e f
  g2 g
  a4 a a a
  g1
  \mark \markup{ \circle \bold 2 "Hänschen klein" }
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

\markup{ \wordwrap { Also wird die Marke noch mal ein bisschen verschoben. Jetzt passt es bei der '2', aber die '1 ist ganz an den vorderen Rand verschoben. } }

\relative c' {
  \override Score.RehearsalMark #'self-alignment-X = #LEFT
  \override Score.RehearsalMark #'X-offset = -1

  \mark \markup{ \circle \bold 1 "Alle meine Entchen" }
  c4 d e f
  g2 g
  a4 a a a
  g1
  \mark \markup{ \circle \bold 2 "Hänschen klein" }
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

\markup{ \wordwrap { Am liebsten wäre es mir, wenn nur die Marken, die nicht am Zeilenanfang stehen, verschoben sind. Nur woher soll ich wissen welche Marke am Zeilenanfang steht und welche in der Mitte? Geht das irgendwie automatisch? } }

\relative c' {
  \override Score.RehearsalMark #'self-alignment-X = #LEFT

  \mark \markup{ \circle \bold 1 "Alle meine Entchen" }
  c4 d e f
  g2 g
  a4 a a a
  g1
  \override Score.RehearsalMark #'X-offset = -1
  \mark \markup{ \circle \bold 2 "Hänschen klein" }
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

Gibt es noch andere Möglichkeiten, einen Text relativ zum Taktstrich zu platzieren?

Gruß Thomas

Manuela

  • Member
Re: RehearsalMark mit Zahl und Text - Ausrichtung
« Antwort #1 am: Donnerstag, 13. Oktober 2016, 21:31 »
Ich empfehle vor dem Posten die Lektüre folgenden Beitrags  ;)

Fragen - Minimal-Beispiele

fugenkomponist

  • Member
Re: RehearsalMark mit Zahl und Text - Ausrichtung
« Antwort #2 am: Donnerstag, 13. Oktober 2016, 22:25 »
Ausnahmsweise kann ich der Minimalbeispiel-Forderung mal nicht uneingeschränkt zustimmen, und zwar aus folgendem Grund: Im Prinzip ist das fast ein Minimalbeispiel (es enthält mehr als 3 Noten, das ist zum Demonstrieren aber fast nötig, auch wenn man sich zugegebenermaßen auf einfache Tonwiederholung beschränken könnte). Wenn man nun den Code übersetzt, sieht man, dass einfach an einem kurzen Beispiel die bisherigen Versuche der Problemlösung gezeigt und per Markup dazwischen kommentiert werden. Also quasi ein kompletter Post in LilyPond.

Jetzt kommt aber die Einschränkung: Nicht alle schmeißen wie ich jeden LilyPond-Code erstmal in Frescobaldi, bevor sie mit dem Lesen des Posts anfangen. Offensichtlich zum Beispiel Manuela. Ist auch verständlich, deshalb würd ich lieber den Text direkt in den Post schreiben und dazwischen nur kleine Abschnitte mit [ code ]-Tags.

Hier nun eine mögliche Lösung: es wird geschaut, ob die RehearsalMark sich an einem Zeilenumbruch befindet (per ly:item-break-dir) und falls sie sich irgendwo in der Mitte der Zeile befindet, wird X-offset gesetzt (Ich finde übrigens ca. -0.7 passender als -1). Falls die RehearsalMark am Anfang der Zeile ist, passiert nichts. Es wird also X-offset auch nicht auf 0 gesetzt (was sie noch viel weiter links landen lassen würde).

\version "2.18.2"

\relative c' {
  \override Score.RehearsalMark.self-alignment-X = #LEFT
  \override Score.RehearsalMark.before-line-breaking =
  #(lambda (grob)
     (if (eq? CENTER (ly:item-break-dir grob))
          (ly:grob-set-property! grob 'X-offset -0.7)))
  \mark \markup{ \circle \bold 1 "Alle meine Entchen" }
  c4 d e f
  g2 g
  a4 a a a
  g1
  \mark \markup{ \circle \bold 2 "Hänschen klein" }
  g4 e e2
  f4 d d2
  c4 d e f
  g4 g g2
}

Edit: Ich hänge gerne auch kleine Ausschnitte als Bild an, um meine Frage bzw. meine Antwort zu demonstrieren. Damit erspart man den Lesern, selbst Frescobaldi/LilyPond anzuschmeißen, nur um einen Code nachzuvollziehen. Wenn man als Leser dann am Code was ändern will, kann man das ja immer noch machen ;)
« Letzte Änderung: Donnerstag, 13. Oktober 2016, 22:30 von fugenkomponist »

Thomas

  • Member
Re: RehearsalMark mit Zahl und Text - Ausrichtung
« Antwort #3 am: Freitag, 14. Oktober 2016, 19:36 »
Die Lösung von Fugenkomponist funktioniert im Prinzip.

Wenn man aber ein Doppelwiederholungszeichen hat, rutscht die Marke aber sehr weit nach vorne.

\version "2.18.2"

\relative c' {
  \override Score.RehearsalMark.self-alignment-X = #LEFT
  \override Score.RehearsalMark.before-line-breaking =
  #(lambda (grob)
     (if (eq? CENTER (ly:item-break-dir grob))
         (ly:grob-set-property! grob 'X-offset -0.7)))

  \mark \markup{ \circle \bold 1 "Alle meine Entchen" }
  \repeat volta 2 {
    \repeat unfold 4 { c1 }
  }
 
  % Das hier hat keinen Effekt
  \once \override Score.RehearsalMark #'X-offset = 10
 
  \mark \markup{ \circle \bold 2 "Hänschen klein" }
  \repeat volta 2 {
    \repeat unfold 4 { c1 }
  }
}