On 9/6/06, Markus Schneider <[EMAIL PROTECTED]> wrote:
Hi Trevor,I derived this from the hint given regarding the OctavateEight in define-grobs.scm: \override TextScript #'X-offset = #(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self)) ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)))) Tested in 2.9.17 (W2K).
Hi Markus,
This is exactly what I was looking for. Wow, thanks.
The Scheme code passed in as the last argument to \override is a
mouthful and so it's possible to save the whole thing to a named
variable. And, with that, here's an example of centering TextScripts
on their (NoteHead) X-parents, combined with moving around the
self-alignment-X of three different TextScripts.
%%% BEGIN X-PARENT CENTERING SNIPPET %%%
\version "2.9.16"
textScriptCenterOnParent = \override TextScript #'X-offset =
#(ly:make-simple-closure
`(,+ ,(ly:make-simple-closure (list
ly:self-alignment-interface::x-aligned-on-self))
,(ly:make-simple-closure (list
ly:self-alignment-interface::centered-on-x-parent))))
\new Staff {
\textScriptCenterOnParent
\override TextScript #'self-alignment-X = #left
c'4_\markup { MMM }
\override TextScript #'self-alignment-X = #center
c'4_\markup { MMM }
\override TextScript #'self-alignment-X = #right
c'4_\markup { MMM }
}
%%% END X-PARENT SNIPPET %%%
Also, since I've been lazy about actually learning Scheme, your
solution is educational because it taught me how transcribe the
craziest bits of the grob definition code in scr/define-grobs.scm into
Scheme code I can stick inside a normal .ly file.
I'll add this to the archive so I can find it easily next time I'm
wanting to copy over the behavior of any existing grob:
In the OctavateEight definition in scm/define-grobs.scm we find ...
<snip>
(X-offset . ,(ly:make-simple-closure
`(,+ ,(ly:make-simple-closure (list
ly:self-alignment-interface::x-aligned-on-self))
,(ly:make-simple-closure (list
ly:self-alignment-interface::centered-on-x-parent)))))
<snip>
... which then, in an ly input file, becomes ...
\override MyGrob #'X-offset =
#(ly:make-simple-closure
`(,+ ,(ly:make-simple-closure (list
ly:self-alignment-interface::x-aligned-on-self))
,(ly:make-simple-closure (list
ly:self-alignment-interface::centered-on-x-parent))))
... which looks like a pretty direct mapping: the last argument to
\override begins, like always, with a hash sign, whereas the second
element of the pair in scm/define-grobs.scm starts with a comma
instead.
Thanks again.
--
Trevor Bača
[EMAIL PROTECTED]
notehead-centering.png
Description: PNG image
_______________________________________________ lilypond-user mailing list [email protected] http://lists.gnu.org/mailman/listinfo/lilypond-user
