1 % DO NOT EDIT this file manually; it is automatically
2 % generated from Documentation/snippets/new
3 % Make any changes in Documentation/snippets/new/
4 % and then run scripts/auxiliar/makelsr.py
6 % This file is in the public domain.
7 %% Note: this file works from version 2.13.36
11 lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
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 have
19 been shifted via @code{force-hshift}.
21 doctitle = "Centering markup on note heads automatically"
25 #(define (Text_align_engraver ctx)
30 (note-column-interface
31 . ,(lambda (trans grob source)
32 ;; cache NoteColumn in this Voice context
33 (set! note-column grob)))
35 (text-script-interface
36 . ,(lambda (trans grob source)
37 ;; whenever a TextScript is acknowledged,
38 ;; add it to `scripts' list
39 (set! scripts (cons grob scripts)))))
41 (stop-translation-timestep
43 ;; if any TextScript grobs exist,
44 ;; set NoteColumn as X-parent
46 (for-each (lambda (script)
47 (set! (ly:grob-parent script X) note-column))
49 ;; clear scripts ready for next timestep
50 (set! scripts '()))))))
55 \consists #Text_align_engraver
56 \override TextScript #'X-offset =
57 #ly:self-alignment-interface::aligned-on-x-parent
58 \override TextScript #'self-alignment-X = #CENTER
64 \override NoteColumn #'force-hshift = #3
65 c1-\markup { \arrow-head #Y #DOWN ##t }
69 a4 a-\markup { \huge ^ } a a