Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: Manuela am Donnerstag, 11. August 2016, 18:50

Titel: Versetzungszeichen wandert mit der Note nicht mit(gelöst) + LSR 1044
Beitrag von: Manuela am Donnerstag, 11. August 2016, 18:50
Das schaut jetzt überflüssig aus, weil es ein Minimalbeispiel ist. Wieso wandert das Vorzeichen nicht mit, obwohl genug Platz wäre?
\version "2.19.37"

<<
  \relative c' { \voiceTwo < c es g >1  }
  \\
  \relative c' { \voiceOne
    \once \override NoteColumn.force-hshift = #3
    as'2
  }
>>
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: fugenkomponist am Donnerstag, 11. August 2016, 20:34
Wieso wandert das Vorzeichen nicht mit, obwohl genug Platz wäre?
So weit ich weiß, ist das die korrekte Anwendung der Regel. Außerdem hat es vermutlich technische Gründe: Da nicht jedes Vorzeichen einzeln gesetzt wird (sondern z. B. welche im Oktavabstand untereinander und das oberste und unterste am nächsten an die Noten), wird die Plazierung nicht von den einzelnen Accidental-grobs gemacht, sondern einem weiteren Grob AccidentalPlacement. Jetzt frag ich mich, ob es eine Möglichkeit gäbe, einzelne Vorzeichen aus so einem grob rauszunehmen bzw. ein zweites dafür anzulegen. Denn mit X-offset, X-extent, extra-spacing-width etc. lässt sich hier nichts erreichen und mit extra-offset wird ja trotzdem Platz reserviert und deshalb das es-♭ zu weit weg von den Noten gesetzt.

Edit: ich setz mich da mal dran, dauert aber ein bisschen ;)
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: fugenkomponist am Donnerstag, 11. August 2016, 23:32
Folgende Gedanken hab ich mir gemacht:
• Ich habs erstmal probiert, über before-line-breaking AccidentalPlacement das eine Accidental wegzunehmen. before-line-breaking ist aber schon zu spät, AccidentalPlacement hat zu dem Zeitpunkt schon seine Arbeit erledigt. Also müsste man vermutlich nen eigenen Engraver schreiben; davon hab ich aber keine Ahnung und es ist vielleicht ein bisschen viel Aufwand für diese Anwendung.
• Dann dachte ich mir, lass ich doch das as-♭ weg per \omit und missbrauche nen Fingersatz; der hat aber die gleichen Probleme.
• Ich wollte eigentlich auf extra-offset verzichten um richtige Abstände für das es-♭ (sowohl danach zur Note als auch davor zur Taktangabe/Taktstrich/was auch immer im realen Beispiel da ist) zu bekommen. Es geht aber anscheinend doch nicht ohne, zumindest habe ich keine Lösung gefunden.
• Hier meine Lösung mit extra-offset. Die 0.55 sind zustande gekommen durch Vergleich mit einem von LilyPond gesetzten Akkord, die 5.95 mit einem von LilyPond gesetzten as. Den force-hshift = 0 in der zweiten Stimme hab ich noch hinzugefügt, um das ganze mit anderen Systemen übereinanderzubringen.
\version "2.19.37"

<<
  \new Staff <<
    \relative c' {
      s1
      \bar "||"
      \once \override NoteColumn.force-hshift = 3
      \once \override Accidental.extra-offset = #'(5.95 . 0)
      as'2
      as! % Referenz-as
    }
    \\
    \relative c' {
      s1
      \once \override NoteColumn.force-hshift = 0
      \once \override Accidental.extra-offset = #'(0.55 . 0)
      \override Staff.BarLine.extra-spacing-width = #'(0 . -0.55)
      < c es g >1
    }
  >>
  \repeat unfold 2 q1 % Referenz-Akkorde
>>
Jetzt würd mich ja schon mal interessieren, wofür du das brauchst …

Ach ja: extra-spacing-width hab ich gesetzt, damit 0.55 weniger Platz gelassen wird für das es-♭, welches ja optisch um diesen Betrag nach rechts geschoben ist, aber fürs Spacing immer noch an Ort und Stelle sitzt ;)
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: harm6 am Freitag, 12. August 2016, 08:06
Hallo Manuela,

