blob: 60a6e09cf9dd89b7dd3a6ba0ce6ac29078a7096b (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
% DO NOT EDIT this file manually; it is automatically
% generated from Documentation/snippets/new
% Make any changes in Documentation/snippets/new/
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
%% Note: this file works from version 2.17.6
\version "2.18.0"
\header {
= "text, tweaks-and-overrides, contexts-and-engravers"
= "
For technical reasons, text scripts attached to note heads cannot
easily be centered on a note head's width, unlike articulations.
Instead of using trial-and-error offset tweaks, this snippet uses a
Scheme engraver to reset the horizontal parent of each markup to a
@code{NoteColumn}. This also allows text to follow note heads which have
been shifted via @code{force-hshift}.
"
= "Centering markup on note heads automatically"
} % begin verbatim
#(define (Text_align_engraver ctx)
(let ((scripts '())
(note-column #f))
(make-engraver
(acknowledgers
((note-column-interface trans grob source)
;; cache NoteColumn in this Voice context
(set! note-column grob))
((text-script-interface trans grob source)
;; whenever a TextScript is acknowledged,
;; add it to `scripts' list
(set! scripts (cons grob scripts))))
((stop-translation-timestep trans)
;; if any TextScript grobs exist,
;; set NoteColumn as X-parent
(for-each (lambda (script)
(set! (ly:grob-parent script X) note-column))
scripts)
;; clear scripts ready for next timestep
(set! scripts '())))))
\layout {
\context {
\Voice
\consists #Text_align_engraver
\override TextScript.X-offset =
#ly:self-alignment-interface::aligned-on-x-parent
\override TextScript.self-alignment-X = #CENTER
}
}
\new Staff <<
\relative c'' {
\override NoteColumn.force-hshift = #3
c1-\markup { \arrow-head #Y #DOWN ##t }
}
\\
\relative c' {
a4 a-\markup { \huge ^ } a a
}
>>
|