Hallo zusammen,
ich hab' mir ein paar Gedanken gemacht wie man eine NoteColumn im Takt zentrieren kann. (Es handelt sich eigentlich um die Fortführung des Threads
Noten unter Ganztaktpause zentrieren, aber ich dachte ich fange einen neuen an mit einem, so hoffe ich, leichter wiederfindbaren Titel)
Es werden drei Befehle definiert:
centerNoteColumnOn
centerNoteColumnOff
onceCenterNoteColumnDiese Befehle sollten hinreichen um alle Möglichkeiten abzudecken.
Ich habe mich bemüht die Funktion möglichst allgemeingültig zu machen:
stemUp, stemDown, Vorzeichen oder nicht, Arpeggio oder nicht, Notenköpfe zu beiden Seiten des Halses oder nicht (BTW wie nennt man das eigentlich?), Punktierung oder nicht, Noten oder Pausen, Takt-, Tonart, Schlüsselwechsel, Zeilenumbruch - all das soll die Funktion verarbeiten können und tut sie auch, von ein paar Problemen noch abgesehen (s.u.). Wer Beispiele findet, bei denen es nicht oder schlecht funktioniert: Bitte posten!
(Wer es genauer wissen möchte kann die Zeilen 145 – 151 einkommentieren. Die Einfärbung der Grobs zwischen denen zentriert wird ist aber nur dann sinnvoll, wenn \onceCenterNoteColumn benutzt wird, denn sonst überschreibt der eine Funktionsaufruf die Farbe des anderen.)
Probleme:
- Wenn man zu viele Engraver abstellt, gibt’s für die Befehle keine Grobs mehr zwischen denen zentriert werden könnte. Dann geht’s krachen.
- Ich habe nicht herausfinden können, wie ich ein Arpeggio innerhalb der Funktion ansprechen soll, welches mit \set Score.connectArpeggios = ##t erzeugt wurde. Falls ein solches vorkommt, muß man es zusätzlich manuell verschieben.
- Beim Wechsel zu a-moll/C-Dur werden natürlich nur die Vorzeichen der vorangegangenen Tonart aufgelöst und keine neuen gesetzt. Die Funktion sollte dann das Grob KeyCancellation ansprechen. Das geschieht aber nicht. Stattdessen erscheint als log-Meldung: Programmierfehler: Infinity or NaN encountered
Ich habe keine Ahnung warum.
Wer es überprüfen möchte:
In Zeile 331/332 \voice auskommentieren und stattdessen \testVoice reinnehmen (dann hat man meine Teststimme). Und dann in dieser Stimme (Zeile 261/262) a\minor wählen.
Wie kann man diese Fehlermeldung erklären und die Funktion so verbessern, daß sie auch diesen Fall abdeckt?
Getestet habe ich mit "2.14.2" und "2.15.20" (in "2.12.3" wird es ohne Umbau nicht funktionieren)-
Gruß,
Harm