wie fugenkomponist schon sagte, die Accidental entstehen im Voice-context, und werden im grob AccidentalPlacement im Staff-context gesammelt um schließlich eine accidental-column auszugeben.

Neben 'extra-offset kann ich mir nur zwei andere Möglichkeiten denken.
- Verschiebe die engraver
- Gehe AccidentalPlacement via 'positioning-done an.

Die erste hat den Nachteil, daß es keine Möglichkeit gibt es temporär ein- und auszuschalten. Die zweite, daß Du dann selbst verantwortlich bist das grob (AccidentalPlacement) und alle "Kinder" (Accidentals) zu positionieren.

\version "2.19.37"

\new Staff \with { \remove Accidental_engraver }
<<
  \new Voice \with { \consists Accidental_engraver }
    \relative c' { \voiceOne
      \once \override NoteColumn.force-hshift = #2.05
      \once \override Accidental.X-offset = 3.0
      as'2
    }
  \\
  \new Voice \with { \consists Accidental_engraver }
  \relative c' { \voiceTwo < c es g >1  }
>>


<<
    \relative c'  {
      \once \override NoteColumn.force-hshift = #2.05
      \once \override Staff.AccidentalPlacement.positioning-done =
      %% using 'positioning-done will result in the need to take care of
      %% positioning the grob and its children oneself
      #(lambda (grob)
        (let ((acc (map cadr (ly:grob-object grob 'accidental-grobs))))
          ;; getting correct accidental may turn out difficult,
          ;; uncomment to print some info to terminal
          ;(format #t "\n~y"
          ;  (list
          ;    "'accidental-grobs are stored like:"
          ;    (ly:grob-object grob 'accidental-grobs)
          ;    "The flat list:"
          ;    acc))
          ;; and uncomment next line to get a printed accidental colored
          ;(ly:grob-set-property! (list-ref acc 1) 'color cyan)
          (ly:grob-set-property! grob 'X-offset -0.6)
          (ly:grob-set-property! (list-ref acc 1) 'X-offset 3.6))
          #t)
      as'2
    }
  \\
  \relative c' { < c es g >1  }
>>

Gruß,
  Harm
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: Manuela am Freitag, 12. August 2016, 09:26
Danke für eure Antworten.  :D

BTW, Harm, ich habe ein neues Code Snippet verfasst (hoffe es ist keine Doppelung, aber meine diesbezügliche Suche war ergebnislos)

http://lsr.di.unimi.it/LSR/Item?u=1&id=1044 (http://lsr.di.unimi.it/LSR/Item?u=1&id=1044)

Workaround for using numbers as part of Lilypond variable names
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: fugenkomponist am Freitag, 12. August 2016, 10:54
- Verschiebe die engraver
Das hatte ich wegen des von dir erwähnten Nachteils gar nicht erst versucht. In dem Minimalbeispiel funktionierts natürlich gut, aber vermutlich im größeren Zusammenhang nicht mehr.
Zitat
- Gehe AccidentalPlacement via 'positioning-done an.
Was genau macht positioning-done? Klingt schon vom Namen nach nem Boolean, gibt auch #t aus, wenn mans z. B. in before-line-breaking ausgeben lässt. Und laut IR ist es das auch. Aber ne Funktion geht auch?

Anscheinend greift es ja früher ein, weil in before-line-breaking schon der Rückgabewert #t steht, und weil da die Liste accidental-grobs schon leer ist (anscheinend wird die irgendwann beim Positionieren oder danach geleert, warum auch immer).

Und zu Manuelas Snippet: Neue LilyPond-Versionen brauchen einen solchen Workaround nicht; Variablennamen können jetzt nicht nur einzelne Musikausdrücke (wie \relative { … } oder \new Staff { … }) zugewiesen werden, sondern assoc-lists, die als keys Symbole oder Zahlen und als values Musikausdrücke haben:\version "2.19.46"
\language "deutsch"

violin.solo = \relative { g' a h }
violin.1 = \relative { e' f g }
violin.2 = \relative { c' d e }

<<
  \violin.solo
  \violin.1
  \violin.2
>>

viola =
#`((solo . ,#{ \relative { a' h c } #})
   (1 . ,#{ \relative { f' g a } #})
   (2 . ,#{ \relative { d' e f } #}))

<<
  \viola.solo
  \viola.1
  \viola.2
>>
Das Bratschen-Beispiel würde man so nicht schreiben von Hand, aber wenn man z. B. in Scheme Musik algorithmisch erzeugt, kann das hilfreich sein ;)
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: harm6 am Freitag, 12. August 2016, 13:13
Zitat von: fugenkomponist
Was genau macht positioning-done?
Die Accidental(s) werden per default via ly:accidental-placement::calc-positioning-done positioniert, siehe accidental-placement.cc.
Am Ende wird #t ausgegeben.

Wenn der user 'positioning-done selber setzt, so kann er eigene Regeln aufstellen, Werte beutzen, etc.
Dadurch signalisiert der user LilyPond letztlich dann "Ich habe fertig". LilyPond reagiert: "Ok. Dann mach ich hier kein eigenes spacing/positioning/etc, sondern benutze Deins."

Ich hatte schon mal folgendes gemacht, (in Anleihe der Idee von Mike Solomon):
https://liarchiv.joonet.de/index.php?topic=1176.msg6446#msg6446 (https://liarchiv.joonet.de/index.php?topic=1176.msg6446#msg6446)

Gruß,
  Harm
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: harm6 am Freitag, 12. August 2016, 13:37
Zitat von: Manuela
BTW, Harm, ich habe ein neues Code Snippet verfasst (hoffe es ist keine Doppelung, aber meine diesbezügliche Suche war ergebnislos)

http://lsr.di.unimi.it/LSR/Item?u=1&id=1044 (http://lsr.di.unimi.it/LSR/Item?u=1&id=1044)

Hallo Manuela,

vielen Dank für das snippet.

Jedoch:

Nummern in Variablen werden von LilyPond als Dauer interpretiert und sind deshalb nicht erlaubt, ich meine mich schwach zu erinnern, das Dein workaround irgendein Problem produziert. Soll ich mal nachfragen?

Aber schon in 2.18.2 geht:

"foo1" = { d'1 } \new Voice \"foo1"
foo¹ = { c'1 } \new Voice \foo¹
Aber die zweite Möglichkeit ist ebenfalls mit Vorsicht zu genießen. Sie funktioniert nur, weil solche Zeichen nicht explicit ausgeschlossen sind. Möglicher weise wird irgendwann ein Grund entdeckt sie doch zu verbieten...

Darüberhinaus gibt es in neueren Versionen, die von fugenkomponist beschriebene Möglichkeit.
Insoweit sehe ich keinen Gewinn in diesem snippet (jeder scheme-programmer weiß es sowieso) und tendiere dazu es zu löschen.
Ok?


Ansonsten öffne bitte einen neuen thread für LSR-snippets. Hier unter "Versetzungszeichen wandert mit der Note nicht mit - wieso?" ist es wahrhaftig off-topic ;)

https://liarchiv.joonet.de/index.php?topic=2321.msg13010#msg13010 (https://liarchiv.joonet.de/index.php?topic=2321.msg13010#msg13010) ist nicht vergessen, bin nur noch nicht dazu gekommen.

Gruß,
  Harm
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: Manuela am Freitag, 12. August 2016, 14:35

Nummern in Variablen werden von LilyPond als Dauer interpretiert und sind deshalb nicht erlaubt, ich meine mich schwach zu erinnern, das Dein workaround irgendein Problem produziert. Soll ich mal nachfragen?

Ja, das würde mich interessieren.

Darüberhinaus gibt es in neueren Versionen, die von fugenkomponist beschriebene Möglichkeit.

Welche wäre das? Die ist irgendwie an mir vorbei gegangen.

Insoweit sehe ich keinen Gewinn in diesem snippet (jeder scheme-programmer weiß es sowieso) und tendiere dazu es zu löschen.
Ok?

Scheme-Programmierer wissen es sowieso, klar. Aber nicht jede/r, die/der Lilypond verwendet, versteht was von Scheme oder will sich damit so ausgiebig beschäftigen. Mir hätte dieses Snippet schon geholfen, wenn es vorhanden gewesen wäre, bevor ich mich mit Scheme beschäftigte. Vll. noch nicht löschen, ich plane ein weiteres Snippet, ich würde es dann überschreiben, damit nicht schon wieder eine Lücke in der Numerierung entsteht.

Ansonsten öffne bitte einen neuen thread für LSR-snippets. Hier unter "Versetzungszeichen wandert mit der Note nicht mit - wieso?" ist es wahrhaftig off-topic ;)

Du hast natürlich recht, hier ist die Erwähnung extrem off-topic. Sollten wir einen eigenen Thread für Snippets eröffnen? Oder für jedes Snippet einen eigenen Thread? Oder gibt es den Thread schon und ich habe ihn übersehen?
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso?
Beitrag von: fugenkomponist am Freitag, 12. August 2016, 19:26
Welche wäre das? Die ist irgendwie an mir vorbei gegangen.
Schau mal in diesen Beitrag (https://liarchiv.joonet.de/index.php?topic=2328.msg13056#msg13056), letzter Absatz. Das mit den assoc-lists muss dir nicht unbedingt was sagen, aber der Code ist relativ klar ;)
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso? (gelöst)
Beitrag von: harm6 am Mittwoch, 24. August 2016, 20:58
Zitat
Zitat
    Nummern in Variablen werden von LilyPond als Dauer interpretiert und sind deshalb nicht erlaubt, ich meine mich schwach zu erinnern, das Dein workaround irgendein Problem produziert. Soll ich mal nachfragen?

Ja, das würde mich interessieren.

Hier Diskussion zum Thema:
http://lilypond.1069038.n5.nabble.com/identifiers-with-numbers-new-LSR-snippet-td193652.html (http://lilypond.1069038.n5.nabble.com/identifiers-with-numbers-new-LSR-snippet-td193652.html)

Meine Bedenken sind also nicht zutreffend. Aber vielleicht magst Du ja die Beschreibung sowie Kommentare in diesem Licht überarbeiten/ergänzen.

Gruß,
  Harm
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit - wieso? (gelöst)
Beitrag von: Manuela am Mittwoch, 24. August 2016, 22:28
Hier Diskussion zum Thema:
http://lilypond.1069038.n5.nabble.com/identifiers-with-numbers-new-LSR-snippet-td193652.html (http://lilypond.1069038.n5.nabble.com/identifiers-with-numbers-new-LSR-snippet-td193652.html)

Meine Bedenken sind also nicht zutreffend. Aber vielleicht magst Du ja die Beschreibung sowie Kommentare in diesem Licht überarbeiten/ergänzen.


Bin gerade dabei, ich versuche nur herauszufinden, wie ich die hochgestellte Eins eingeben kann (außer durch copy&paste). Wobei ich mich frage, ob es sinnvoll ist, ein ausgefallenes Zeichen, das man schwer auf der Tastatur eingeben kann, in einem Variablennamen zu verwenden.
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit(gelöst) + LSR 1044
Beitrag von: harm6 am Mittwoch, 24. August 2016, 23:36
¹ = <alt gr>  1
² = <alt gr>  2
³ = <alt gr>  3

Ab jetzt mache ich auch immer copy/paste ;)

Gruß,
  Harm
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit(gelöst) + LSR 1044
Beitrag von: Manuela am Donnerstag, 25. August 2016, 09:22
¹ = <alt gr>  1
² = <alt gr>  2
³ = <alt gr>  3

Ab jetzt mache ich auch immer copy/paste ;)


Hmmm da scheinen die Tastaturen nicht genormt zu sein.
Auf meinem Laptop erzeugt <alt gr> 1 gar nix, 2+3 klappt, aber dann ist schon wieder Schluss. <alt gr> [7-0] erzeugen dann die geschwungenen bzw. eckigen Klammern, die in Lily ja auch nicht gerade unwichtig sind  ;)
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit(gelöst) + LSR 1044
Beitrag von: fugenkomponist am Donnerstag, 25. August 2016, 10:50
Naja, „nicht genormt“ ist relativ: es gibt einfach verschiedene Layouts, siehe hier (https://de.wikipedia.org/wiki/Tastaturbelegung#Deutschland_und_.C3.96sterreich). T1 ist der Standard bei Windows, bei vielen Linuxdistributionen aber was anderes, ich glaub T3.
Titel: Re: Versetzungszeichen wandert mit der Note nicht mit(gelöst) + LSR 1044
Beitrag von: Manuela am Donnerstag, 25. August 2016, 14:09
Auch auf meinem großen Stand-PC funktioniert <alt-gr> 1 nicht. Ist vielleicht eine Windoofs-Sache.