Allgemein > Fragen zu Funktionen

self-alignment-x funktioniert nicht bei geänderten Kontexten

(1/2) > >>

xr:
Hi,

Ich versuche Text innerhalb eines Scores unterschiedlich zu setzen.

Deshalb habe ich aus dem allgemeinen Kontext den Hyphen_engraver und den Lyric_engraver entfernt und in neu definierten Kontexten wieder hinzugefügt.
In den neuen Definitionen funktionieren soweit alle neuen Einstellungen bis auf self-alignment-x.
self-alignment-x wird nur beim ersten Mal berücksichtigt, danach bleibt der Text linksbündig.

Muss ich eventuell noch mehr ändern?

Hier ist ein Beispiel:

--- Code: ---\version "2.18.2"

\score {
 
  <<
  \relative {
   
    \time 4/4
    e'4 e4 e4 e4 | e4 e4 e4 e4 \break
    e'4 e4 e4 e4 | e4 e4 e4 e4
  }
  \addlyrics {
    \new standard {test test test test test test test test}
    \new version { test test test test test test test test}
  }
>>

  \layout  {
   
    \context {
      \Lyrics
     
      \remove "Hyphen_engraver"
      \remove "Lyric_engraver"

      \accepts "standard" 
      \accepts "version"
    }

    \context {
      \name standard
      \type "Engraver_group"
     
      \consists "Bar_engraver"
      \consists "Lyric_engraver"
      \consists "Hyphen_engraver"

      \override LyricText.self-alignment-X = #1
      \override LyricSpace.minimum-distance = #1
      \alias Lyrics 
    }
   
    \context {
      \name version
      \type "Engraver_group"

      \consists "Lyric_engraver"
      \consists "Hyphen_engraver"

      % Diese Einstellungen funktionieren
      \override LyricText.Y-offset = #-3
      \override LyricSpace.minimum-distance = #10
      \override LyricText.font-size = #3
     
      % funktioniert nicht
      \override LyricText.self-alignment-X = #1
     
      \alias Lyrics
    }   
  }
}

--- Ende Code ---


Vielen Dank für Hilfe,
Xaver

xr:
Wie ich herausgefunden habe, funktioniert self-alignment-x dann nicht, wenn vor der Nutzung eines eigenen Kontextes noch kein Text im allgemeinen Kontext gesetzt wurde.
Als Workaround habe ich daher einen Dummy eingefügt. Nach dem Dummy funktioniert self-alignment-x wie es soll.

Ich nehme an, dass dieses Verhalten ein Bug ist - (fällt wohl bei normaler Nutzung nicht auf)

Hier mal der Code:

--- Code: ---\version "2.18.2"

dummy = {
  \once \omit Score.TimeSignature
  \once \omit Score.Clef
  \partial 64
  \once  \hideNotes       
   e'64   
   \once \omit Score.BarLine
}

\score {
 
  <<
  \relative {   
    \dummy
    \time 4/4       
    e4 e4 e4 e4 | e4 e4 e4 e4 \break   
    e4 e4 e4 e4 | e4 e4 e4 e4 \break
  }
  \addlyrics {
    dummy_text       
    \new standard  { testa test test test test test test test } \break
    \new version {test test test test test test test test }                   
  }
>>

  \layout  {
   
    \context {
      \Lyrics
     
      \remove "Hyphen_engraver"
      \remove "Lyric_engraver"
     
      \accepts "version"
      \accepts "standard"       
    }


    \context {
      \name standard
      \type "Engraver_group"

      \consists "Lyric_engraver"
      \consists "Hyphen_engraver"

      \override LyricText.self-alignment-X = #1
      \override LyricSpace.minimum-distance = #1
      \override LyricText.Y-offset = #1     
     
      \alias Lyrics 
    }
   
    \context {
      \name version
      \type "Engraver_group"

      \consists "Lyric_engraver"
      \consists "Hyphen_engraver"

      \override LyricText.Y-offset = #-3
      \override LyricSpace.minimum-distance = #20
      \override LyricText.font-size = #3
      \override LyricText.self-alignment-X = #0
     
      \alias Lyrics
    }   
  }
}

--- Ende Code ---

Auf diese Weise wird am Anfang ein Auftakt eingefügt, dessen einzelne Komponenten wieder ausgeblendet werden. Dadurch wird der Anfangstakt linksseitig etwas länger.
Gibt es da vielleicht noch eine einfachere oder bessere Lösung?

harm6:

--- Zitat ---Gibt es da vielleicht noch eine einfachere oder bessere Lösung?
--- Ende Zitat ---

(1)
Upgrade auf eine neue devel-Version (mit 2.19.52 hats direkt funktioniert, mittlerweile ist 2.19.54 raus)

Aber warum dieses rumeiern mit neuen Kontexten, die dann in einem Lyrics-context aufgerufen werden?

Geht doch viel simpler mit ein paar overrides:

(2)

--- Code: ---lyrSetsI = {
  \override LyricText.self-alignment-X = #1
  \override LyricSpace.minimum-distance = #1
}

lyrSetsII = {
      \override LyricText.Y-offset = #-3
      \override LyricSpace.minimum-distance = #10
      \override LyricText.font-size = #3
      \override LyricText.self-alignment-X = #0
}

\score {
  <<
    \relative {
     
      \time 4/4
      e'4 e4 e4 e4 | e4 e4 e4 e4 \break
      e'4 e4 e4 e4 | e4 e4 e4 e4
    }
    \addlyrics {
      \lyrSetsI test test test test test test test test
      \lyrSetsII test test test test test test test test
    }
  >>
}

--- Ende Code ---


Gruß,
  Harm

Manuela:

--- Zitat von: harm6 am Montag,  9. Januar 2017, 23:15 ---Aber warum dieses rumeiern mit neuen Kontexten, die dann in einem Lyrics-context aufgerufen werden?

Geht doch viel simpler mit ein paar overrides:


--- Ende Zitat ---

Harm, mir geht es auch oft so, dass ich auf die einfache Lösung erst vieeel später draufkomme  ;)

Aber es wird besser...

harm6:

--- Zitat von: harm ---Aber warum dieses rumeiern mit neuen Kontexten, die dann in einem Lyrics-context aufgerufen werden?

--- Ende Zitat ---

--- Zitat von: Manuela ---Harm, mir geht es auch oft so, dass ich auf die einfache Lösung erst vieeel später draufkomme
--- Ende Zitat ---

Die einfachste Lösung für das gezeigte Problem sind wohl einfache overrides. Es mag aber Gründe für neue Kontexte geben, die auf Grund der Kürze des minimal-Beispiels nicht ersichtlich werden.
Deshalb meine durchaus ernst gemeinte Frage.

Gruß,
  Harm

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln