]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/snippets/horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
5e43ce53338300b6439c4a5bdf407670af011a28
[lilypond.git] / Documentation / snippets / horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
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
5 %%
6 %% This file is in the public domain.
7 \version "2.18.0"
8
9 \header {
10   lsrtags = "expressive-marks, tweaks-and-overrides, version-specific"
11
12   texidoc = "
13 Some dynamic expressions involve additional text, like @qq{sempre pp}.
14 Since dynamics are usually centered under the note, the \\pp would be
15 displayed way after the note it applies to.
16
17 To correctly align the @qq{sempre pp} horizontally, so that it is
18 aligned as if it were only the \\pp, there are several approaches:
19
20 * Simply use @code{\\once\\override DynamicText.X-offset = #-9.2}
21 before the note with the dynamics to manually shift it to the correct
22 position. Drawback: This has to be done manually each time you use that
23 dynamic markup...
24
25 * Add some padding (@code{#:hspace 7.1}) into the definition of your
26 custom dynamic mark, so that after lilypond center-aligns it, it is
27 already correctly aligned. Drawback: The padding really takes up that
28 space and does not allow any other markup or dynamics to be shown in
29 that position.
30
31 * Shift the dynamic script @code{\\once\\override ... .X-offset = ..}.
32 Drawback: @code{\\once\\override} is needed for every invocation!
33
34 * Set the dimensions of the additional text to 0 (using
35 @code{#:with-dimensions '(0 . 0) '(0 . 0)}). Drawback: To LilyPond
36 @qq{sempre} has no extent, so it might put other stuff there and create
37 collisions (which are not detected by the collision detection!). Also,
38 there seems to be some spacing, so it's not exactly the same alignment
39 as without the additional text
40
41 * Add an explicit shifting directly inside the scheme function for the
42 dynamic-script.
43
44 * Set an explicit alignment inside the dynamic-script. By default, this
45 won't have any effect, only if one sets X-offset! Drawback: One needs
46 to set @code{DynamicText.X-offset}, which will apply to all dynamic
47 texts! Also, it is aligned at the right edge of the additional text,
48 not at the center of pp.
49
50
51
52
53 "
54   doctitle = "Horizontally aligning custom dynamics (e.g. \"sempre pp\" \"piu f\" \"subito p\")"
55 } % begin verbatim
56
57 \paper {
58   ragged-right = ##f
59   indent = 2.5\cm
60 }
61
62 % Solution 1: Using a simple markup with a particular halign value
63 % Drawback: It's a markup, not a dynamic command, so \dynamicDown
64 %           etc. will have no effect
65 semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" }
66
67 % Solution 2: Using a dynamic script & shifting with
68 %             \once \override ...X-offset = ..
69 % Drawback: \once \override needed for every invocation
70 semppK =
71 #(make-dynamic-script
72   (markup #:line
73           (#:normal-text
74            #:italic "sempre"
75            #:dynamic "pp")))
76
77 % Solution 3: Padding the dynamic script so the center-alignment
78 %             puts it at the correct position
79 % Drawback: the padding really reserves the space, nothing else can be there
80 semppT =
81 #(make-dynamic-script
82   (markup #:line
83           (#:normal-text
84            #:italic "sempre"
85            #:dynamic "pp"
86            #:hspace 7.1)))
87
88 % Solution 4: Dynamic, setting the dimensions of the additional text to 0
89 % Drawback: To lilypond "sempre" has no extent, so it might put
90 %           other stuff there => collisions
91 % Drawback: Also, there seems to be some spacing, so it's not exactly the
92 %           same alignment as without the additional text
93 semppM =
94 #(make-dynamic-script
95   (markup #:line
96           (#:with-dimensions '(0 . 0) '(0 . 0)
97                              #:right-align
98                              #:normal-text
99                              #:italic "sempre"
100                              #:dynamic "pp")))
101
102 % Solution 5: Dynamic with explicit shifting inside the scheme function
103 semppG =
104 #(make-dynamic-script
105   (markup #:hspace 0
106           #:translate '(-18.85 . 0)
107           #:line (#:normal-text
108                   #:italic "sempre"
109                   #:dynamic "pp")))
110
111 % Solution 6: Dynamic with explicit alignment. This has only effect
112 %             if one sets X-offset!
113 % Drawback: One needs to set DynamicText.X-offset!
114 % Drawback: Aligned at the right edge of the additional text,
115 %           not at the center of pp
116 semppMII =
117 #(make-dynamic-script
118   (markup #:line (#:right-align
119                   #:normal-text
120                   #:italic "sempre"
121                   #:dynamic "pp")))
122
123 \context StaffGroup <<
124   \context Staff = "s" <<
125     \set Staff.instrumentName = #"Normal"
126     \relative c'' {
127       \override Staff.InstrumentName.self-alignment-X = #LEFT
128       \key es \major
129       c4\pp c\p c c | c\ff c c\pp c
130     }
131   >>
132   \context Staff = "sMarkup" <<
133     \set Staff.instrumentName = \markup \column { Normal markup }
134     \relative c'' {
135       \override Staff.InstrumentName.self-alignment-X = #LEFT
136       \key es \major
137       c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c
138     }
139   >>
140   \context Staff = "sK" <<
141     \set Staff.instrumentName = \markup \column { Explicit shifting }
142     \relative c'' {
143       \override Staff.InstrumentName.self-alignment-X = #LEFT
144       \key es \major
145       \once \override DynamicText.X-offset = #-9.2
146       c4\semppK c\p c c
147       c4\ff c
148       \once \override DynamicText.X-offset = #-9.2
149       c4\semppK c
150     }
151   >>
152   \context Staff = "sT" <<
153     \set Staff.instrumentName = \markup \column { Right padding }
154     \relative c'' {
155       \override Staff.InstrumentName.self-alignment-X = #LEFT
156       \key es \major
157       c4\semppT c\p c c | c\ff c c\semppT c
158     }
159   >>
160   \context Staff = "sM" <<
161     \set Staff.instrumentName = \markup \column { Setting dimension "to zero" }
162     \relative c'' {
163       \override Staff.InstrumentName.self-alignment-X = #LEFT
164       \key es \major
165       c4\semppM c\p c c | c\ff c c\semppM c
166     }
167   >>
168   \context Staff = "sG" <<
169     \set Staff.instrumentName = \markup \column { Shifting inside dynamics }
170     \relative c'' {
171       \override Staff.InstrumentName.self-alignment-X = #LEFT
172       \key es \major
173       c4\semppG c\p c c | c\ff c c\semppG c
174     }
175   >>
176   \context Staff = "sMII" <<
177     \set Staff.instrumentName = \markup \column { Alignment inside dynamics }
178     \relative c'' {
179       \override Staff.InstrumentName.self-alignment-X = #LEFT
180       \key es \major
181       % Setting to ##f (false) gives the same result
182       \override DynamicText.X-offset = #0
183       c4\semppMII c\p c c | c\ff c c\semppMII c
184     }
185   >>
186 >>