1 %% DO NOT EDIT this file manually; it is automatically
2 %% generated from LSR http://lsr.di.unimi.it
3 %% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
4 %% and then run scripts/auxiliar/makelsr.py
6 %% This file is in the public domain.
10 lsrtags = "contexts-and-engravers, text, tweaks-and-overrides"
13 For technical reasons, text scripts attached to note heads cannot
14 easily be centered on a note head's width, unlike articulations.
16 Instead of using trial-and-error offset tweaks, this snippet uses a
17 Scheme engraver to reset the horizontal parent of each markup to a
18 @code{NoteColumn}. This also allows text to follow note heads which
19 have been shifted via @code{force-hshift}.
24 doctitle = "Centering markup on note heads automatically"
27 #(define (Text_align_engraver ctx)
32 ((note-column-interface trans grob source)
33 ;; cache NoteColumn in this Voice context
34 (set! note-column grob))
35 ((text-script-interface trans grob source)
36 ;; whenever a TextScript is acknowledged,
37 ;; add it to `scripts' list
38 (set! scripts (cons grob scripts))))
39 ((stop-translation-timestep trans)
40 ;; if any TextScript grobs exist,
41 ;; set NoteColumn as X-parent
42 (for-each (lambda (script)
43 (set! (ly:grob-parent script X) note-column))
45 ;; clear scripts ready for next timestep
46 (set! scripts '())))))
51 \consists #Text_align_engraver
52 \override TextScript.X-offset =
53 #ly:self-alignment-interface::aligned-on-x-parent
54 \override TextScript.self-alignment-X = #CENTER
60 \override NoteColumn.force-hshift = #3
61 c1-\markup { \arrow-head #Y #DOWN ##t }
65 a4 a-\markup { \huge ^ } a a