Coda links von Alternative-Strich

Begonnen von Enthalpy, Montag, 21. Dezember 2020, 20:30

« vorheriges - nächstes »

Enthalpy

Nabend miteinander!

Auch um Platz zu sparen: Ein Coda-Symbol steht über einer Alternative, sollte lieber links sein, wie auf den Bildern.

\version "2.20.0" \language "deutsch"
\relative { \time 2/4
  \override RehearsalMark.outside-staff-priority = #600
  \override VoltaBracketSpanner.outside-staff-priority = #600
  \override RehearsalMark.bound-details.right.padding = 3
  \repeat volta 2
    { f' 2 \mark \markup \fontsize #-2 \musicglyph "scripts.coda" }
  \alternative
    { { g } { a } }
}


Ich habe versucht, die outside-staff-priority zu tüfteln, an verschiedenen Stellen, sowie das right.padding, doch das wirkt nix.

Wisst Ihr einen Trick dafür? Danke!

harm6

\override Score.RehearsalMark.X-offset = -2
sollte es tun.

Gruß,
  Harm

Enthalpy

Es tut es. Besten Dank!

Diese Aspekte von Lilypond sind mir ganz undurchsichtig, und ich weiss auch nicht, was ich darüber wo lesen kann. Gibt es etwas wie eine Einführung zu den Variablen in Lilypond, ihrer Reichweite, ihren eventuellen Schutz...? Blockstruktur, vom strukturierten programmieren, scheinen hier nicht zu gelten.

harm6

Zunächst, LilyPond verwendet eine Eingabesyntax. Diese Eingabesyntax ist keine Programmiersprache.
Falls LilyPond von Benutzerseite erweitert wird, dann ist guile zu benutzen.

Im konkreten Fall wird aber nichts erweitert, es kommen auch überhaupt keine Variablen vor. Insoweit verstehe ich diesen Teil Deiner Frage nicht.

Um LilyPond besser zu verstehen sind vor allem drei Manuals wesentlich.

A) das Learning Manual (LM) für die Basics.
Dort wird u.a. erklärt das graphische Objekte (grobs) in bestimmten Umgebungen (context) initiert werden und bestimmte Eigenschaften (properties) haben.
Um ein grob anzusprechen muß man also wissen in welchem context es lebt und welches property man verändern kann und will.

B) die Internals Reference (IR) listet all das auf.

context:
Im konkreten Fall (RehearsalMark) liest man, daß es von einem bestimmten engraver kreiert wird. Dem link folgend sieht man das der Engraver im Score-context sitzt.
Also muß es schon mal
    \override Score.RehearsalMark.property = value
heißen.

property:
Das für den konkreten Zweck richtige property zu finden ist mitunter schwieriger.
Die properties die direkt beim jeweiligen grob aufgeführt sind, sind diejenigen, die auch einen default für das jeweilige grob gesetzt bekommen haben.
'outside-staff-priority ist bei den defaults gelistet, aber wenn Du die Beschreibung liest, so sollte deutlich werden, daß damit eine vertikale Reihenfolge eingeregelt wird. Du willst aber ein horizontale Verschiebung.
Dafür kommen aus der Liste der defaults nur zwei properties in Frage: 'self-alignment-X und 'X-offset.
'self-alignment-X könnte funktionieren, aber wie der Name schon sagt, bezieht es sich eher auf sich selbst, Du willst aber eine Verschiebung relativ zu einem anderen grob, es ist also von vorn herein nicht ganz passend. Deshalb: 'X-offset, also
    \override Score.RehearsalMark.X-offset = value

value:
Den Wert für 'X-offset kann man durch probieren ermitteln. Wenn die RehearsalMark weit genug nach links verschoben ist, dann "fällt" sie runter in Richtung des StaffSymbol, da kein anderes grob momentan im Wege steht. Ein Folge der skylines, die LilyPond verwendet um vertikale Abstände einzuregeln bzw Kollisionen zu vermeiden. Sichtbar zu machen mit:
    #(ly:set-option 'debug-skylines #t)

Bei allen grobs sind auch die interfaces aufgeführt, die verwendet werden.
Das bedeutet theoretisch, daß die properties, die dort gelistet werden verwendet werden könnten. 'bound-details ist in keinem interface der RerhearsalMark gelistet, also nutzlos. Für 'right-padding gilt das ebenso.
Praktisch gesehen werden aber nur diejenigen properties nutzbar sein, die auch vom engraver oder der stencil-procedure o.ä. verwendet werden, zumindest aber nicht überschrieben werden oder hardcoded sind.
Es gibt auch einige properties die immer anwendbar sind, wie 'color oder 'extra-offset (siehe grob-interface).
Mit 'extra-offset kannst Du ein grob ebenfalls verschieben, allerdings erfolgt die Anwendung so spät, daß andere grobs diese Verschiebung nicht berücksichtigen. In den meisten Fällen ist das nachteilig.
'extra-offset sollte also nur angewendet werden, wenn man genau das (andere grobs bleiben unbeeinflußt) haben will oder als letztes Mittel.

C) die Notation Reference (NR) ist ein thematisch geordnetes Nachschlagewerk, erklärt Zusammenhänge und gibt Code-Beispiele.
Dort steht auch alles was ich oben beschrieben habe (oder es ist bereits im LM erklärt). Allerdings ist die NR doch sehr lang und die nötigen Informationen sind mitunter an verschiedenen Stellen aufgeführt und nicht immer leicht zu finden bzw zusammen zu führen.
Ich finde den Index dabei sehr hilfreich, oder auch eine Suche durch das ganze File.
Meistens verwende ich nur die IR. Ausnahme ist das vertikale spacing im score bzw paper, da muß ich jedesmal in der NR nachschlagen.
Aber mir sind die Zusammenhänge meistens auch klar und für das womit ich mich meistens beschäftige reicht dann die IR oft nicht aus, dann lass ich mir Sachen anzeigen und/oder schau in den source-code, das führt hier aber zu weit.

HTH,
Harm