]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/ja/learning/tweaks.itely
Merge remote-tracking branch 'origin/translation'
[lilypond.git] / Documentation / ja / learning / tweaks.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
2
3 @ignore
4     Translation of GIT committish: c1b0482f63f881bd3f67845e5f76a3e04675ef2a
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.19.2"
12
13 @c Translators: Yoshiki Sawada
14 @c Translation status: post-GDP
15
16
17 @node 出力を調整する
18 @chapter 出力を調整する
19 @translationof Tweaking output
20
21 この章では出力を変更する方法について議論します。@c
22 LilyPond は本当にさまざまな設定が可能です。@c
23 もしかすると出力のすべての部分が変更されるかもしれません。
24
25 @menu
26 * 調整の基本::
27 * 内部リファレンス マニュアル::
28 * オブジェクトの見た目::
29 * オブジェクトの配置::
30 * オブジェクトの衝突::
31 * 更なる調整::
32 @end menu
33
34 @node 調整の基本
35 @section 調整の基本
36 @translationof Tweaking basics
37
38 @menu
39 * 調整の紹介::
40 * オブジェクトとインタフェイス::
41 * オブジェクトとプロパティの命名規則::
42 * 調整手段::
43 @end menu
44
45
46 @node 調整の紹介
47 @subsection 調整の紹介
48 @translationof Introduction to tweaks
49
50 @q{調整} は入力ファイルの解釈中にとられるアクションを変更し、@c
51 譜刻される楽譜の見た目を変更するためにユーザが利用可能なさまざまな手段を指す
52 LilyPond の用語です。@c
53 いくつかの調整はとても簡単に使うことができます。@c
54 他の調整はもっと複雑です。@c
55 しかしながら、調整のために利用可能な手段を組み合わせることによって、@c
56 ほとんどいかなる望みの見た目を持った楽譜でも譜刻することが可能になります。
57
58 このセクションでは、調整を理解するのに必要な基礎となるコンセプトを@c
59 カバーします。@c
60 その後、コピーするだけで効果が得られる作成準備が完了している@c
61 さまざまなコマンドについての情報を提供し、@c
62 同時に、あなたがあなた自身の調整を開発する方法を学べるように@c
63 それらのコマンドがどのように構築されるのかを示します。
64
65 この章を読み始める前に、あなたは @ref{コンテキストとエングラーバ} を@c
66 再読することを望むかもしれません。@c
67 なぜなら、コンテキスト、エングラーバとそれらの中に含まれるプロパティは@c
68 調整について理解し、調整を構成するための基礎だからです。
69
70
71 @node オブジェクトとインタフェイス
72 @subsection オブジェクトとインタフェイス
73 @translationof Objects and interfaces
74
75 @cindex object (オブジェクト)
76 @cindex grob (グラフィカル オブジェクト)
77 @cindex spanner (スパナ)
78 @cindex interface (インタフェイス)
79 @cindex properties, object (オブジェクト プロパティ)
80 @cindex object properties (オブジェクト プロパティ)
81 @cindex layout object (レイアウト プロパティ)
82 @cindex object, layout (レイアウト プロパティ)
83
84 調整には LilyPond プログラムの内部オペレーションと構造体への変更も含まれます。@c
85 そのため、我々はまずそれらの内部オペレーションと構造体を記述するために@c
86 使用されるいくつかの用語を導入しなければなりません。
87
88 @q{オブジェクト} という用語は入力ファイルを処理している最中に LilyPond に@c
89 よってビルドされる多くの内部構造体を参照するために使われる汎用的な用語です。@c
90 LilyPond が @code{\new Staff} のようなコマンドに遭遇した場合、@c
91 タイプ @code{Staff} の新しいオブジェクトを構築します。@c
92 その @code{Staff} オブジェクトは、その譜のコンテキスト内部で機能するために@c
93 割り当てられているエングラーバの詳細とともに、その譜に関連付けられている@c
94 すべてのプロパティ -- 例えば、その譜の名前、調号 -- を保持します。@c
95 同様に、@code{Voice} オブジェクト、@code{Score} オブジェクト、@c
96 @code{Lyrics} オブジェクトなどの他のすべてのコンテキストのプロパティを@c
97 保持するためのオブジェクトが存在し、さらに、小節線、符頭、タイ、強弱記号などの@c
98 すべての記譜要素を表すためのオブジェクトも存在します。@c
99 各オブジェクトはそれ自体のプロパティ値のセットを持ちます。
100
101 いくつかのタイプのオブジェクトには特別な名前が与えられています。@c
102 符頭、符幹、スラー、タイ、運指記号、音部記号などの譜刻される出力上の記譜要素を@c
103 表すオブジェクトは @q{レイアウト オブジェクト} と呼ばれ、@c
104 しばしば @q{グラフィカル オブジェクト}
105 あるいは短くして @q{グロッブ (Grob: GRaphical OBject)} と呼ばれます。@c
106 これらのオブジェクトも上記の汎用的な観点から見るとオブジェクトであり、@c
107 それゆえ、それらもまたそれらのオブジェクトに関連付けされたプロパティ --
108 そのオブジェクトの位置、サイズ、色など -- を持ちます。
109
110 いくつかのレイアウト オブジェクトも特別です。@c
111 フレージング スラー、クレッシェンド、オッターバ記号、@c
112 他の多くのグラフィカル オブジェクトが置かれる場所は一点ではありません
113  -- それらは開始点、終了点、そしておそらくそれらの形に関係する@c
114 他のプロパティを持ちます。@c
115 これらのオブジェクトのように形が伸長されるオブジェクトは
116 @q{スパナ (Spanners)} と呼ばれます。
117
118 @q{インタフェイス} とは何なのかという説明が残っています。@c
119 多くのオブジェクト -- たとえそれらが非常に異なっていたとしても --
120 は同じ方法で処理される必要がある共通特徴を共有します。@c
121 例えば、すべてのグラフィカル オブジェクトは色、サイズ、位置などを持ち、@c
122 これらのプロパティはすべて LilyPond が入力ファイルを構文解釈する最中に@c
123 同じ方法で処理されます。@c
124 これらの内部オペレーションを簡潔にするために、これらの共通アクションと@c
125 プロパティは 1 つのグループとして
126 @code{grob-interface} と呼ばれるオブジェクトにまとめられています。@c
127 これと同じような共有プロパティのグループ化が他にも多くあり、@c
128 それぞれに対して最後に @code{interface} が付く名前が与えられています。@c
129 そのようなインタフェイスの総数は 100 を越えます。@c
130 我々は後でなぜこれがユーザにとって利益となり、役に立つのかを見ていきます。
131
132 これらは、我々がこの章で使用するオブジェクトと関係する主要な用語です。
133
134
135 @node オブジェクトとプロパティの命名規則
136 @subsection オブジェクトとプロパティの命名規則
137 @translationof Naming conventions of objects and properties
138
139 @cindex naming conventions for objects (オブジェクトの命名規則)
140 @cindex naming conventions for properties (プロパティの命名規則)
141 @cindex objects, naming conventions (オブジェクトの命名規則)
142 @cindex properties, naming conventions (プロパティの命名規則)
143
144 我々は以前にも @ref{コンテキストとエングラーバ} で@c
145 いくつかのオブジェクト命名規則を見てきました。@c
146 ここで参照のために、最も一般的なオブジェクトとプロパティをリストアップし、@c
147 それに加えてそれらの命名規則と実際の名前の例を挙げます。@c
148 何らかの大文字のアルファベットを表すために @q{A} を使用し、@c
149 いくつかの小文字のアルファベットを表すために @q{aaa} を使用しています。@c
150 他の文字は実際の命名でもそのまま使用されます。
151
152 @multitable @columnfractions .33 .33 .33
153 @headitem オブジェクト/プロパティのタイプ
154   @tab 命名規則
155   @tab 例
156 @item コンテキスト
157   @tab Aaaa や AaaaAaaaAaaa
158   @tab Staff, GrandStaff
159 @item レイアウト オブジェクト
160   @tab Aaaa や AaaaAaaaAaaa
161   @tab Slur, NoteHead
162 @item エングラーバ
163   @tab Aaaa_aaa_engraver
164   @tab Clef_engraver, Note_heads_engraver
165 @item インタフェイス
166   @tab aaa-aaa-interface
167   @tab grob-interface, break-aligned-interface
168 @item コンテキスト プロパティ
169   @tab aaa や aaaAaaaAaaa
170   @tab alignAboveContext, skipBars
171 @item レイアウト オブジェクト プロパティ
172   @tab aaa や aaa-aaa-aaa
173   @tab direction, beam-thickness
174 @end multitable
175
176 これから見ていくのですが、タイプが異なるオブジェクトのプロパティは@c
177 異なるコマンドによって変更されます。@c
178 そのため、名前からオブジェクトやプロパティのタイプを識別できるように@c
179 なると役に立ちます。
180
181
182 @node 調整手段
183 @subsection 調整手段
184 @translationof Tweaking methods
185
186 @cindex tweaking methods (調性手段)
187
188 @menu
189 * \override コマンド::
190 * \revert コマンド::
191 * \once 接頭辞::
192 * \overrideProperty コマンド::
193 * \tweak コマンド::
194 @end menu
195
196 @node \override コマンド
197 @unnumberedsubsubsec @code{\override} コマンド
198 @translationof The \override command
199
200 @cindex override command (override コマンド)
201 @cindex override syntax (override 構文)
202
203 @funindex \override
204 @funindex override
205
206 我々はすでに @ref{コンテキスト プロパティを変更する} と
207 @ref{エングラーバを追加 / 削除する} で @strong{コンテキスト} のプロパティを@c
208 変更したり、@strong{エングラーバ} を追加/削除したりするために使用するコマンド
209 @code{\set} と @code{\with} を見てきました。@c
210 ここでは更に重要ないくつかのコマンドについて見ていきます。
211
212 @strong{レイアウト オブジェクト} のプロパティを変更するためのコマンドは
213 @code{\override} です。@c
214 このコマンドは LilyPond の奥深くにある内部プロパティを@c
215 変更しなければならないため、@c
216 これまで見てきたコマンドのように単純な構文ではありません。@c
217 どのコンテキストの中にあるどのオブジェクトのどのプロパティを@c
218 変更しなければならないのか、そこにセットする新しい値を何にするのかを@c
219 正確に知っている必要があります。@c
220 どのようにこれを行うのかを見ていきましょう。
221
222 このコマンドの一般的な構文は以下のようなものです:
223
224 @example
225 \override @var{Context}.@var{LayoutObject}.@var{layout-property} = #@var{value}
226 @end example
227
228 @noindent
229 これは @var{Context} コンテキストのメンバである
230 @var{LayoutObject} という名前のレイアウトの
231 @var{layout-property} という名前のプロパティに値 @var{value} をセットします。
232
233 必要とされているコンテキストが明白であり、それが最下位レベルのコンテキストである
234 -- つまり、@code{Voice}, @code{ChordNames} や @code{Lyrics} である
235 -- 場合、その @var{Context} は省略可能であり (そして通常は省略されます)、@c
236 この後の例の多くでも省略します。@c
237 後ほど、コンテキストを指定しなければならない場合について見ていきます。
238
239 これから後のセクションでは広範囲に亘るプロパティとそれらの値を扱います
240 -- @ref{Types of properties} を参照してください。@c
241 しかしながら、このセクションではそれらのフォーマットとコマンドの使い方を示す@c
242 ために、容易に理解できる簡単なプロパティと値をいくつか使用してみるだけです。
243
244 LilyPond の基本的な表記は音符、演奏時間、それにマークアップなどの音楽要素@c
245 です。@c
246 数字、文字列、それにリストなどのもっと基本的な表記は @q{Scheme モード}
247 で処理されます -- 表記の先頭に @samp{#} を記述することでこのモードが@c
248 呼び出されます。@c
249 これらの表記は LilyPond の音楽モードでも有効な表現である場合もありますが、@c
250 このマニュアルでは一貫性を保つために常に @samp{#} を付けて記述します。@c
251 Scheme モードについての更なる情報は @rextend{LilyPond Scheme syntax}
252 を参照してください。
253
254 @code{\override} は調整で用いられる最も一般的なコマンドであり、@c
255 本章の残りの大半を使ってこのコマンドの使用例を示します。@c
256 まずは符頭の色を変更する簡単な例を挙げます:
257
258 @cindex color property, example (color プロパティの例)
259 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
260
261 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
262 c4 d
263 \override NoteHead.color = #red
264 e4 f |
265 \override NoteHead.color = #green
266 g4 a b c |
267 @end lilypond
268
269
270 @node \revert コマンド
271 @unnumberedsubsubsec @code{\revert} コマンド
272 @translationof The \revert command
273
274 @cindex revert command (revert コマンド)
275
276 @funindex \revert
277 @funindex revert
278
279 一旦オーバライドされると、そのプロパティは再度オーバライドされるか
280 @code{\revert} コマンドに遭遇するまで新しい値のままでいます。@c
281 @code{\revert} コマンドは以下の構文を持ち、@c
282 プロパティの値をオリジナルのデフォルト値に戻します。@c
283 何度か @code{\override} コマンドが発行されている場合は、@c
284 前の値に戻すわけではないということに注意してください。
285
286
287 @example
288 \revert @var{Context}.@var{LayoutObject}.@var{layout-property}
289 @end example
290
291 繰り返しますが、@code{\override} コマンドでの @var{Context} と同様に、@c
292 多くの場合で @var{Context} を記述する必要はありません。@c
293 以下の例の多くで、@var{Context} は省略されます。@c
294 ここでは、最後の 2 つの音符の符頭の色をデフォルトに戻します:
295
296 @cindex color property, example (color プロパティの例)
297 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
298
299 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
300 c4 d
301 \override NoteHead.color = #red
302 e4 f |
303 \override NoteHead.color = #green
304 g4 a
305 \revert NoteHead.color
306 b4 c |
307 @end lilypond
308
309
310 @node \once 接頭辞
311 @unnumberedsubsubsec The @code{\once} prefix
312 @translationof The \once prefix
313
314 @funindex \once
315 @funindex once
316
317 @code{\override} コマンドと @code{\set} コマンドには両方とも@c
318 接頭辞 @code{\once} が付く可能性があります。@c
319 これはその後に続く @code{\override} や @code{\set} コマンドを@c
320 その場一回限り有効にし、その後にそのプロパティの値をデフォルト値に戻します。@c
321 上と同じ例を使って、以下のように 1 つだけの音符の色を変更することができます:
322
323 @cindex color property, example (color プロパティの例)
324 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
325
326 @lilypond[quote,verbatim,relative=1]
327 c4 d
328 \override NoteHead.color = #red
329 e4 f |
330 \once \override NoteHead.color = #green
331 g4 a
332 \revert NoteHead.color
333 b c |
334 @end lilypond
335
336 @code{\once} 接頭辞をさまざまな定義済みコマンドの前に置くことで、@c
337 コマンドの効果を次の音楽タイミングに限定することもできます:
338
339 @lilypond[quote,verbatim,relative=1]
340 c4 d
341 \once \stemDown
342 e4 f |
343 g4 a
344 \once \hideNotes
345 b c |
346 @end lilypond
347
348 しかしながら、@code{\...Neutral}, @code{\...Off}, それに @code{\un...}
349 の形式の定義済みコマンドの前に @code{\once} を置いても効果はありません。@c
350 なぜなら、それらのコマンドは内部的に @code{\override} ではなく、@code{\revert}
351 を用いるためです。
352
353
354 @node \overrideProperty コマンド
355 @unnumberedsubsubsec @code{\overrideProperty} コマンド
356 @translationof The \overrideProperty command
357
358 @cindex overrideProperty command (overrideProperty コマンド)
359
360 @funindex \overrideProperty
361 @funindex overrideProperty
362
363 オーバライド コマンドには @code{\overrideProperty} という@c
364 もう 1 つのフォーマットがあり、時々必要となります。@c
365 完璧を期すためにここでこれに言及しましたが、@c
366 詳細は @rextend{Difficult tweaks} を参照してください。
367 @c Maybe explain in a later iteration  -td
368
369 @node \tweak コマンド
370 @unnumberedsubsubsec @code{\tweak} コマンド
371 @translationof The \tweak command
372
373 @cindex tweak command (tweak コマンド)
374
375 @funindex \tweak
376 @funindex tweak
377
378 利用可能な最後の調整コマンドは @code{\tweak} です。@c
379 これは同じ音楽タイミングで発生するいくつかのオブジェクトのうち、@c
380 1 つのオブジェクトだけを選択してプロパティを変更したい場合に@c
381 使用します
382 -- 例えば、和音の中にある 1 つの音符のプロパティを変更する場合です。@c
383 @code{\override} コマンドを使用すると和音の中にあるすべての音符に@c
384 影響を与えます。@c
385 一方、@code{\tweak} は入力ストリームの中でその @code{\tweak} の@c
386 すぐ後にある要素 1 つだけに影響を与えます。
387
388 ここで例を挙げます。@c
389 C メジャー コードの中にある真ん中の音符 (ミドル E) の符頭のサイズを@c
390 変更したいとします。@c
391 まず最初に、@code{\once \override} だとどうなるか見てみましょう:
392
393 @cindex font-size property, example (font-size プロパティの例)
394 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
395
396 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
397 <c e g>4
398 \once \override NoteHead.font-size = #-3
399 <c e g>4
400 <c e g>4
401 @end lilypond
402
403 このオーバライドは和音の中にある@emph{すべて}の符頭に影響を与えています。@c
404 これは和音の中にあるすべての音符が同じ @emph{タイミング} で起こるためであり、@c
405 @code{\once} のアクションは @code{\override} と同様に同じタイミングで起こる、@c
406 指定されたタイプすべてのレイアウト オブジェクトへのオーバライドに適用されます。
407
408 @code{\tweak} コマンドはこれとは異なるやり方で処理されます。@c
409 これは入力ストリームの中ですぐ後に続く要素にだけ作用します。@c
410 最もシンプルな形式の @code{\tweak} コマンドは、@c
411 コマンドの直後にある要素から直接作成されるオブジェクト
412 -- 本質的に符頭とアーティキュレーション -- にだけ効果を持ちます。@c
413
414 それでは例に戻り、この方法で和音の真ん中の音符のサイズを変更します:
415
416 @cindex font-size property, example (font-size プロパティの例)
417 @cindex @code{\tweak}, example (@code{\tweak} の例)
418
419 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
420 <c e g>4
421 <c \tweak font-size #-3 e g>4
422 @end lilypond
423
424 @code{\tweak} の構文は @code{\override} コマンドの構文とは@c
425 異なるということに注意してください。@c
426 コンテキストを指定しません -- 実際、指定するとエラーになります。@c
427 コンテキストとレイアウト オブジェクトはどちらも入力ストリームの中で@c
428 後に続く要素によって示されます。@c
429 さらに、イコール記号を使うべきではないということに注意してください。@c
430 そのため、簡単な形式の @code{\tweak} コマンドは以下のようになります:
431
432 @example
433 \tweak @var{layout-property} #@var{value}
434 @end example
435
436 さらに、@code{\tweak} コマンドは一連のアーティキュレーションの中にある@c
437 ただ 1 つのアーティキュレーションを変更されるためにも使用できます。@c
438 ここに例を挙げます:
439
440 @cindex color property, example (color プロパティの例)
441 @cindex @code{\tweak}, example (@code{\tweak} の例)
442
443 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
444 a4^"Black"
445   -\tweak color #red ^"Red"
446   -\tweak color #green _"Green"
447 @end lilypond
448
449 @noindent
450 @code{\tweak} コマンドはアーティキュレーション マークの前に配置する@c
451 必要があることに注意してください。@c
452 なぜなら、調整された表記がアーティキュレーションとして適用される必要がある@c
453 ためです。@c
454 複数の向き記号 (@code{^} または @code{_}) で上書きした場合、@c
455 最後に適用される左端の記号が勝ち残ります。
456
457 @cindex @code{\tweak}, Accidental (臨時記号に @code{\tweak} を用いる)
458 @cindex @code{\tweak}, specific layout object (レイアウト オブジェクトを指定して @code{\tweak} を用いる)
459
460 符幹や臨時記号などのオブジェクトは後になってから作成されるもので、@c
461 @code{\tweak} コマンドの後に続くイベントから直接作成されません。@c
462 そのような直接作成されないオブジェクトの場合、明示的にレイアウト
463 オブジェクト名を指定して LilyPond がそれらのオブジェクトの起源を@c
464 追跡できるようにすることで、@code{\tweak} で調整することができます:
465
466 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
467 <\tweak Accidental.color #red   cis4
468  \tweak Accidental.color #green es
469  g>
470 @end lilypond
471
472 この長い形式の @code{\tweak} コマンドは以下のように記述することができます:
473
474 @example
475 \tweak @var{layout-object}.@var{layout-property} @var{value}
476 @end example
477
478 @cindex tuplets, nested (ネストされた連符)
479 @cindex triplets, nested (ネストされた 3 連符)
480 @cindex bracket, tuplet (連符の囲み)
481 @cindex bracket, triplet (3 連符の囲み)
482 @cindex tuplet bracket (連符の囲み)
483 @cindex triplet bracket (3 連符の囲み)
484
485 @funindex TupletBracket
486
487 さらに、@code{\tweak} コマンドは、同時に起こるネストされた@c
488 連符記号のセットのうちの 1 つの見た目を変更するためにも使用されます。@c
489 以下の例では、長い連符記号と 3 つの短い連符記号のうちの最初の連符記号が@c
490 同時に起こります。@c
491 そのため、@code{\override} コマンドだと両方の連符記号に@c
492 適用されてしまいます。@c
493 この例では、@code{\tweak} は 2 つの連符記号を区別するために@c
494 使用されています。@c
495 最初の @code{\tweak} コマンドは長い連符記号を音符の上に置くことを@c
496 指定していて、2 番目の @code{\tweak} コマンドは最初の短い連符記号の数字を@c
497 赤で描くことを指定しています。
498
499 @cindex @code{\tweak}, example (@code{\tweak} の例)
500 @cindex direction property, example (direction プロパティの例)
501 @cindex color property, example (color プロパティの例)
502
503 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
504 \tweak direction #up
505 \tuplet 3/4 {
506   \tweak color #red
507   \tuplet 3/2 { c8[ c c] }
508   \tuplet 3/2 { c8[ c c] }
509   \tuplet 3/2 { c8[ c c] }
510 }
511 @end lilypond
512
513 ネストされた連符が同時に起こらない場合、それらの見た目は @code{\override}
514 コマンドを用いた通常通りの方法で変更されるかもしれません:
515
516 @cindex text property, example (text プロパティの例)
517 @cindex tuplet-number function, example (tuplet-number 関数の例)
518 @cindex transparent property, example (transparent プロパティの例)
519 @cindex TupletNumber, example of overriding (TupletNumber をオーバライドする例)
520
521 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
522 \tuplet 3/2 { c8[ c c] }
523 \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
524 \tuplet 3/2 {
525   c8[ c]
526   c8[ c]
527   \once \override TupletNumber.transparent = ##t
528   \tuplet 3/2 { c8[ c c] }
529   \tuplet 3/2 { c8[ c c] }
530 }
531 @end lilypond
532
533
534 @seealso
535 記譜法リファレンス:
536 @ruser{The tweak command}
537
538
539 @node 内部リファレンス マニュアル
540 @section 内部リファレンス マニュアル
541 @translationof The Internals Reference manual
542
543 @cindex Internals Reference (内部リファレンス)
544
545 @menu
546 * レイアウト オブジェクトのプロパティ::
547 * インタフェイスの中で見つかるプロパティ::
548 * プロパティのタイプ::
549 @end menu
550
551 @node レイアウト オブジェクトのプロパティ
552 @subsection レイアウト オブジェクトのプロパティ
553 @translationof Properties of layout objects
554
555 @cindex properties of layout objects (レイアウト オブジェクトのプロパティ)
556 @cindex properties of grobs (グラフィカル オブジェクトのプロパティ)
557 @cindex grobs, properties of (グラフィカル オブジェクトのプロパティ)
558 @cindex layout objects, properties of (レイアウト オブジェクトのプロパティ)
559 @cindex Internals Reference manual (内部リファレンス マニュアル)
560
561 あなたがスラーを楽譜に描き、@c
562 そのスラーが細すぎるためにもう少し太くしたいと思ったとします。@c
563 どうやってスラーを太くしますか?@c
564 以前に LilyPond の自由度の高さについて述べたので、@c
565 そのようなことが可能であることは知っています。@c
566 あなたはおそらく @code{\override} コマンドが必要であると推測するでしょう。@c
567 しかしながら、スラーの太さプロパティは存在するのでしょうか?@c
568 そして、それが存在するならどうやって変更するのでしょうか?@c
569 このようなことに内部リファレンス マニュアルは触れています。@c
570 内部リファレンス マニュアルには、あなたがスラーを太くするために必要な情報、@c
571 他のすべての @code{\override} コマンドを構築するために必要な情報が@c
572 含まれています。
573
574 内部リファレンスを見ていく前に一言警告です。@c
575 これは @strong{リファレンス} ドキュメントであり、@c
576 説明はほんの少しかまったく含まれていません:
577 リファレンスの目的は情報を正確に、かつ簡潔に提供することです。@c
578 そのため、内部リファレンスを一見してひるんでしまうかもしれません。@c
579 しかし、心配しないでください!@c
580 ここにあるガイダンスと説明を読めば、少し練習するだけで、@c
581 内部リファレンスから必要な情報を取り出せるようになります。
582
583 @cindex override example (オーバライドの例)
584 @cindex Internals Reference, example of using (内部リファレンスの使用例)
585 @cindex @code{\addlyrics} example (@code{\addlyrics} の例)
586
587 実際の音楽からの簡単な断片を持つ具体例を使用していきましょう:
588
589 @c Mozart, Die Zauberflöte Nr.7 Duett
590
591 @lilypond[quote,verbatim,relative=2]
592 {
593   \key es \major
594   \time 6/8
595   {
596     r4 bes8 bes[( g]) g |
597     g8[( es]) es d[( f]) as |
598     as8 g
599   }
600   \addlyrics {
601     The man who | feels love's sweet e -- | mo -- tion
602   }
603 }
604 @end lilypond
605
606 ここで、スラーをもう少し太くしようと決めたことにします。@c
607 それは可能でしょうか?@c
608 スラーは確かにレイアウト オブジェクトです。@c
609 そのため、その疑問は
610 @q{スラーに属していて、太さを制御するプロパティは存在するのか?}
611 ということになります。@c
612 その答えを得るために内部リファレンス -- 縮めて IR -- を見なければなりません。
613
614 あなたが使用しているバージョンの LilyPond のための内部リファレンスは
615 LilyPond ウェブサイト @uref{http://lilypond.org} で見つかるでしょう。@c
616 ドキュメント ページに行き、内部リファレンスへのリンクをクリックしてください。@c
617 学習目的のためには標準の HTML バージョンを使うべきであり、@c
618 @q{1 つの大きなページ} や PDF を使うべきではありません。@c
619 次の数段落を読めば、あなたが内部リファレンスを読むときに@c
620 実際にすべきことがわかるでしょう。
621
622 内部リファレンスの @strong{トップ ページ} 下には 5 つのリンクがあります。@c
623 @emph{Backend} へのリンクを選択してください。@c
624 そこにはレイアウト オブジェクトについての情報があります。@c
625 @strong{Backend} 下にある @emph{All layout objects} へのリンクを@c
626 選択してください。@c
627 そのページには、あなたが使用しているバージョンの LilyPond で使用される@c
628 すべてのレイアウト オブジェクトがアルファベット順で@c
629 リストアップされています。@c
630 Slur へのリンクを選択すると、Slur のプロパティがリスト アップされます。
631
632 記譜法リファレンスからこのページを見つける方法もあります。@c
633 スラーについて扱っているページで、内部リファレンスへのリンクが@c
634 見つかるかもしれません。@c
635 このリンクでこのページに直接行くことができます。@c
636 しかしながら、あなたが調整するレイアウト オブジェクトの名前を@c
637 想像できる場合は、すぐに内部リファレンスに行ってそこで探す方が簡単です。
638
639 内部リファレンスの Slur ページでは、まず Slur オブジェクトは
640 @code{Slur_engraver} によって作成されるということが述べられています。@c
641 それから、標準設定がリストアップされています。@c
642 スラーの太さを制御していそうなプロパティを探してブラウザをスクロール ダウン@c
643 させていくと、以下が見つかります:
644
645 @example
646 @code{thickness} (number)
647      @code{1.2}
648      Line thickness, generally measured in @code{line-thickness}
649 @end example
650
651 これが太さを変更するプロパティのようです。@c
652 @code{thickness} の値は @emph{数} であり、デフォルト値は 1.2、@c
653 この値は他のプロパティでは @code{line-thickness} と@c
654 呼ばれるということがわかります。
655
656 前にも言ったように、内部リファレンスには説明がほとんど、@c
657 あるいはまったくありません。@c
658 しかしながら、すでにスラーの太さを変えるための十分な情報を持っています。@c
659 レイアウト オブジェクトの名前は @code{Slur} であり、@c
660 変更するプロパティの名前は @code{thickness} であり、@c
661 スラーをもっと太くするには新しい値を 1.2 よりも大きくすべきであることが@c
662 わかります。
663
664 今度は、レイアウト オブジェクト名で見つけた値を置き換えることによって
665 @code{\override} コマンドを構築することができます。@c
666 コンテキストは省略します。@c
667 最初は太さに非常に大きな値を割り当ててみます。@c
668 それによって、そのコマンドが確かに機能していることを確かめることができます。@c
669 実行するコマンドは以下のようになります:
670
671 @example
672 \override Slur.thickness = #5.0
673 @end example
674
675 新しい値の前に @code{#} を付けることを忘れないでください!
676
677 最後の疑問は @q{このコマンドをどこに置くべきか?} ということです。@c
678 そのことについて不確かであり、学んでいる最中であるのならば、@c
679 ベストな答えはこうです @q{音楽表記の内部で、最初のスラーの直前}。@c
680 ではやってみましょう:
681
682 @cindex Slur example of overriding (Slur をオーバライドする例)
683 @cindex thickness property, example (thickness プロパティの例)
684
685 @lilypond[quote,verbatim,relative=2]
686 {
687   \key es \major
688   \time 6/8
689   {
690     % Increase thickness of all following slurs from 1.2 to 5.0
691     \override Slur.thickness = #5.0
692     r4 bes8 bes[( g]) g |
693     g8[( es]) es d[( f]) as |
694     as8 g
695   }
696   \addlyrics {
697     The man who | feels love's sweet e -- | mo -- tion
698   }
699 }
700 @end lilypond
701
702 @noindent
703 確かにスラーが太くなっています。
704
705 これが @code{\override} コマンドを構築する基本的な方法です。@c
706 これより後のセクションで遭遇するものはもう少し複雑ですが、@c
707 必要な要点はすべて知っています
708 -- しかしながら、まだ練習が必要でしょう。@c
709 これは以下の例で提供されます。
710
711 @subsubsubheading コンテキストを見つけ出す
712
713 @cindex context, finding (コンテキストを見つけ出す)
714 @cindex context, identifying correct (正しいコンテキストを特定する)
715
716 しかしながら、まず最初にコンテキストを指定しなければならないとしたら@c
717 どうでしょうか?@c
718 指定すべきコンテキストは何でしょうか?@c
719 スラーとボイスは音楽表記の各行で明らかに関係が深いので、@c
720 スラーは @code{Voice} コンテキストの中にあると推測できるかもしれません。@c
721 しかし、それは確かでしょうか?@c
722 この問題を解決するには、Slur について記述している内部リファレンス ページの@c
723 先頭に戻ります。@c
724 そこには @q{Slur オブジェクトは Slur エングラーバによって作成される} と@c
725 書かれています。@c
726 そのため、スラーは @code{Slur_engraver} が存在しているコンテキストの@c
727 どれかで作成されるということになります。@c
728 @code{Slur_engraver} へのリンクを辿ります。@c
729 そのページの最後の方で @code{Slur_engraver} は 7 つのボイス コンテキスト
730 -- 標準のボイス コンテキストである @code{Voice} を含む
731 -- の一部であることが述べられています。@c
732 ですから、推測は正しかったのです。@c
733 そして、@code{Voice} は最下位のコンテキストの 1 つである
734 -- このことは、そこに音符を入力するという事実によって明らかに示されています
735 -- ため、ここではそのコンテキストを省略することができるのです。
736
737 @subsubsubheading 1 回だけオーバライドする
738
739 @cindex overriding once only (一度だけオーバライドする)
740 @cindex once override (一度だけオーバライドする)
741
742 @funindex \once
743 @funindex once
744
745 上記の最後の例では @emph{すべて} のスラーが太くなっています。@c
746 しかし、最初のスラーだけを太くしたい場合はどうでしょうか?@c
747 これは @code{\once} コマンドを使うことによって達成されます。@c
748 @code{\override} コマンドの直前に @code{\once} コマンドを@c
749 置くことによって、@code{\override} コマンドは @strong{直後にある} 音符から@c
750 始まるスラーだけを変更するようになります。@c
751 直後にある音符がスラーの開始点ではない場合、そのコマンドはまったく機能しません
752 -- それがスラーに遭遇するまで保持されるということはなく、@c
753 ただ切り捨てられるだけです。@c
754 そのため、@code{\once} コマンド付きの @code{\override} コマンドは@c
755 以下のように上記の例とは異なる場所に置かなくてはなりません:
756
757 @cindex Slur, example of overriding (Slur をオーバライドする例)
758 @cindex thickness property, example (thickness プロパティの例)
759
760 @c KEEP LY
761 @lilypond[quote,verbatim,relative=2]
762 {
763   \key es \major
764   \time 6/8
765   {
766     r4 bes8
767     % 直後にあるスラーのみを太くします
768     \once \override Slur.thickness = #5.0
769     bes8[( g]) g |
770     g8[( es]) es d[( f]) as |
771     as8 g
772   }
773   \addlyrics {
774     The man who | feels love's sweet e -- | mo -- tion
775   }
776 }
777 @end lilypond
778
779 @noindent
780 今度は、最初のスラーだけが太くなりました。
781
782 @code{\once} コマンドは @code{\set} コマンドの前でも使用される可能性があります。
783
784 @subsubsubheading 元に戻す
785
786 @cindex revert (元に戻す)
787 @cindex default properties, reverting to (デフォルトのプロパティに戻す)
788
789 @funindex \revert
790 @funindex revert
791
792 最後に、最初の 2 つだけのスラーを太くしたい場合はどうでしょうか?@c
793 その場合、2 つのコマンド -- それぞれの前に @code{\once} を付けた --
794 をスラーが始まる音符の直前に置きます:
795
796 @cindex Slur, example of overriding (Slur をオーバライドする例)
797 @cindex thickness property, example (thickness プロパティの例)
798
799 @c KEEP LY
800 @lilypond[quote,verbatim,relative=2]
801 {
802   \key es \major
803   \time 6/8
804   {
805     r4 bes8
806     % 直後にあるスラーのみを太くします
807     \once \override Slur.thickness = #5.0
808     bes[( g]) g |
809     % 直後にあるスラーのみを太くします
810     \once \override Slur.thickness = #5.0
811     g8[( es]) es d[( f]) as |
812     as8 g
813   }
814   \addlyrics {
815     The man who | feels love's sweet e -- | mo -- tion
816   }
817 }
818 @end lilypond
819
820 @noindent
821 あるいは、@code{\once} コマンドを省略して、2 番目のスラーの後に
822 @code{thickness} プロパティをデフォルト値に戻すために
823 @code{\revert} コマンドを使うこともできます:
824
825 @cindex Slur, example of overriding (Slur をオーバライドする例)
826 @cindex thickness property, example (thickness プロパティの例)
827
828 @c KEEP LY
829 @lilypond[quote,verbatim,relative=2]
830 {
831   \key es \major
832   \time 6/8
833   {
834     r4 bes8
835     % 以後のスラーの太さを 1.2 から 5.0 に増やします
836     \override Slur.thickness = #5.0
837     bes[( g]) g |
838     g8[( es]) es
839     % 以後のスラーの太さをデフォルトの 1.2 に戻します
840     \revert Slur.thickness
841     d8[( f]) as |
842     as8 g
843   }
844   \addlyrics {
845     The man who | feels love's sweet e -- | mo -- tion
846   }
847 }
848 @end lilypond
849
850 @noindent
851 @code{\revert} コマンドは @code{\override} コマンドで@c
852 変更されたどのプロパティでもデフォルト値に戻すことができます。@c
853 状況に相応しい方を使用してください。
854
855 これで内部リファレンスと調整の基本的な方法についての紹介を終わりにします。@c
856 この章で後に続くセクションの中にあるいくつのかの例でも一部では、@c
857 内部リファレンスの特徴についての追加の紹介や、そこから情報を取り出すための@c
858 更なる練習を提供します。@c
859 それらの例ではガイダンスや説明のための言葉はずっと少ないでしょう。
860
861
862 @node インタフェイスの中で見つかるプロパティ
863 @subsection インタフェイスの中で見つかるプロパティ
864 @translationof Properties found in interfaces
865
866 @cindex interface (インタフェイス)
867 @cindex interface properties (インタフェイス プロパティ)
868 @cindex properties in interfaces (インタフェイス内のプロパティ)
869
870 今度は歌詞をイタリック体で譜刻したいということにします。@c
871 そうするには @code{\override} コマンドをどのように使う必要があるのでしょうか?@c
872 以前と同様に、まず @q{すべてのレイアウト オブジェクト} をリストアップしている@c
873 内部リファレンス ページを開き、歌詞をコントロールしていそうなオブジェクトを@c
874 探します。@c
875 @code{LyricText} がそれであるようです。@c
876 これをクリックすると、歌詞のテキストに対してセットすることができる@c
877 プロパティが表示されます。@c
878 そこには @code{font-series} と @code{font-size} が含まれますが、@c
879 歌詞をイタリック体にするためのプロパティらしきものはありません。@c
880 これは、形に関するプロパティはすべてのフォント オブジェクトに共通なもの@c
881 であり、そのため、各レイアウト オブジェクトに含まれているのではなく、@c
882 他の同様な共通プロパティと一緒にグループ化されていて、@c
883 @strong{インタフェイス} の 1 つ @code{font-interface} の中に@c
884 置かれているからです。
885
886 そのため、インタフェイスのプロパティを見つける方法と、どのオブジェクトが@c
887 これらのインタフェイス プロパティを使うのかを調べる方法を学ぶ必要があります。
888
889 @code{LyricText} について記述している内部リファレンスのページを@c
890 再び開いてください。@c
891 そのページの最後に @code{LyricText} がサポートするインタフェイスへのリンクが@c
892 リスト アップされています。@c
893 そのリストには @code{font-interface} を含むいくつかの要素があります。@c
894 このリンクをクリックすると、このインタフェイスに@c
895 関連付けされているプロパティのところに行きます。@c
896 これらのプロパティは @code{LyricText} を含む @code{font-interface} を@c
897 サポートするすべてのオブジェクトのプロパティでもあります。
898
899 @code{font-shape(symbol)} を含むフォントを制御するユーザが@c
900 設定可能なプロパティをすべて見つけました。@c
901 @code{font-shape(symbol)} では @code{symbol} を @code{upright},
902 @code{italics}, あるいは @code{caps} にセットすることができます。
903
904 そこには、@code{font-series} と @code{font-size} もリスト アップされている@c
905 ことに気づくでしょう。@c
906 そこで次のような疑問が湧いてきます:
907 共通フォントプロパティ @code{font-series} と @code{font-size} は
908 @code{LyricText} とインタフェイス @code{font-interface} の両方で@c
909 リスト アップされているのに、なぜ @code{font-shape} はそうでないのか?@c
910 その答えは、@code{font-series} と @code{font-size} は、@c
911 @code{LyricText} オブジェクトが作成されるときに、@c
912 それらのグローバルなデフォルト値から変更されるのに対して、@c
913 @code{font-shape} はそうではないからです。@c
914 @code{LyricText} の中にあるエントリから @code{LyricText} に適用される@c
915 それら 2 つのプロパティの値がわかります。@c
916 @code{font-interface} をサポートする他のオブジェクトは、@c
917 それらのオブジェクトが作成されるときに、@c
918 それらのプロパティを異なる値にセットします。
919
920 今度は歌詞をイタリック体に変更するように @code{\override} コマンドを@c
921 構築できるかどうかを見ていきましょう。@c
922 オブジェクトは @code{LyricText} であり、@c
923 プロパティは @code{font-shape} であり、セットする値は @code{italic} です。@c
924 前と同様に、コンテキストを省略します。
925
926 話は逸れますが重要なことを 1 つ挙げます。@c
927 プロパティには値としてシンボル (例えば @code{italic}) を取るものがあります。@c
928 シンボルの前にはアポストロフィ @code{'} を置く必要があり、そうすることで内部的に
929 LilyPond に読み込まれます。@c
930 任意のテキスト文字列との違い -- 任意のテキスト文字列は @code{"a text string"}
931 のような形で表記されます -- に注意してください。@c
932 シンボルと文字列についてのより詳細な説明は@rextend{Scheme tutorial}
933 を参照してください。
934
935 さて、それでは歌詞をイタリック体で譜刻するために必要となる
936 @code{\override} コマンドは以下のようになります:
937
938 @example
939 \override LyricText.font-shape = #'italic
940 @end example
941
942 @noindent
943 そして、これは以下のように影響を与える歌詞の前に、そして近くに置くべきです:
944
945 @cindex font-shape property, example (font-shape プロパティの例)
946 @cindex italic, example (italic の例)
947 @cindex LyricText, example of overriding (Lyric をオーバライドする例)
948 @cindex @code{\addlyrics}, example (@code{\addlyrics} の例)
949
950 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
951 {
952   \key es \major
953   \time 6/8
954   {
955     r4 bes8 bes[( g]) g |
956     g8[( es]) es d[( f]) as |
957     as8 g
958   }
959   \addlyrics {
960     \override LyricText.font-shape = #'italic
961     The man who | feels love's sweet e -- | mo -- tion
962   }
963 }
964 @end lilypond
965
966 @noindent
967 これで歌詞がすべてイタリック体で譜刻されました。
968
969 @warning{歌詞の中では、最後の音節と終端の波括弧の間に常にスペースを@c
970 置いてください。}
971
972
973 @seealso
974 拡張: @rextend{Scheme tutorial}
975
976
977 @node プロパティのタイプ
978 @subsection プロパティのタイプ
979 @translationof Types of properties
980
981 @cindex property types (プロパティ タイプ)
982
983 これまでにプロパティのタイプを 2 つ見てきました:
984 @code{number} と @code{symbol} です。@c
985 プロパティに与える値が有効であるためには、その値は正しいタイプであり、@c
986 そのタイプのルールに従っていなければなりません。@c
987 プロパティのタイプは内部リファレンスの中で常にプロパティ名の後の括弧の中に@c
988 表示されています。@c
989 ここに、あなたが必要になるであろうプロパティのタイプを、@c
990 そのタイプのルールといくつかの例と共にリスト アップします。@c
991 @code{\override} コマンドの中でプロパティの値を入力する時は、@c
992 当然、常にそれらの値の前にハッシュ記号 @code{#} を付け加える必要があります
993 -- 例え、その値自体が @code{#} で始まっていたとしても付け加える必要があり@c
994 ます。@c
995 ここでは定数の例だけを示します: Scheme を用いて値の計算をしたいのであれば、@c
996 @rextend{Calculations in Scheme} を参照してください。
997
998 @multitable @columnfractions .2 .45 .35
999 @headitem プロパティ タイプ
1000   @tab 規則
1001   @tab 例
1002 @item Boolean
1003   @tab 真か偽のどちらかで、それぞれ #t と #f で表されます
1004   @tab @code{#t}, @code{#f}
1005 @item Dimension (譜スペース)
1006   @tab 小数 (譜スペース単位)
1007   @tab @code{2.5}, @code{0.34}
1008 @item Direction
1009   @tab 向きを表す有効な定数またはそれと等価な数値 (-1 から 1 までの小数が@c
1010 許可されます)
1011   @tab @code{LEFT}, @code{CENTER}, @code{UP},
1012        @code{1}, @w{@code{-1}}
1013 @item Integer
1014   @tab 整数
1015   @tab @code{3}, @code{-1}
1016 @item List
1017   @tab 一連の定数またはシンボル。@c
1018   スペースで区切られ、前にアポストロフィが付いた括弧で囲まれます
1019   @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
1020        @code{'(1.0 0.25 0.5)}
1021 @item Markup
1022   @tab 有効なマークアップ
1023   @tab @code{\markup @{ \italic "cresc." @}}
1024 @item Moment
1025   @tab make-moment 関数で構築される全音符の分数
1026   @tab @code{(ly:make-moment 1/4)},
1027        @code{(ly:make-moment 3/8)}
1028 @item Number
1029   @tab 正または負の小数
1030   @tab @code{3.5}, @w{@code{-2.45}}
1031 @item (数の) Pair
1032   @tab @q{スペース . スペース} で区切られ、前にアポストロフィが付いた括弧で@c
1033 囲まれた 2 つの数値
1034   @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1035 @item Symbol
1036   @tab プロパティに許可されているシンボルのセットのいずれかであり、@c
1037 前にアポロストロフィを付けます
1038   @tab @code{'italic}, @code{'inside}
1039 @item Unknown
1040   @tab 手続き。何のアクションも起こさない場合は @code{#f}
1041   @tab @code{bend::print}, @code{ly:text-interface::print},
1042        @code{#f}
1043 @item Vector
1044   @tab @code{#(}@dots{}@code{)} で囲まれたいくつかの定数
1045   @tab @code{#(#t #t #f)}
1046 @end multitable
1047
1048
1049 @seealso
1050 拡張: @rextend{Scheme tutorial}
1051
1052
1053 @node オブジェクトの見た目
1054 @section オブジェクトの見た目
1055 @translationof Appearance of objects
1056
1057 いくつかの例を使ってこれまでに学んだことを練習して、譜刻される楽譜の見た目を@c
1058 変更するためにどのように調整が使われるのかを見ていきましょう。
1059
1060 @menu
1061 * オブジェクトの可視性と色::
1062 * オブジェクトのサイズ::
1063 * オブジェクトの長さと太さ::
1064 @end menu
1065
1066
1067 @node オブジェクトの可視性と色
1068 @subsection オブジェクトの可視性と色
1069 @translationof Visibility and color of objects
1070
1071 教育目的の楽譜では、ある要素を省略した楽譜を譜刻して、@c
1072 学生にそれを付け足させるという訓練にしたいと思うかもしれません。@c
1073 簡単な例として、その訓練とは小節線の無い楽譜だと仮定してみましょう。@c
1074 しかしながら、通常、小節線は自動的に挿入されます。@c
1075 どうやって小節線が譜刻されることを防ぐのでしょうか?
1076
1077 このことに挑戦する前に、オブジェクト プロパティは @emph{インタフェイス} と@c
1078 呼ばれるものにグループ化されているということを思い出してください
1079 -- @ref{インタフェイスの中で見つかるプロパティ} を参照してください。@c
1080 これはあるグラフィカル オブジェクトを調整するために一緒に@c
1081 使用されるかもしれないプロパティをグループ化したものです
1082 -- あるオブジェクトに対してインタフェイス内のプロパティの 1 つを使うことが@c
1083 許可されるのなら、他のプロパティも許可されます。@c
1084 あるオブジェクトはいくつかのインタフェイス内にあるプロパティを使用し、@c
1085 別のオブジェクトはそれとは別のインタフェイス内にあるプロパティを使用します。@c
1086 ある特定のグラフィカルオブジェクトによって使用されるプロパティを保持している@c
1087 インタフェイスは、そのグラフィカル オブジェクトについて記述している@c
1088 内部リファレンス ページの最後にリスト アップされていて、@c
1089 それらのプロパティはそれらのインタフェイスを参照することによって閲覧できます。
1090
1091 グラフィカル オブジェクトについての情報を見つけ出す方法を
1092 @ref{レイアウト オブジェクトのプロパティ} で説明しました。@c
1093 同じアプローチを使って、内部リファレンスで小節線を@c
1094 譜刻するレイアウト オブジェクトを見つけ出します。@c
1095 @emph{Backend} を経由して @emph{All layout objects} に行くと、@c
1096 そこに @code{BarLine} と呼ばれる@c
1097 レイアウト オブジェクトがあることがわかります。@c
1098 そのレイアウト オブジェクトのプロパティには小節線の可視性をコントロールする
1099 2 つのプロパティが含まれています: @c
1100 @code{break-visibility} と @code{stencil} です。@c
1101 さらに、@code{BarLine} はインタフェイスのいくつかをサポートしています。@c
1102 @code{grob-interface} もサポートされていて、@c
1103 そこには @code{transparent} プロパティと @code{color} プロパティが@c
1104 含まれています。@c
1105 これらすべてが小節線の可視性に影響を与えます (そしてもちろん、@c
1106 拡大解釈すれば他の多くのレイアウト オブジェクトにも影響を与えます)。@c
1107 次はこれらのプロパティをそれぞれ見ていきましょう。
1108
1109 @menu
1110 * stencil プロパティ::
1111 * break-visibility プロパティ::
1112 * transparent プロパティ::
1113 * color プロパティ::
1114 @end menu
1115
1116
1117 @node stencil プロパティ
1118 @unnumberedsubsubsec @code{stencil} プロパティ
1119 @translationof The stencil property
1120
1121 @cindex stencil property (stencil プロパティ)
1122
1123 このプロパティは譜刻すべきシンボル (図柄) を指定することによって@c
1124 小節線の見た目を制御します。@c
1125 他の多くのプロパティでも共通に言えますが、このプロパティの値に
1126 @code{#f} をセットすることによって何も譜刻させなくすることができます。@c
1127 ではやってみましょう。@c
1128 以前と同様に、暗黙のコンテキスト @code{Voice} は省略します:
1129
1130 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1131 @cindex stencil property, example (stencil プロパティの例)
1132
1133 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1134 {
1135   \time 12/16
1136   \override BarLine.stencil = ##f
1137   c4 b8 c d16 c d8 |
1138   g,8 a16 b8 c d4 e16 |
1139   e8
1140 }
1141 @end lilypond
1142
1143 小節線はまだ譜刻されています。@c
1144 何が間違っているのでしょうか?@c
1145 内部リファレンスに戻って、@code{BarLine} のプロパティを記述しているページを@c
1146 読み返してください。@c
1147 そのページの先頭に
1148 @qq{BarLine オブジェクトは Bar_engraver によって作成されます} と@c
1149 記述されています。@c
1150 @code{Bar_engraver} ページに行ってください。@c
1151 そのページの最後で、@code{Bar_engraver} を保持するコンテキストが@c
1152 リスト アップされています。@c
1153 それらのコンテキストのタイプはすべて @code{Staff} です。@c
1154 ですから、@code{\override} コマンドが予期したように機能しなかったのは、@c
1155 @code{BarLine} はデフォルトの @code{Voice} コンテキストの中には@c
1156 いなかったからなのです。@c
1157 コンテキストが間違って指定された場合、そのコマンドは機能しません。@c
1158 エラー メッセージは生成されず、ログ ファイルには何もログが残りません。@c
1159 正しいコンテキストを付け加えることによってコマンドを修正してみましょう:
1160
1161 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1162 @cindex stencil property, example (stencil プロパティの例)
1163
1164 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1165 {
1166   \time 12/16
1167   \override Staff.BarLine.stencil = ##f
1168   c4 b8 c d16 c d8 |
1169   g,8 a16 b8 c d4 e16 |
1170   e8
1171 }
1172 @end lilypond
1173
1174 今度は小節線が消えました。@c
1175 @code{stencil} プロパティに @code{#f} をセットする操作は頻繁に行うので、@c
1176 短くしたコマンド @code{\omit} が用意されています:
1177 @funindex \omit
1178
1179 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1180 {
1181   \time 12/16
1182   \omit Staff.BarLine
1183   c4 b8 c d16 c d8 |
1184   g,8 a16 b8 c d4 e16 |
1185   e8
1186 }
1187 @end lilypond
1188
1189 しかしながら、@code{stencil} プロパティを @code{#f} にセットするのではなく、@c
1190 オブジェクトの大きさを修正する必要があるオブジェクトも存在するということに@c
1191 注意してください。@c
1192 そのようなオブジェクトの @code{stencil} プロパティを @code{#f} にセットすると@c
1193 エラーになります。
1194 例えば、@code{NoteHead} オブジェクトの @code{stencil} プロパティを
1195 @code{#f} にセットするとエラーになります。@c
1196 この場合、@code{point-stencil} を使ってサイズが 0 のステンシル (型、型紙) を@c
1197 オブジェクトにセットします:
1198
1199 @lilypond[quote,verbatim,relative=2]
1200 {
1201   c4 c
1202   \once \override NoteHead.stencil = #point-stencil
1203   c4 c
1204 }
1205 @end lilypond
1206
1207
1208 @node break-visibility プロパティ
1209 @unnumberedsubsubsec @code{break-visibility} property
1210 @translationof The break-visibility property
1211
1212 @cindex break-visibility property (break-visibility プロパティ)
1213
1214 内部リファレンスの @code{BarLine} のプロパティから
1215 @code{break-visibility} プロパティには 3 つのブール値からなるベクトルが@c
1216 必要であることがわかります。@c
1217 これらはそれぞれ、小節線が行の最後、行の途中、行の最初に譜刻されるかどうかを@c
1218 制御します。@c
1219 以下の例ではすべての小節線を消したいので、必要となる値は
1220 @code{#(#f #f #f)} です
1221 (同じ結果を @code{all-invisible} でも得ることができます)。@c
1222 それではやってみましょう。@c
1223 @code{Staff} コンテキストを含めることを忘れないでください。@c
1224 また、この値を書くときに括弧を始める前に @code{##} を@c
1225 付ける必要があることにも注意してください。@c
1226 @code{#} の 1 つはベクトルを導入するときに値の一部として必要とされ、@c
1227 先頭の @code{#} は @code{\override} コマンドの中で常に値の前に@c
1228 置くことが必要とされます。
1229
1230 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1231 @cindex break-visibility property, example (break-visibility プロパティの例)
1232
1233 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1234 {
1235   \time 12/16
1236   \override Staff.BarLine.break-visibility = ##(#f #f #f)
1237   c4 b8 c d16 c d8 |
1238   g,8 a16 b8 c d4 e16 |
1239   e8
1240 }
1241 @end lilypond
1242
1243 今度もすべての小節線が消えました。
1244
1245
1246 @node transparent プロパティ
1247 @unnumberedsubsubsec @code{transparent} プロパティ
1248 @translationof The transparent property
1249
1250 @cindex transparent property (transparent プロパティ)
1251 @cindex transparency (透明性)
1252
1253 内部リファレンスの @code{grob-interface} ページにあるプロパティから
1254 @code{transparent} プロパティはブール値であることがわかります。@c
1255 これはグラフィカル オブジェクトを透明にする場合には @code{#t} に@c
1256 セットします。@c
1257 次の例では、小節線ではなく拍子記号を不可視にしてみましょう。@c
1258 そうするには、まず、拍子記号のグラフィカル オブジェクト名を@c
1259 見つける必要があります。@c
1260 @code{TimeSignature} レイアウト オブジェクトのプロパティを見つけるために@c
1261 内部リファレンスの @q{すべてのレイアウト オブジェクト} ページに@c
1262 戻ってください。@c
1263 @code{TimeSigunature} は @code{Time_signature_engraver} によって作り出され、@c
1264 さらに、@code{Time_signature_engraver} は @code{Staff} コンテキストに含まれ、@c
1265 さらに、@code{Staff} コンテキストは @code{grob-interface} を@c
1266 サポートしているということがわかります。@c
1267 そのため、拍子記号を透明にするためのコマンドは以下のようになります:
1268
1269 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1270 @cindex transparent property, example (transparent プロパティの例)
1271
1272 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1273 {
1274   \time 12/16
1275   \override Staff.TimeSignature.transparent = ##t
1276   c4 b8 c d16 c d8 |
1277   g,8 a16 b8 c d4 e16 |
1278   e8
1279 }
1280 @end lilypond
1281
1282 @noindent
1283 @code{transparent} プロパティに @code{#t} をセットする操作も頻繁に行うので、@c
1284 短くしたコマンド @code{\hide} が用意されています:
1285 @funindex \hide
1286
1287 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1288 {
1289   \time 12/16
1290   \hide Staff.TimeSignature
1291   c4 b8 c d16 c d8 |
1292   g,8 a16 b8 c d4 e16 |
1293   e8
1294 }
1295 @end lilypond
1296
1297 @noindent
1298 どちらの場合でも拍子記号は消えました。@c
1299 しかしながら、このコマンドは拍子記号があるべき場所に隙間を残しています。@c
1300 たぶん、これは学生がその部分を埋めるための練習としては望ましいでしょうが、@c
1301 他の状況ではこの隙間は望ましくありません。@c
1302 この隙間を取り除くには、拍子記号の @code{transparent} の代わりに@c
1303 ステンシル (型、型紙) を @code{#f} にセットします:
1304
1305 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1306 @cindex stencil property, example (stencil プロパティの例)
1307
1308 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1309 {
1310   \time 12/16
1311   \omit Staff.TimeSignature
1312   c4 b8 c d16 c d8 |
1313   g,8 a16 b8 c d4 e16 |
1314   e8
1315 }
1316 @end lilypond
1317
1318 @noindent
1319 違いは明白です: ステンシルを @code{#f} にセットする
1320 (@code{\omit} を用いることもできます) と、オブジェクト自体が削除されます。@c
1321 一方、オブジェクトを @code{transparent} (透明) にする
1322 (@code{\hide} を用いることもできます)とそのオブジェクトは消えますが、@c
1323 オブジェクトは不可視になっただけです。
1324
1325 @subheading 色 (color)
1326
1327 @node color プロパティ
1328 @unnumberedsubsubsec @code{color} プロパティ
1329 @translationof The color property
1330
1331 最後に、小節線の色を白にすることによって小節線を不可視にしてみましょう。@c
1332 (これには白い小節線が譜線と交差したところで@c
1333 譜線を見えたり見えなくしてしまうかもしれないという問題があります。@c
1334 以下のいくつかの例で、このことを予測することはできないと思うかもしれません。@c
1335 そうなる理由と、それを制御する方法についての詳細は、@c
1336 @ruser{Painting objects white} でカバーされています。@c
1337 しかしここでは色について学んでいるところなので、@c
1338 オブジェクトを白で描くことの限界を受け入れるだけにしてください。)
1339
1340 @code{grob-interface} はカラー プロパティの値はリストであると指定しています。@c
1341 しかしながら、そのリストが何であるべきなのかの説明はありません。@c
1342 カラー プロパティで必要とされるリストは実際のところ内部ユニットの中にある@c
1343 値のリストです。@c
1344 しかし、内部ユニットの中にある値を知らなくても済むように、@c
1345 カラーを指定するための手段がいくつか用意されています。@c
1346 最初の方法は @ruser{List of colors} にある最初の表でリスト アップされている
1347 @q{標準} のカラーの 1 つを使用する方法です。@c
1348 小節線を白にするには以下のように記述します:
1349
1350 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1351 @cindex color property, example (color プロパティの例)
1352
1353 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1354 {
1355   \time 12/16
1356   \override Staff.BarLine.color = #white
1357   c4 b8 c d16 c d8 |
1358   g,8 a16 b8 c d4 e16 |
1359   e8
1360 }
1361 @end lilypond
1362
1363 @noindent
1364 今度も再び小節線は見えなくなりました。@c
1365 @emph{white} の前にアポストロフィは付かないということに注意してください
1366 -- これはシンボルではなく@emph{変数}です。@c
1367 この変数は評価される時、小節線の色を白にセットするのに必要な内部的な値の@c
1368 リストを提供します。@c
1369 標準カラー リストにある他のカラーもまた変数です。@c
1370 小節線の色をこのリストの中にある他の変数に変更することで、@c
1371 これが機能することをあなた自身で納得できます。
1372
1373 @cindex color, X11 (X11 カラー)
1374 @cindex X11 colors (X11 カラー)
1375
1376 @funindex x11-color
1377
1378 カラーを変えるための 2 つ目の方法は、@ruser{List of colors} の
1379 2 番目のリストの中にある X11 カラー名のリストを使用する方法です。@c
1380 しかしながら、X11 カラー名は関数 @code{x11-color} によって実際の値に@c
1381 マッピングされます。@c
1382 @code{x11-color} は以下のように X11 カラー シンボルを内部値のリストに@c
1383 変換します:
1384
1385 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1386 @cindex color property, example (color プロパティの例)
1387
1388 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1389 {
1390   \time 12/16
1391   \override Staff.BarLine.color = #(x11-color 'white)
1392   c4 b8 c d16 c d8 |
1393   g,8 a16 b8 c d4 e16 |
1394   e8
1395 }
1396 @end lilypond
1397
1398 @noindent
1399 この場合、関数 @code{x11-color} はシンボルを引数として扱うので、@c
1400 変数として評価されないようシンボルの前にアポストロフィを付ける必要があり、@c
1401 関数呼び出し全体を括弧で囲む必要があるということに注意してください。
1402
1403 @cindex rgb colors (RGB カラー)
1404 @cindex color, rgb (RGB カラー)
1405
1406 @funindex rgb-color
1407
1408 もう 1 つ関数があります。@c
1409 RGB 値を内部カラーに変換する @code{rgb-color} 関数です。@c
1410 この関数は赤、緑、青の輝度を表す 3 つの引数をとります。@c
1411 これらの引数は 0 から 1 までの値をとります。@c
1412 ですから、カラーを赤にセットする場合の値は @code{(rgb-color 1 0 0)} となり、@c
1413 白の場合は @code{(rgb-color 1 1 1)} となります:
1414
1415 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1416 @cindex color property, example (color プロパティの例)
1417
1418 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1419 {
1420   \time 12/16
1421   \override Staff.BarLine.color = #(rgb-color 1 1 1)
1422   c4 b8 c d16 c d8 |
1423   g,8 a16 b8 c d4 e16 |
1424   e8
1425 }
1426 @end lilypond
1427
1428 最後に、X11 カラー セットの一部であるグレー スケールを用いる方法もあります。@c
1429 グレー スケールの範囲は黒 @code{'grey0} から白 @code{'grey100} まで
1430 1 段階ずつあります。@c
1431 グレー スケールの使用方法を示すために、@c
1432 例の中にあるすべてのレイアウト オブジェクトのカラーをさまざまな濃度の@c
1433 グレーにセットしてみましょう:
1434
1435 @cindex StaffSymbol, example of overriding (StaffSymbol をオーバライドする例)
1436 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1437 @cindex Clef, example of overriding (Clef をオーバライドする例)
1438 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
1439 @cindex Stem, example of overriding (Stem をオーバライドする例)
1440 @cindex BarLine, example of overriding (BarLine をオーバライドする例)
1441 @cindex color property, example (color プロパティの例)
1442 @cindex x11-color, example of using (x11-color の使用例)
1443
1444 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1445 {
1446   \time 12/16
1447   \override Staff.StaffSymbol.color = #(x11-color 'grey30)
1448   \override Staff.TimeSignature.color = #(x11-color 'grey60)
1449   \override Staff.Clef.color = #(x11-color 'grey60)
1450   \override Voice.NoteHead.color = #(x11-color 'grey85)
1451   \override Voice.Stem.color = #(x11-color 'grey85)
1452   \override Staff.BarLine.color = #(x11-color 'grey10)
1453   c4 b8 c d16 c d8 |
1454   g,8 a16 b8 c d4 e16 |
1455   e8
1456 }
1457 @end lilypond
1458
1459 @noindent
1460 各レイアウト オブジェクトに関連付けされているコンテキストに注意してください。@c
1461 これらのコンテキストを正しく取得することが重要であり、@c
1462 そうしなければコマンドは機能しません!@c
1463 コンテキストの中には特定のエングラーバが置かれているということを@c
1464 忘れないでください。@c
1465 エングラーバに対するデフォルト コンテキストを見つけ出すには、@c
1466 内部リファレンスのレイアウト オブジェクトからスタートして、@c
1467 そこからそれを作り出すエングラーバのページに行きます。@c
1468 エングラーバのページには、@c
1469 通常はどのコンテキストにそのエングラーバが含まれているのかが記述されています。
1470
1471
1472 @node オブジェクトのサイズ
1473 @subsection オブジェクトのサイズ
1474 @translationof Size of objects
1475
1476 @cindex changing size of objects (オブジェクトのサイズを変更する)
1477 @cindex size of objects (オブジェクトのサイズ)
1478 @cindex objects, size of (オブジェクトのサイズ)
1479 @cindex objects, changing size of (オブジェクトのサイズを変更する)
1480
1481 以前の例を見直すことから始めてみましょう
1482 (@ref{Nesting music expressions} を参照してください)。@c
1483 そこでは @rglos{ossia} として新たに一時的な譜を導入する方法が示されています。
1484
1485 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
1486 @cindex @code{\with}, example (@code{\with} の例)
1487
1488 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1489 \new Staff ="main" {
1490   \relative g' {
1491     r4 g8 g c4 c8 d |
1492     e4 r8
1493     <<
1494       { f8 c c }
1495       \new Staff \with {
1496         alignAboveContext = #"main" }
1497       { f8 f c }
1498     >>
1499     r4 |
1500   }
1501 }
1502 @end lilypond
1503
1504 通常、オッシアは音部記号と拍子記号無しで記述され、@c
1505 メインの譜よりもわずかに小さく譜刻されます。@c
1506 今度は、すでに音部記号と拍子記号を削除する方法を知っています
1507 -- 以下のようにそれぞれのステンシルを @code{#f} にセットするだけです:
1508
1509 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
1510 @cindex @code{\with}, example (@code{\with} の例)
1511 @funindex \omit
1512 @cindex Clef, example of overriding (Clef をオーバライドする例)
1513 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1514
1515 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1516 \new Staff ="main" {
1517   \relative g' {
1518     r4 g8 g c4 c8 d |
1519     e4 r8
1520     <<
1521       { f8 c c }
1522       \new Staff \with {
1523         alignAboveContext = #"main"
1524       }
1525       {
1526         \omit Staff.Clef
1527         \omit Staff.TimeSignature
1528         { f8 f c }
1529       }
1530     >>
1531     r4 |
1532   }
1533 }
1534 @end lilypond
1535
1536 @noindent
1537 ここで、@code{\with} 節の後にある追加の括弧のペアが、@c
1538 その括弧に囲まれているオーバライドと音楽がオッシア譜に適用されることを@c
1539 保証するために、必要となります。
1540
1541 しかし、@code{\with} を用いた譜コンテキストの変更と @code{\override}
1542 を用いた音部記号と拍子記号のステンシルの変更 (あるいはこのケースでは
1543 @code{\omit} を用いています) との違いは何なのでしょうか?@c
1544 主な違いは、@code{\with} 節の中で行われた変更はそのコンテキストが@c
1545 作成されるときに行われ、@c
1546 そのコンテキストでは @strong{デフォルト} 値として残ります。@c
1547 一方、音楽の中に埋め込まれた @code{\set} コマンドや
1548 @code{\override} コマンドは動的です
1549 -- それらは音楽のある特定のポイントに同期して変更を行います。@c
1550 変更が @code{\unset} や @code{\revert} を使ってセットを解除されたり@c
1551 元に戻された場合、デフォルト値
1552 -- これは @code{\with} 節でセットされていた場合はその値、@c
1553 そうでない場合は通常のデフォルト値 -- に戻ります。
1554
1555 いくつかのコンテキスト プロパティは @code{\with} 節でのみ変更可能です。@c
1556 これらは、コンテキストが作成された後では、変更されることのないプロパティです。@c
1557 @code{alignAboveContext} とそのパートナー @code{alignBelowContext} が@c
1558 そのようなプロパティです -- いったん譜が作成されると、@c
1559 譜のアラインメントは決定され、@c
1560 それを後で変更しようとすることには意味がありません。
1561
1562 レイアウト オブジェクトのデフォルト値は @code{\with} 節で@c
1563 セットすることもできます。@c
1564 通常の @code{\override} コマンドをコンテキスト名を省いて@c
1565 使用するだけです。@c
1566 コンテキスト名を省略するのは、そのコンテキストは明らかに
1567 @code{\with} 節が変更しようとしているコンテキストだからです。@c
1568 実際、@code{\with} 節の中でコンテキストを指定するとエラーが発生します。
1569
1570 それでは上記の例を以下のように書き換えます:
1571
1572 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
1573 @cindex @code{\with}, example (@code{\with} の例)
1574 @cindex Clef, example of overriding (Clef をオーバライドする例)
1575 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1576
1577 @c KEEP LY
1578 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1579 \new Staff ="main" {
1580   \relative g' {
1581     r4 g8 g c4 c8 d |
1582     e4 r8
1583     <<
1584       { f8 c c }
1585       \new Staff \with {
1586         alignAboveContext = #"main"
1587         % この譜には音部記号を譜刻しません
1588         \override Clef.stencil = ##f
1589         % この譜には拍子記号を譜刻しません
1590         \override TimeSignature.stencil = ##f
1591       }
1592       { f8 f c }
1593     >>
1594     r4 |
1595   }
1596 }
1597 @end lilypond
1598
1599 @code{transparent} プロパティを設定したり @code{stencil} を消すために@c
1600 短縮形 @code{\hide} と @code{\omit} を使うことができ、結果として@c
1601 以下のようになります:
1602
1603 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1604 \new Staff ="main" {
1605   \relative g' {
1606     r4 g8 g c4 c8 d |
1607     e4 r8
1608     <<
1609       { f8 c c }
1610       \new Staff \with {
1611         alignAboveContext = #"main"
1612         % この譜には音部記号を譜刻しません
1613         \omit Clef
1614         % この譜には拍子記号を譜刻しません
1615         \omit TimeSignature
1616       }
1617       { f8 f c }
1618     >>
1619     r4 |
1620   }
1621 }
1622 @end lilypond
1623
1624 最後に、レイアウト オブジェクトのサイズを変更してみます。
1625
1626 いくつかのレイアウト オブジェクトはある書体から選択された図柄として@c
1627 作成されます。@c
1628 これには符頭、臨時記号、マークアップ、音部記号、拍子記号、強弱記号、@c
1629 歌詞が含まれます。@c
1630 それらのサイズは、これから見ていくように、@code{font-size} プロパティを@c
1631 変更することによって変更されます。@c
1632 スラーやタイのような他のレイアウト オブジェクト
1633 -- 一般には、スパナ オブジェクト (spanner objects)
1634 -- は個々に描かれるため、@c
1635 @code{font-size} プロパティとは関係がありません。@c
1636 一般に、それらのオブジェクトはそれらを取り付けられるオブジェクトからサイズを@c
1637 決定する (訳者: 例えば、スラーはそのスラーが付着する音符から@c
1638 そのスラーのサイズを決定する) ので、@c
1639 通常はサイズを手動で変更する必要はありません。@c
1640 さらに、符幹や小節線の長さ、連桁や他の線の太さ、譜線の間隔などといった@c
1641 他のプロパティはすべて特別な方法で変更する必要があります。
1642
1643 オッシアの例に戻って、まず @code{font-size} を変更してみましょう。@c
1644 これを行うには 2 通りの方法があります。@c
1645 以下のようなコマンドで @code{NoteHead} のような各オブジェクト タイプの@c
1646 フォント サイズを変更する:
1647
1648 @example
1649 \override NoteHead.font-size = #-2
1650 @end example
1651
1652 あるいは、@code{\set} を使って特別なプロパティ @code{fontSize} を設定するか、@c
1653 それを @code{\with} 節に含める
1654 (ただし、@code{\set} は含めません) ことによって@c
1655 すべてのフォントのサイズを変更します:
1656
1657 @example
1658 \set fontSize = #-2
1659 @end example
1660
1661 これらの命令文は両方ともフォント サイズを前の値から 2 段階減らします。@c
1662 各段階でサイズはおよそ 12% 増減します。
1663
1664 それではオッシアの例でフォント サイズを変更してみましょう:
1665
1666 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
1667 @cindex @code{\with}, example (@code{\with} の例)
1668 @cindex Clef, example of overriding (Clef をオーバライドする例)
1669 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1670 @cindex fontSize property, example (fontSize プロパティの例)
1671
1672 @c KEEP LY
1673 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1674 \new Staff ="main" {
1675   \relative g' {
1676     r4 g8 g c4 c8 d |
1677     e4 r8
1678     <<
1679       { f8 c c }
1680       \new Staff \with {
1681         alignAboveContext = #"main"
1682         \omit Clef
1683         \omit TimeSignature
1684         % すべてのフォント サイズを約 24% 減らします
1685         fontSize = #-2
1686       }
1687       { f8 f c }
1688     >>
1689     r4 |
1690   }
1691 }
1692 @end lilypond
1693
1694 これでもまだ完璧ではありません。@c
1695 符頭とフラグは小さくなりましたが、符幹はそれに対して長すぎ、@c
1696 譜線は離れすぎています。@c
1697 これらをフォント サイズの減少に比例してスケール ダウンさせる必要があります。@c
1698 次のサブ セクションでそれを行う方法について議論します。
1699
1700
1701 @node オブジェクトの長さと太さ
1702 @subsection オブジェクトの長さと太さ
1703 @translationof Length and thickness of objects
1704
1705 @cindex distances (距離)
1706 @cindex thickness (太さ)
1707 @cindex length (長さ)
1708 @cindex magstep
1709 @cindex size, changing (サイズを変更する)
1710 @cindex stem length, changing (符幹の長さを変更する)
1711 @cindex staff line spacing, changing (譜線の間隔を変更する)
1712
1713 LilyPond では距離と長さは一般に譜スペース -- 譜の中の隣り合う線の間隔 --
1714 で測ります (特別な場合では、譜スペースの半分で測ることもあります)。@c
1715 一方、たいていの @code{thickness} プロパティは @code{line-thickness} と@c
1716 呼ばれる内部プロパティを単位として測ります。@c
1717 例えば、デフォルトでは、ヘアピン (訳者: 強弱記号) の線の太さは
1718 1 単位の @code{line-thickness} であり、@c
1719 音符の符幹の @code{thickness} は 1.3 です。@c
1720 けれども、それとは単位の異なる太さプロパティがあるということにも@c
1721 注意してください。@c
1722 例えば、連桁の太さプロパティは譜スペースで測ります。
1723
1724 それでは、どうやって長さをフォント サイズに比例させるのでしょうか?@c
1725 これは、まさにこの目的のために提供されている @code{magstep} と呼ばれる@c
1726 特別な関数の助けを借りることによって達成できます。@c
1727 この関数は引数を 1 つ -- フォント サイズの変化 (前の例では #-2) --
1728 をとり、他のオブジェクトの縮小に比例したスケーリング ファクタを返します。@c
1729 以下のように使用します:
1730
1731 @cindex alignAboveContext property, example (alignAboveContext プロパティの例)
1732 @cindex @code{\with}, example (@code{\with} の例)
1733 @cindex Clef, example of overriding (Clef をオーバライドする例)
1734 @cindex TimeSignature, example of overriding (TimeSignature をオーバライドする例)
1735 @cindex fontSize property, example (fontSize プロパティの例)
1736 @cindex StaffSymbol, example of overriding (StaffSymbol をオーバライドする例)
1737 @cindex magstep function, example of using (magstep 関数の使用例)
1738 @cindex staff-space property, example (staff-space プロパティの例)
1739 @cindex stencil property, example (stencil プロパティの例)
1740
1741 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1742 \new Staff ="main" {
1743   \relative g' {
1744     r4 g8 g c4 c8 d |
1745     e4 r8
1746     <<
1747       { f8 c c }
1748       \new Staff \with {
1749         alignAboveContext = #"main"
1750         \omit Clef
1751         \omit TimeSignature
1752         fontSize = #-2
1753         % 符幹の長さと譜線の間隔を減らします
1754         \override StaffSymbol.staff-space = #(magstep -2)
1755       }
1756       { f8 f c }
1757     >>
1758     r4 |
1759   }
1760 }
1761 @end lilypond
1762
1763 @noindent
1764 符幹の長さと他の多くの長さに関係するプロパティは常に
1765 @code{staff-space} プロパティの値と比例関係になるよう算出されるため、@c
1766 それらの長さも自動的にスケール ダウンされます。@c
1767 これはオッシアの垂直方向のスケールだけに効果を及ぼすということに@c
1768 注意してください -- 水平方向のスケールは、メインの音楽と同期するよう、@c
1769 メインの音楽のレイアウトによって決定されるため、水平方向のスケールは
1770 @code{staff-space} の変更によっていかなる影響も受けません。@c
1771 もちろん、メインの音楽のすべてのスケールがこの方法で変更された場合、@c
1772 水平方向のスペースも影響を受けます。@c
1773 このことについては、後のレイアウト セクションで議論します。
1774
1775 そして、これでオッシアの作成は完了です。@c
1776 他のすべてのオブジェクトのサイズと長さが類似の方法で変更されるかもしれません。
1777
1778 上記の例のようなスケールのちょっとした変更に対して、小節線、連桁、ヘアピン、@c
1779 スラーなどのさまざまな描画線の太さは通常はグローバルな調節を必要としません。@c
1780 ある特定のレイアウト オブジェクトの太さを調節する必要がある場合、@c
1781 それを達成する最良の方法はそのオブジェクトの @code{thickness} プロパティを@c
1782 オーバライドすることです。@c
1783 スラーの太さを変更する例は @ref{レイアウト オブジェクトのプロパティ} で@c
1784 示されています。@c
1785 すべての描画オブジェクト (つまり、フォントから作り出される@c
1786 オブジェクトではないもの) の太さが同様の方法で変更されるかもしれません。
1787
1788
1789 @node オブジェクトの配置
1790 @section オブジェクトの配置
1791 @translationof Placement of objects
1792
1793 @menu
1794 * 自動配置::
1795 * 譜内部オブジェクト::
1796 * 譜外部オブジェクト::
1797 @end menu
1798
1799
1800 @node 自動配置
1801 @subsection 自動配置
1802 @translationof Automatic behavior
1803
1804 @cindex within-staff objects (譜内部オブジェクト)
1805 @cindex outside-staff objects (譜内部オブジェクト)
1806 @cindex objects, within-staff (譜内部オブジェクト)
1807 @cindex objects, outside-staff (譜外部オブジェクト)
1808
1809 音楽記譜法には譜に属するオブジェクトがいくつかあり、@c
1810 他のオブジェクトは譜の外側に置かれるべきです。@c
1811 それらはそれぞれ譜内部オブジェクトと譜外部オブジェクトと呼ばれます。
1812
1813 譜内部オブジェクトは譜上に置かれます
1814 -- 符頭、符幹、臨時記号などです。@c
1815 通常、それらの位置は音楽自体によって決定されます
1816 -- 譜内部オブジェクトは譜のある特定の線と同じ垂直位置に置かれたり、@c
1817 そこに置かれるべき他のオブジェクトにくっつけられたりします。@c
1818 近接する和音の中にある符頭、符幹、臨時記号の衝突は普通は自動的に回避されます。@c
1819 これから見ていくように、この自動配置を変更することができるコマンドと@c
1820 オーバライドがあります。
1821
1822 譜の外部にあるオブジェクトには、リハーサル記号、テキスト、@c
1823 強弱記号などがあります。@c
1824 LilyPond が持つ譜外部オブジェクトの垂直位置のルールは、@c
1825 譜外部オブジェクトをできるだけ譜の近くに、しかし他のオブジェクトと@c
1826 衝突しない程度の近さに置くというものです。@c
1827 以下で示すように、LilyPond はオブジェクトを配置する順番を決定するために
1828 @code{outside-staff-priority} プロパティを使用します。
1829
1830 最初に、LilyPond はすべての譜内部オブジェクトを配置します。@c
1831 それから、@code{outside-staff-priority} に従って譜外部オブジェクトを@c
1832 並べます。@c
1833 譜外部オブジェクトは最小の @code{outside-staff-priority} を@c
1834 持つオブジェクトから順番に 1 つずつ並べられ、すでに配置されたオブジェクトと@c
1835 衝突しないように配置されます。@c
1836 つまり、2 つの譜外部オブジェクトが同じスペースを巡って競合する場合、@c
1837 より小さな @code{outside-staff-priority} を持つオブジェクトが@c
1838 譜の近くに配置されます。@c
1839 2 つのオブジェクトが同じ @code{outside-staff-priority} を持つ場合、@c
1840 先に発生するオブジェクトが譜の近くに配置されます。
1841
1842 以下の例では、すべてのマークアップ テキストが同じ優先度を持っています
1843 (なぜなら、優先度が明示的にセットされていないからです)。@c
1844 @q{Text3} が自動的に譜の近く、@q{Text2} の@c
1845 すぐ下に納まるよう配置されていることに注意してください。
1846
1847 @cindex markup example (マークアップの例)
1848
1849 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1850 c2^"Text1"
1851 c2^"Text2" |
1852 c2^"Text3"
1853 c2^"Text4" |
1854 @end lilypond
1855
1856 デフォルトでは、譜も互いにできるだけ近くなるよう配置されます
1857 (最小間隔に従います)。@c
1858 音符が隣接する譜に向かって長く突き出てている場合、譜を離さないと@c
1859 記譜したものが重なり合ってしまう場合にのみ譜は離されます。@c
1860 以下の例は譜の調整によって音符が @q{ぴったりと納まる} 様子を示しています:
1861
1862 @lilypond[quote,ragged-right,verbatim]
1863 <<
1864   \new Staff {
1865     \relative c' { c4 a, }
1866   }
1867   \new Staff {
1868     \relative c'''' { c4 a, }
1869   }
1870 >>
1871 @end lilypond
1872
1873
1874 @node 譜内部オブジェクト
1875 @subsection 譜内部オブジェクト
1876 @translationof Within-staff objects
1877
1878 これまでにコマンド @code{\voiceXXX} がスラー、タイ、運指法記号、@c
1879 符幹の向きに依存する他のすべてに対してどのように影響を与えるかを見てきました
1880 -- @ref{Explicitly instantiating voices} を参照してください。
1881 これらのコマンドは、多声部音楽を記述しているときに上下する旋律を@c
1882 見分けられるようにすることを可能にするために不可欠なものです。@c
1883 しかしながら、この自動機能をオーバライドする必要がある場合もあります。@c
1884 このオーバライドは音楽全体に対しても、個々の音符に対してもできます。@c
1885 この自動機能を制御しているプロパティは各レイアウト オブジェクトの
1886 @code{direction} プロパティです。@c
1887 まず、これは何をするのかを説明し、それから、作成済みのコマンドを@c
1888 いくつか紹介します。@c
1889 それらのコマンドを使うと、一般的な変更のための明示的なオーバライドを@c
1890 コードしなくて済みます。
1891
1892 スラーやタイのようなレイアウト オブジェクトはカーブを描き、曲がり、@c
1893 上下します。@c
1894 符幹やフラグのような他のオブジェクトも上下の向きによって位置が左右します。@c
1895 @code{direction} がセットされているときは、これは自動的に制御されます。
1896
1897 @menu
1898 * direction プロパティ::
1899 * 運指::
1900 @end menu
1901
1902 @node direction プロパティ
1903 @unnumberedsubsubsec @code{direction} プロパティ
1904 @translationof The direction property
1905
1906 @cindex down (下)
1907 @cindex up (上)
1908 @cindex center (中央)
1909 @cindex neutral (ニュートラル)
1910
1911 以下の例は、小節 1 で符幹のデフォルトの振る舞いを示しています。@c
1912 高い位置にある音符の符幹は下向きで、低い位置にある音符の符幹は上向きです。@c
1913 続いて 4 つの音符の符幹をすべて強制的に下向きにし、4 つの音符の符幹を@c
1914 すべて強制的に上向きにし、最後に 4 つの音符の符幹をデフォルトに戻します。
1915
1916 @cindex Stem, example of overriding (Stem をオーバライドする例)
1917 @cindex direction property, example (direction プロパティの例)
1918
1919 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1920 a4 g c a |
1921 \override Stem.direction = #DOWN
1922 a4 g c a |
1923 \override Stem.direction = #UP
1924 a4 g c a |
1925 \revert Stem.direction
1926 a4 g c a |
1927 @end lilypond
1928
1929 ここで定数 @code{DOWN} と @code{UP} を使っています。@c
1930 これらはそれぞれ値 @w{@code{-1}} と @code{+1} を持ち、定数の代わりに@c
1931 それらの数値を使うこともできまはす。@c
1932 さらに値 @code{0} を使う場合もあります。@c
1933 この値は符幹では @code{UP} を意味するものとして扱われますが、@c
1934 いくつかのオブジェクトでは @q{center} という意味になります。@c
1935 値 @code{0} を持つ定数に @code{CENTER} があります。
1936
1937 しかしながら、これらの明示的なオーバライドは普通は使われません。@c
1938 もっと簡単で定義済みのコマンドが利用可能だからです。@c
1939 ここに一般的なコマンドの表を挙げます。@c
1940 それぞれのコマンドの意味が明白でない場合は、そのコマンドの意味を述べています。
1941
1942 @multitable @columnfractions .2 .2 .25 .35
1943 @headitem 下/左
1944   @tab 上/右
1945   @tab 元に戻す
1946   @tab 効果
1947 @item @code{\arpeggioArrowDown}
1948   @tab @code{\arpeggioArrowUp}
1949   @tab @code{\arpeggioNormal}
1950   @tab 矢印が下に付く、上に付く、付かない
1951 @item @code{\dotsDown}
1952   @tab @code{\dotsUp}
1953   @tab @code{\dotsNeutral}
1954   @tab 譜線を避けるための移動方向
1955 @item @code{\dynamicDown}
1956   @tab @code{\dynamicUp}
1957   @tab @code{\dynamicNeutral}
1958   @tab
1959 @item @code{\phrasingSlurDown}
1960   @tab @code{\phrasingSlurUp}
1961   @tab @code{\phrasingSlurNeutral}
1962   @tab Note: スラー コマンドとは別になります
1963 @item @code{\slurDown}
1964   @tab @code{\slurUp}
1965   @tab @code{\slurNeutral}
1966   @tab
1967 @item @code{\stemDown}
1968   @tab @code{\stemUp}
1969   @tab @code{\stemNeutral}
1970   @tab
1971 @item @code{\textSpannerDown}
1972   @tab @code{\textSpannerUp}
1973   @tab @code{\textSpannerNeutral}
1974   @tab スパナとして挿入されるテキストが譜の下/上にくる
1975 @item @code{\tieDown}
1976   @tab @code{\tieUp}
1977   @tab @code{\tieNeutral}
1978   @tab
1979 @item @code{\tupletDown}
1980   @tab @code{\tupletUp}
1981   @tab @code{\tupletNeutral}
1982   @tab 連符記号が音符の下/上にくる
1983 @end multitable
1984
1985 これらのコマンドで中立/通常の位置に戻すコマンドは @code{\revert} を@c
1986 用いることで実装されていて、前に @code{\once} が付いて @strong{いない}
1987 かもしれません。@c
1988 @code{\override} を用いて実装されているコマンドの効果を単一のタイミング@c
1989 に限定したいのであれば、明示的なオーバライドの場合と同様に、@c
1990 コマンドの前に @code{\once} を配置します。
1991
1992 @node 運指
1993 @unnumberedsubsubsec 運指
1994 @translationof Fingering
1995
1996 @cindex fingering, placement (運指法記号の配置)
1997 @cindex fingering, chords (和音の運指法記号)
1998
1999 単一の音符に対する運指法記号の配置も @code{direction} プロパティによって@c
2000 制御できますが、@code{direction} を変更しても和音の運指法記号は影響を@c
2001 受けません。@c
2002 これから見ていくように、和音の中の個々の音符の運指法記号を制御するための@c
2003 特別なコマンドがあります。@c
2004 このコマンドを使うことで運指法記号を各音符の上、下、左、右に@c
2005 配置することができます。
2006
2007 まず、単一の音符の運指法記号に対する @code{direction} を効果を示します。@c
2008 最初の小節はデフォルト状態で、その後で @code{DOWN} と @code{UP} を@c
2009 指定したときの効果を示します:
2010
2011 @cindex Fingering, example of overriding (Fingering をオーバライドする例)
2012 @cindex direction property, example (direction プロパティの例)
2013
2014 @lilypond[quote,verbatim,relative=2]
2015 c4-5 a-3 f-1 c'-5 |
2016 \override Fingering.direction = #DOWN
2017 c4-5 a-3 f-1 c'-5 |
2018 \override Fingering.direction = #UP
2019 c4-5 a-3 f-1 c'-5 |
2020 @end lilypond
2021
2022 しかしながら、@code{direction} プロパティをオーバライドすることは、@c
2023 手動で運指法記号を音符の上または下に配置するもっとも簡単な方法ではありません。@c
2024 運指法番号の前に @code{-} の代わりに @code{_} または @code{^} を使う方が@c
2025 普通は適切です。@c
2026 ここで、上記の例にこの方法を用いた例を挙げます:
2027
2028 @cindex fingering example (運指法記号の例)
2029
2030 @lilypond[quote,verbatim,relative=2]
2031 c4-5 a-3 f-1 c'-5 |
2032 c4_5 a_3 f_1 c'_5 |
2033 c4^5 a^3 f^1 c'^5 |
2034 @end lilypond
2035
2036 @code{direction} プロパティは和音では無視されますが、@c
2037 方向を示す接頭辞 @code{_} と @code{^} は機能します。@c
2038 以下で示すように、デフォルトでは、運指法記号は和音の音符の@c
2039 上と下の両方に自動的に配置されます:
2040
2041 @cindex fingering example (運指法記号の例)
2042
2043 @lilypond[quote,verbatim,relative=2]
2044 <c-5 g-3>4
2045 <c-5 g-3 e-2>4
2046 <c-5 g-3 e-2 c-1>4
2047 @end lilypond
2048
2049 @noindent
2050 しかし、以下で示すように、運指法番号のすべてまたはいずれかを手動で強制的に@c
2051 和音の上または下に配置するために、これはオーバライドされるかもしれません:
2052
2053 @cindex fingering example (運指法記号の例)
2054
2055 @lilypond[quote,verbatim,relative=2]
2056 <c-5 g-3 e-2 c-1>4
2057 <c^5 g_3 e_2 c_1>4
2058 <c^5 g^3 e^2 c_1>4
2059 @end lilypond
2060
2061 @code{\set fingeringOrientations} コマンドを使うことによって和音の中に@c
2062 ある個々の音符の運指法記号の配置をより細かく制御することさえできます。@c
2063 このコマンドのフォーマットは以下のようなものです:
2064
2065 @example
2066 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2067 @end example
2068
2069 @noindent
2070 @code{fingeringOrientations} は @code{Voice} コンテキストのプロパティであり、@c
2071 @code{New_fingering_engraver} によって作成、使用されるため、@c
2072 @code{\set} が使用されます。
2073
2074 このプロパティには 1 つから 3 つまでの値のリストがセットされるかもしれません。@c
2075 このプロパティは運指法記号を上 (リストに @code{up} がある場合)、@c
2076 下 (リストに @code{down} がある場合)、@c
2077 左 (リストに @code{left} がある場合。リストに @code{right} がある場合は右)
2078 に配置します。@c
2079 逆に配置位置がリストされていない場合、その位置に運指法記号は配置されません。@c
2080 LilyPond はこれらの制約を受け取り、
2081 後に続く和音の音符への運指法記号をうまく配置します。@c
2082 @code{left} と @code{right} は相互排他的であるということに注意してください --
2083 運指法記号は左右のどちらかにしか配置されないか、どちらにも配置されません。
2084
2085 @warning{このコマンドを使って単一の音符への運指法記号の配置を@c
2086 コントロールするには、その音符を山括弧で囲んで単一音符の和音として@c
2087 記述する必要があります。}
2088
2089 いくつか例を挙げます:
2090
2091 @cindex fingering example (運指法記号の例)
2092 @cindex @code{\set}, example of using (@code{\set} の使用例)
2093 @cindex fingeringOrientations property, example (fingeringOrientations プロパティの例)
2094
2095 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2096 \set fingeringOrientations = #'(left)
2097 <f-2>4
2098 <c-1 e-2 g-3 b-5>4
2099 \set fingeringOrientations = #'(left)
2100 <f-2>4
2101 <c-1 e-2 g-3 b-5>4 |
2102 \set fingeringOrientations = #'(up left down)
2103 <f-2>4
2104 <c-1 e-2 g-3 b-5>4
2105 \set fingeringOrientations = #'(up left)
2106 <f-2>4
2107 <c-1 e-2 g-3 b-5>4 |
2108 \set fingeringOrientations = #'(right)
2109 <f-2>4
2110 <c-1 e-2 g-3 b-5>4
2111 @end lilypond
2112
2113 @noindent
2114 運指法記号が少し込み合っているように見える場合は、@c
2115 @code{font-size} でサイズを下げることができます。@c
2116 デフォルト値は内部リファレンスの @code{Fingering} オブジェクトのページから
2117 @w{@code{-5}} であることがわかるので、@w{@code{-7}} にセットしてみましょう:
2118
2119 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2120 \override Fingering.font-size = #-7
2121 \set fingeringOrientations = #'(left)
2122 <f-2>4
2123 <c-1 e-2 g-3 b-5>4
2124 \set fingeringOrientations = #'(left)
2125 <f-2>4
2126 <c-1 e-2 g-3 b-5>4 |
2127 \set fingeringOrientations = #'(up left down)
2128 <f-2>4
2129 <c-1 e-2 g-3 b-5>4
2130 \set fingeringOrientations = #'(up left)
2131 <f-2>4
2132 <c-1 e-2 g-3 b-5>4 |
2133 \set fingeringOrientations = #'(right)
2134 <f-2>4
2135 <c-1 e-2 g-3 b-5>4
2136 @end lilypond
2137
2138
2139 @node 譜外部オブジェクト
2140 @subsection 譜外部オブジェクト
2141 @translationof Outside-staff objects
2142
2143 譜外部オブジェクトは自動的に衝突を回避するよう配置されます。@c
2144 配置が最適でない場合に自動配置をオーバライドする方法がいくつかあります。
2145
2146 @menu
2147 * outside-staff-priority プロパティ::
2148 * \textLengthOn コマンド::
2149 * 強弱記号の配置::
2150 * グラフィカル オブジェクトのサイズ::
2151 @end menu
2152
2153
2154 @node outside-staff-priority プロパティ
2155 @unnumberedsubsubsec @code{outside-staff-priority} プロパティ
2156 @translationof The outside-staff-priority property
2157
2158 小さな値の @code{outside-staff-priority} プロパティを持つオブジェクトは@c
2159 譜の近くに配置され、他の譜外部オブジェクトは衝突を避けるのに必要な分だけ@c
2160 離されます。@c
2161 @code{outside-staff-priority} は @code{grob-interface} の中で@c
2162 定義されているため、すべてのレイアウト  オブジェクトのプロパティです。@c
2163 デフォルトでは、すべての譜内部オブジェクトの @code{outside-staff-priority} は
2164 @code{#f} にセットされていて、譜外部オブジェクトが作成されたときに@c
2165 その譜外部オブジェクトの @code{outside-staff-priority} に適当な数値が@c
2166 セットされます。@c
2167 以下の表はいくつかの一般的な譜外部オブジェクトのデフォルトの
2168 @code{outside-staff-priority} 値を示しています。
2169
2170 @multitable @columnfractions .3 .3 .3
2171 @headitem レイアウト オブジェクト
2172   @tab 優先度
2173   @tab 以下のオブジェクトの配置を制御する:
2174 @item @code{RehearsalMark}
2175   @tab @code{1500}
2176   @tab リハーサル記号
2177 @item @code{MetronomeMark}
2178   @tab @code{1000}
2179   @tab メトロノーム記号
2180 @item @code{VoltaBracketSpanner}
2181   @tab @code{600}
2182   @tab Volta (番号付きのリピート) の囲み
2183 @item @code{TextScript}
2184   @tab @code{450}
2185   @tab マークアップ テキスト
2186 @item @code{MultiMeasureRestText}
2187   @tab @code{450}
2188   @tab 全休符上のテキスト
2189 @item @code{OttavaBracket}
2190   @tab @code{400}
2191   @tab オッターバ (オクターブを上下させる記号) の囲み
2192 @item @code{TextSpanner}
2193   @tab @code{350}
2194   @tab テキスト スパナ
2195 @item @code{DynamicLineSpanner}
2196   @tab @code{250}
2197   @tab すべての強弱記号
2198 @item @code{BarNumber}
2199   @tab @code{100}
2200   @tab 小節番号
2201 @item @code{TrillSpanner}
2202   @tab @code{50}
2203   @tab トリル記号
2204 @end multitable
2205
2206 これらのうちのいくつかのデフォルトでの配置を示している例を挙げます。
2207
2208 @cindex text spanner (テキスト スパナ)
2209 @cindex ottava bracket (オッターバ囲み)
2210
2211 @funindex \startTextSpan
2212 @funindex startTextSpan
2213 @funindex \stopTextSpan
2214 @funindex stopTextSpan
2215
2216 @cindex TextSpanner, example of overriding (TextSpanner をオーバライドする例)
2217 @cindex bound-details property, example (bound-details プロパティの例)
2218
2219 @c KEEP LY
2220 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2221 % 以降のテキスト スパナの詳細を設定します
2222 \override TextSpanner.bound-details.left.text
2223     = \markup { \small \bold Slower }
2224 % 強弱記号を譜の上に配置します
2225 \dynamicUp
2226 % オッターバ囲みの開始
2227 \ottava #1
2228 c'4 \startTextSpan
2229 % 強弱テキストとヘアピンを付け加えます
2230 c4\pp\<
2231 c4
2232 % テキスト スクリプトを付け加えます
2233 c4^Text |
2234 c4 c
2235 % 強弱テキストを付け加え、強弱ヘアピンを終わらせます
2236 c4\ff c \stopTextSpan |
2237 % オッターバ囲みを終わらせます
2238 \ottava #0
2239 c,4 c c c |
2240 @end lilypond
2241
2242 この例はテキスト スパナ -- 音楽の上に置かれる延長線付きのテキスト -- の@c
2243 作成方法についても示しています。@c
2244 スパナは @code{\startTextSpan} コマンドから
2245 @code{\stopTextSpan} コマンドまで延び、テキストのフォーマットは
2246 @code{\override TextSpanner} コマンドによって定義されます。@c
2247 詳細は @ruser{テキスト スパナ} を参照してください。
2248
2249 この例はさらにオッターバ囲みを作成する方法についても示しています。
2250
2251 @cindex tweaking bar number placement (小節番号の配置を調節する)
2252 @cindex bar numbers, tweaking placement (小節番号の配置を調節する)
2253 @cindex tweaking metronome mark placement (メトロノーム記号の配置を調節する)
2254 @cindex metronome mark, tweaking placement (メトロノーム記号の配置を調節する)
2255 @cindex tweaking rehearsal mark placement (リハーサル記号の配置を調節する)
2256 @cindex rehearsal marks, tweaking placement (リハーサル記号の配置を調節する)
2257
2258 @code{outside-staff-priority} のデフォルト値による配置が@c
2259 あなたの望みに合わない場合、いずれかのオブジェクトの優先度を@c
2260 オーバライドすることになるかもしれません。@c
2261 上記の例で、オッターバ囲みをテキスト スパナの下に配置したいとします。@c
2262 すべきことは、@code{OttavaBracket} は @code{Staff} コンテキストの中に@c
2263 作成されるということを思い出し、@code{OttavaBracket} の優先度を@c
2264 内部リファレンスか上記の表で調べて、それを @code{TextSpanner} の値よりも@c
2265 小さくすることです:
2266
2267 @cindex TextSpanner, example of overriding (TextSpanner をオーバライドする例)
2268 @cindex bound-details property, example (bound-details プロパティの例)
2269
2270 @c KEEP LY
2271 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2272 % 以降のテキスト スパナの詳細を設定します
2273 \override TextSpanner.bound-details.left.text
2274     = \markup { \small \bold Slower }
2275 % 強弱記号を譜の上に配置します
2276 \dynamicUp
2277 % 以降のオッターバ囲みをテキスト スパナの下に配置します
2278 \once \override Staff.OttavaBracket.outside-staff-priority = #340
2279 % オッターバ囲みの開始
2280 \ottava #1
2281 c'4 \startTextSpan
2282 % 強弱テキストを付け加えます
2283 c4\pp
2284 % 強弱の線スパナを付け加えます
2285 c4\<
2286 % テキスト スクリプトを付け加えます
2287 c4^Text |
2288 c4 c
2289 % 強弱テキストを付け加えます
2290 c4\ff c \stopTextSpan |
2291 % オッターバ囲みを終わらせます
2292 \ottava #0
2293 c,4 c c c |
2294 @end lilypond
2295
2296 これらのオブジェクトのいくつか
2297 -- 特に、小節番号、メトロノーム記号、それにリハーサル記号 --
2298 はデフォルトでは @code{Score} コンテキストの中にあるため、@c
2299 それらのプロパティをオーバライドする場合は適切なコンテキストを@c
2300 指定する必要があることに注意してください。
2301
2302 @cindex slurs and outside-staff-priority (スラーと outside-staff-priority)
2303 @cindex slurs and articulations (スラーとアーティキュレーション)
2304 @cindex articulations and slurs (アーティキュレーションとスラー)
2305
2306 スラーはデフォルトでは譜内部オブジェクトに分類されています。@c
2307 しかしながら、譜の上部に配置された音符に付くスラーは@c
2308 しばしば譜の上に表示されます。@c
2309 このことは、スラーがまず最初に配置されるため、アーティキュレーションなどの@c
2310 譜外部オブジェクトをあまりにも高い位置に押し上げる可能性があります。@c
2311 アーティキュレーションの @code{avoid-slur} プロパティに
2312 @code{'inside} をセットすることでアーティキュレーションを@c
2313 スラーよりも内側に配置することができます。@c
2314 しかし、@code{avoid-slur} プロパティはアーティキュレーションの
2315 @code{outside-staff-priority} が @code{#f} にセットされている場合にのみ@c
2316 効果を持ちます。@c
2317 代替手段として、スラーの @code{outside-staff-priority} に数値を@c
2318 セットすることによって、スラーを他の譜外部オブジェクトとともに
2319 @code{outside-staff-priority} 値に従って配置することができます。@c
2320 ここで、2 つの方法の効果を示す例を挙げます:
2321
2322 @lilypond[quote,verbatim,relative=2]
2323 c4( c^\markup { \tiny \sharp } d4.) c8 |
2324 c4(
2325 \once \override TextScript.avoid-slur = #'inside
2326 \once \override TextScript.outside-staff-priority = ##f
2327 c4^\markup { \tiny \sharp } d4.) c8 |
2328 \once \override Slur.outside-staff-priority = #500
2329 c4( c^\markup { \tiny \sharp } d4.) c8 |
2330 @end lilypond
2331
2332 @code{outside-staff-priority} は、個々のオブジェクトの垂直方向の配置を@c
2333 制御するために使用することもできます。@c
2334 しかしながら、その結果は常に望み通りになるわけではありません。@c
2335 @ref{自動配置} にある例で @qq{Text3} を @qq{Text4} の上に@c
2336 配置したいとします。@c
2337 すべきことは @code{TextScript} の優先度を内部リファレンスか上記の表で調べて、@c
2338 @qq{Text3} の優先度を大きくすることです:
2339
2340 @cindex TextScript, example of overriding (TextScript をオーバライドする例)
2341 @cindex outside-staff-priority property, example (outside-staff-priority プロパティの例)
2342
2343 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2344 c2^"Text1"
2345 c2^"Text2" |
2346 \once \override TextScript.outside-staff-priority = #500
2347 c2^"Text3"
2348 c2^"Text4" |
2349 @end lilypond
2350
2351 これはたしかに @qq{Text3} を @qq{Text4} の上に配置しています。@c
2352 しかし、@qq{Text3}を @qq{Text2} の上に配置して、@c
2353 @qq{Text4} を押し下げてもいます。@c
2354 おそらく、これはそれほど望ましい結果ではないでしょう。@c
2355 本当に望んでいることは、すべての注釈を@c
2356 譜の上に譜から同じ距離だけ離して配置することです。@c
2357 そうするには明らかに、テキストのためにもっと広いスペースを確保するために、@c
2358 音符を水平方向に広げる必要があります。@c
2359 これは @code{\textLengthOn} コマンドを用いることで達成できます。
2360
2361 @node \textLengthOn コマンド
2362 @unnumberedsubsubsec @code{\textLengthOn} コマンド
2363 @translationof The \textLengthOn command
2364
2365 @cindex notes, spreading out with text (テキストに合わせて音符の間隔を広げる)
2366
2367 @funindex \textLengthOn
2368 @funindex textLengthOn
2369 @funindex \textLengthOff
2370 @funindex textLengthOff
2371
2372 デフォルトでは、音楽のレイアウトが考慮されている限り、@c
2373 マークアップによって作り出されるテキストは水平方向のスペースと関係しません。@c
2374 @code{\textLengthOn} コマンドはこの動作を逆にして、@c
2375 テキストの配置に便宜をはかる必要がある限り、音符の間隔を広げます:
2376
2377 @c KEEP LY
2378 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2379 \textLengthOn  % 音符の間隔を広げてテキストに揃えます
2380 c2^"Text1"
2381 c2^"Text2" |
2382 c2^"Text3"
2383 c2^"Text4" |
2384 @end lilypond
2385
2386 デフォルトの動作に戻すためのコマンドは @code{\textLengthOff} です。@c
2387 効果を与えるのが単一の音楽タイミングであれば、@code{\textLengthOn}
2388 に @code{\once} を付ける方法もあります。
2389
2390 @cindex markup text, allowing collisions (マークアップ テキストの衝突を許可する)
2391
2392 マークアップ テキストは譜の上に突き出している音符を避けます。@c
2393 このことが望ましくない場合、優先度を @code{#f} にセットすることによって@c
2394 上方向への自動再配置を Off にすることになるかもしれません。@c
2395 ここで、マークアップ テキストがそのような音符とどのように相互作用するかを@c
2396 示す例を挙げます。
2397
2398 @cindex TextScript, example of overriding (TextScript をオーバライドする例)
2399 @cindex outside-staff-priority property, example (outside-staff-priority プロパティの例)
2400
2401 @c KEEP LY
2402 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2403 % このマークアップは短いため衝突は起きません
2404 c2^"Tex" c'' |
2405 R1 |
2406
2407 % このマークアップは長くて納まりきらないため、上に押し上げられます
2408 c,,2^"Text" c'' |
2409 R1 |
2410
2411 % 衝突回避を OFF にします
2412 \once \override TextScript.outside-staff-priority = ##f
2413 c,,2^"Long Text   " c'' |
2414 R1 |
2415
2416 % 衝突回避を OFF にします
2417 \once \override TextScript.outside-staff-priority = ##f
2418 \textLengthOn        % そして textLengthOn を ON にします
2419 c,,2^"Long Text   "  % 後ろにスペースが付け加えられます
2420 c''2 |
2421 @end lilypond
2422
2423
2424 @node 強弱記号の配置
2425 @unnumberedsubsubsec 強弱記号の配置
2426 @translationof Dynamics placement
2427
2428 @cindex tweaking dynamics placement (強弱記号の配置を調整する)
2429 @cindex dynamics, tweaking placement (強弱記号の配置を調整する)
2430
2431 通常、強弱記号は譜の下に配置されます。@c
2432 しかしながら、@code{\dynamicUp} コマンドを使うことで上に配置される@c
2433 かもしれません。@c
2434 強弱記号は、その記号が付いている音符と垂直方向の関係で配置され、@c
2435 フレージング スラーや小節番号などの譜内部オブジェクトのすべてよりも@c
2436 下 (あるいは上) に配置されます。@c
2437 このことは、以下の例のように、@c
2438 到底受け入れられない結果を生み出す可能性があります:
2439
2440 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2441 \clef "bass"
2442 \key aes \major
2443 \time 9/8
2444 \dynamicUp
2445 bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2446 ees,2.~\)\mf ees4 r8 |
2447 @end lilypond
2448
2449 しかしながら、音符とそれに付けられた強弱記号が互いに近い場合、@c
2450 自動配置は後の方にある強弱記号を譜から離すことによって衝突を避けます。@c
2451 しかし、以下のかなり不自然な例が示すように、@c
2452 それは最適な配置ではないかもしれません:
2453
2454 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2455 \dynamicUp
2456 a4\f b\mf c\mp b\p
2457 @end lilypond
2458
2459 @noindent
2460 @q{実際} の音楽で同じような状況があった場合、音符の間隔をもう少し広げて、@c
2461 すべての強弱記号が譜から垂直方向に同じだけ離れるようにする方が@c
2462 望ましいかもしれません。@c
2463 マークアップ テキストの場合は @code{\textLengthOn} コマンドを@c
2464 用いることによってそうすることができますが、@c
2465 強弱記号には等価のコマンドがありません。@c
2466 そのため、@code{\override} コマンドを用いてそれを達成する方法を@c
2467 見出す必要があります。
2468
2469 @node グラフィカル オブジェクトのサイズ
2470 @unnumberedsubsubsec グラフィカル オブジェクトのサイズ
2471 @translationof Grob sizing
2472
2473 @cindex grob sizing (グラフィカル オブジェクトのサイズを決定する)
2474 @cindex sizing grobs (グラフィカル オブジェクトのサイズを決定する)
2475
2476 まず最初に、グラフィカル オブジェクトのサイズがどのように決定されるかを@c
2477 学ばなくてはなりません。@c
2478 すべてのグラフィカル オブジェクトの内部では参照ポイントが定義され、@c
2479 それはそれらの親オブジェクトとの相対位置を決定するために使用されます。@c
2480 このポイントは親オブジェクトから垂直方向に @code{X-offset}、@c
2481 垂直方向に @code{Y-offset} 離れた位置になります。@c
2482 オブジェクトの水平方向の広がりは数値のペア @code{X-extent} で与えられ、@c
2483 そのペアはオブジェクトの左端と右端の参照ポイントとの相対関係について@c
2484 述べています。@c
2485 垂直方向の広がりも同様に数値のペア @code{Y-extent} によって与えられます。@c
2486 これらは @code{grob-interface} をサポートする@c
2487 すべてのグラフィカル オブジェクトが持つプロパティです。
2488
2489 @cindex @code{extra-spacing-width}
2490
2491 デフォルトでは、譜外部オブジェクトには 0 の幅が与えられているため、@c
2492 水平方向で重なる可能性があります。@c
2493 これは @code{extra-spacing-width} に @code{'(+inf.0 . -inf.0)} を@c
2494 セットすることによって、左端の広がりにプラス無限大、右端の広がりに@c
2495 マイナス無限大を付け加えるというトリックによって達成されています。@c
2496 そのため、譜外部オブジェクトが水平方向で重ならないことを保証するには、@c
2497 @code{extra-spacing-width} の値を @code{'(0 . 0)} に@c
2498 オーバライドする必要があります。@c
2499 これにより、本当の幅が明らかになります。@c
2500 以下は強弱記号テキストに対してこれを行うコマンドです:
2501
2502 @example
2503 \override DynamicText.extra-spacing-width = #'(0 . 0)
2504 @end example
2505
2506 @noindent
2507 これが前の例で機能するかどうかを見てみましょう:
2508
2509 @cindex DynamicText, example of overriding (DynamicText をオーバライドする例)
2510 @cindex extra-spacing-width property, example (extra-spacing-width プロパティの例)
2511
2512 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2513 \dynamicUp
2514 \override DynamicText.extra-spacing-width = #'(0 . 0)
2515 a4\f b\mf c\mp b\p |
2516 @end lilypond
2517
2518 @noindent
2519 確かに強弱記号の再配置をストップさせています。@c
2520 しかし、2 つの問題が残っています。@c
2521 強弱記号を互いにもう少し離すべきであり、それらは譜から@c
2522 同じ距離にあるほうが望ましいです。@c
2523 最初の問題は簡単に解決できます。@c
2524 @code{extra-spacing-width} を 0 にする代わりに、@c
2525 もう少し大きな値を与えるのです。@c
2526 単位は 2 本の譜線の間隔なので、左端を 1 単位の半分だけ左に移動させ、@c
2527 右端を 1 単位の半分だけ右に移動させると解決になります:
2528
2529 @cindex DynamicText, example of overriding (DynamicText をオーバライドする例)
2530 @cindex extra-spacing-width property, example (extra-spacing-width プロパティの例)
2531
2532 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2533 \dynamicUp
2534 % Extend width by 1 staff space
2535 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2536 a4\f b\mf c\mp b\p
2537 @end lilypond
2538
2539 @noindent
2540 これで前よりも良くなりました。@c
2541 しかし、強弱記号が音符に合わせて上下するよりも、@c
2542 同じベースラインで揃っている方が望ましいでしょう。@c
2543 それを行うためのプロパティは @code{staff-padding} であり、@c
2544 後に続くセクションでカバーされています。
2545
2546
2547 @node オブジェクトの衝突
2548 @section オブジェクトの衝突
2549 @translationof Collisions of objects
2550
2551 @menu
2552 * オブジェクトを移動させる::
2553 * 表記の重なりを修正する::
2554 * 実際の音楽からの例::
2555 @end menu
2556
2557
2558 @node オブジェクトを移動させる
2559 @subsection オブジェクトを移動させる
2560 @translationof Moving objects
2561
2562 @cindex moving overlapping objects (重なり合っているオブジェクトを移動させる)
2563 @cindex moving colliding objects (衝突しているオブジェクトを移動させる)
2564 @cindex moving colliding grobs (衝突しているグラフィカル オブジェクトを移動させる)
2565 @cindex objects, moving colliding (衝突しているオブジェクトを移動させる)
2566 @cindex grobs, moving colliding (衝突しているグラフィカル オブジェクトを移動させる)
2567
2568 これを聞いて驚くかもしれませんが、LilyPond は完璧ではありません。@c
2569 いくつかの記譜要素が重なりある可能性があります。@c
2570 これは遺憾なことですが、実際にはごく稀です。@c
2571 通常、オブジェクトを移動させる必要性は読みやすさや美しさのためです
2572 -- オブジェクトの周りにもう少しスペースを多く/少なくとった方が@c
2573 より良くなるといった場合です。
2574
2575 記譜要素の重なりを解決する主要なアプローチが 3 つあります。@c
2576 それらは以下の順番で考慮されるべきです:
2577
2578 @enumerate
2579 @item
2580 重なり合っているオブジェクトの 1 つの @strong{direction} を
2581 @ref{譜内部オブジェクト} でリストアップした内部オブジェクトのための@c
2582 定義済みコマンドを用いて変更することになるかもしれません。@c
2583 符幹、スラー、連桁、タイ、強弱記号、テキスト、@c
2584 連符はこの方法で容易に再配置できるかもしれません。@c
2585 この方法の限界は配置の仕方の選択肢が 2 つしかないことであり、@c
2586 どちらも適当でないかもしれません。
2587
2588 @item
2589 LilyPond がレイアウト オブジェクトを配置するときに使用する@c
2590 @strong{オブジェクト プロパティ}を @code{\override} を用いて@c
2591 変更することになるかもしれません。@c
2592 オブジェクト プロパティに変更を加えることの利点は、@c
2593 (a) スペースをとる必要がある場合に他のいくつかのオブジェクトは@c
2594 自動的に移動させられます、@c
2595 (b) 1 回のオーバライドを同じオブジェクト タイプの@c
2596 インスタンスすべてに適用することができます。@c
2597 変更するプロパティには以下のものが含まれます:
2598
2599 @itemize
2600
2601 @item
2602 @code{direction}
2603
2604 これはすでに詳しくカバーされています --
2605 @ref{譜内部オブジェクト} を参照してください。
2606
2607 @item
2608 @code{padding}, @code{left-padding},
2609 @code{right-padding}, @code{staff-padding}
2610
2611 @cindex padding (パディング)
2612 @cindex left-padding property (left-padding プロパティ)
2613 @cindex padding property (padding プロパティ)
2614 @cindex right-padding property (right-padding プロパティ)
2615 @cindex staff-padding property (staff-padding プロパティ)
2616
2617 あるオブジェクトが配置されるとき、そのオブジェクトの
2618 @code{padding} プロパティが、そのオブジェクトとそのオブジェクトに@c
2619 最も隣接するオブジェクトの端との間に置かれる間隔を指定します。@c
2620 @strong{配置される最中}のオブジェクトの @code{padding} 値が@c
2621 使用されるということに注意してください。@c
2622 すでに配置されたオブジェクトの @code{padding} 値は無視されます。@c
2623 @code{padding} によって指定された間隔は @code{side-position-interface} を@c
2624 サポートするオブジェクトすべてに適用することができます。
2625
2626 臨時記号のグループの配置は、@code{padding} の代わりに、@code{left-padding} と
2627 @code{right-padding} によって制御されます。@c
2628 これらのプロパティは @code{AccidentalPlacement} オブジェクトの中にあり、@c
2629 注意すべきことに、そのオブジェクトは
2630 @strong{Staff} コンテキストの中にあります。@c
2631 譜刻プロセスでは、符頭が最初に譜刻され、臨時記号 (がある場合は) が@c
2632 次に符頭の左側に付け加えられます。@c
2633 このとき、臨時記号と符頭の間隔は
2634 @code{right-padding} プロパティによって指定されます。@c
2635 そのため、@code{AccidentalPlacement} オブジェクトの
2636 @code{right-padding} プロパティだけが臨時記号の配置に影響を与えます。
2637
2638 @code{staff-padding} プロパティは @code{padding} プロパティと@c
2639 深い関わりがあります:
2640 @code{padding} プロパティは、@code{side-position-interface} を@c
2641 サポートするオブジェクトとそれに最隣接する他のオブジェクト
2642 (一般には音符や譜線) との間のスペースの最小量を制御します。@c
2643 一方、@code{staff-padding} は常に譜の外側に配置される@c
2644 レイアウト オブジェクトにのみ適用されます --
2645 これは譜の外側に配置されるオブジェクトと譜の間に挿入されるべき@c
2646 スペースの最小量を制御します。@c
2647 @code{staff-paddin} は譜ではなく音符との相対関係で配置されるオブジェクトには@c
2648 影響を与えないということに注意してください。@c
2649 そのようなオブジェクトに対して @code{staff-padding} のオーバライドを@c
2650 行ったとしてもエラーは起きないかもしれませんが、無視されます。
2651
2652 あなたが再配置しようとしているオブジェクトに対して求められる
2653 @code{padding} プロパティはどれなのかを見つけるには、内部リファレンスに@c
2654 戻ってそのオブジェクトのプロパティを調べる必要があります。@c
2655 @code{padding} プロパティはあなたが再配置しようとしているオブジェクトの中には@c
2656 無いかもしれないということに注意してください。@c
2657 その場合は、そのオブジェクトに関係があるオブジェクトを調べてください。
2658
2659 すべての @code{padding} 値は譜スペースで測られます。@c
2660 たいていのオブジェクトでは、この値はデフォルトで約 1.0 か@c
2661 それ以下にセットされています (それぞれのオブジェクトで値はさまざまです)。@c
2662 間隔を大きく (あるいは小さく) する必要がある場合、@c
2663 その値はオーバライドされるかもしれません。
2664
2665 @item
2666 @code{self-alignment-X}
2667
2668 @cindex self-alignment-X property (self-alignment-X プロパティ)
2669
2670 このプロパティを使うことで、親オブジェクトの参照ポイントに従って、@c
2671 オブジェクトを左、右、中央に揃えることができます。@c
2672 このプロパティは @code{self-alignment-interface} をサポートする@c
2673 オブジェクトすべてに対して使用することができます。@c
2674 一般に、テキストを保持するオブジェクトです。@c
2675 値は @code{Left}, @code{RIGHT}, @code{CENTER} です。@c
2676 代替手段として、@w{@code{-1}} から @code{+1} までの数値を@c
2677 指定することもできます。@c
2678 @code{-1} は左揃えであり、@code{+1} は右揃え、@c
2679 その間の数値は左揃えから右揃えへのテキストを移動させます
2680 (訳者: @code{-0.5} であれば、左揃えと中央揃えの中間ということ)。@c
2681 @code{1} よりも大きな数値を指定することでテキストをさらに左へ、@c
2682 @w{@code{-1}} よりも小さな数値を指定することでテキストを@c
2683 さらに右へ移動させることができます。@c
2684 この値を @code{1} 増減することによる移動量はそのテキストの長さの半分です。
2685
2686 @item
2687 @code{extra-spacing-width}
2688
2689 @cindex extra-spacing-width property (extra-spacing-width プロパティ)
2690
2691 このプロパティは @code{item-interface} をサポートするオブジェクトすべてで@c
2692 利用可能です。@c
2693 このプロパティは 2 つの数値をとり、最初の数値はオブジェクトの左側に@c
2694 余白を追加し、2 番目の数値はオブジェクトの右側に余白を追加します。@c
2695 負値はオブジェクトの端を左に移動させ、正値は右に移動させます。@c
2696 そのため、オブジェクトを広くするには、最初の数値を負値にして、@c
2697 2 番目の数値を正値にする必要があります。@c
2698 すべてのオブジェクトが両方の数値を遵守するわけではないということに@c
2699 注意してください。@c
2700 例えば、@code{Accidental} オブジェクトは最初の数値 (左端) にしか@c
2701 注意を払いません。
2702
2703 @item
2704 @code{staff-position}
2705
2706 @cindex staff-position property (staff-position プロパティ)
2707
2708 @code{staff-position} は @code{staff-symbol-referencer-interface} の@c
2709 プロパティです。@c
2710 これは、譜との相対関係で配置されるオブジェクトによってサポートされます。@c
2711 このプロパティはオブジェクトの垂直方向の位置を、譜の中央にある譜線から@c
2712 譜スペースの半分を単位として、指定します。@c
2713 このプロパティは複数小節に亘る休符、タイ、異なるボイスの中にある音符といった@c
2714 レイアウト オブジェクトの衝突を解決する場合に有用です。
2715
2716 @item
2717 @code{force-hshift}
2718
2719 @cindex force-hshift property (force-hshift プロパティ)
2720
2721 和音の中で近接して配置された音符や異なるボイスの中にあって同時に起こる音符は、@c
2722 符頭の衝突を避けるために、2 つ (場合によってはそれ以上) の列に@c
2723 配置されます。@c
2724 この列は音符列と呼ばれ、その列に音符をレイアウトするために @code{NoteColumn}
2725 と呼ばれるオブジェクトが作成されます。
2726
2727 @code{force-hshift} プロパティは @code{NoteColumn} のプロパティです
2728 (実際には @code{note-column-interface} のプロパティです)。@c
2729 このプロパティを変更することで音符列を、音符列特有の単位 --
2730 すなわち、最初のボイスの中にある音符の符頭の幅 -- に従って、@c
2731 移動させることができます。@c
2732 このプロパティは、通常の
2733 @code{\shiftOn} コマンド
2734 (@ref{ボイスを明示的にインスタンス化する} を参照してください)
2735 が音符の衝突を解決できないような複雑な状況で使用されるべきです。@c
2736 この目的のためには、@code{extra-offset} プロパティを用いるよりも
2737 @code{force-hshift} プロパティを用いる方が好ましいです。@c
2738 なぜなら、譜スペースを単位とした距離を算出する必要が無く、@c
2739 @code{NoteColumn} の内外に音符を移動させることは符頭のマージといった@c
2740 他のアクションに影響を与えるからです。
2741
2742 @end itemize
2743
2744 @item
2745 最後に、他の方法がすべて失敗した場合、オブジェクトを手動で譜の中央線からの@c
2746 垂直方向の相対位置に従って、あるいは新たに設定した位置との距離に従って、@c
2747 再配置することになるかもしれません。@c
2748 この方法の欠点は、再配置のための正確な値を算出する必要がある --
2749 しばしば、その算出はそれぞれのオブジェクトに対して個々に、トライ&エラーで@c
2750 行われます -- 必要があるということ、さらに、この方法による移動は
2751 LilyPond が他のオブジェクトをすべて配置した後に行われるため、@c
2752 ユーザはその結果として起こるかもしれない衝突を@c
2753 すべて回避する責任があるということです。@c
2754 しかし、この方法の最大の問題点は、音楽が後で変更された場合に、@c
2755 再配置用の値を再び算出する必要があるということです。@c
2756 このタイプの手動再配置のために使用されるプロパティは以下のようなものです:
2757
2758 @table @code
2759 @item extra-offset
2760
2761 @cindex extra-offset property (extra-offset プロパティ)
2762
2763 このプロパティは @code{grob-interface} をサポートするレイアウト オブジェクトの@c
2764 いずれかに適用されます。@c
2765 このプロパティはペアになった数値をとり、それぞれの数値は@c
2766 水平方向と垂直方向の移動を指定します。@c
2767 負値はオブジェクトを左または下へ移動させます。@c
2768 単位は譜スペースです。@c
2769 この移動はオブジェクトの譜刻が完了した後に行われるため、あるオブジェクトを@c
2770 任意の位置へ、他のオブジェクトに影響を与えることなく、再配置することができます。
2771
2772 @item positions
2773
2774 @cindex positions property (positions プロパティ)
2775
2776 このプロパティは、連桁、スラー、連符の傾きと高さを手動で調節するために@c
2777 最も有用なプロパティです。@c
2778 このプロパティはペアになった数値をとり、それぞれの数値は連桁、@c
2779 スラーなどの左端と右端の位置を譜の中央線との距離で指定します。@c
2780 単位は譜スペースです。@c
2781 けれども、スラーとフレージング スラーを任意の値で@c
2782 再配置することはできないということに注意してください。@c
2783 LilyPond はまずスラーが取り得る位置のリストを生成し、それからデフォルトでは
2784 @qq{最良に見える} スラーを探します。@c
2785 @code{positions} がオーバライドされていた場合、@c
2786 そのリストの中からリクエストされた位置に最も近いスラーが選択されます。
2787 @end table
2788
2789 @end enumerate
2790
2791 あるオブジェクトがこれらのプロパティすべてを持っているわけではありません。@c
2792 内部リファレンスに行き、そのオブジェクトではどのプロパティが@c
2793 利用可能なのかを調べる必要があります。
2794
2795 ここで、衝突に関係しそうなオブジェクトをリスト アップします。@c
2796 内部リファレンスを調べるためのオブジェクト名を付けるので、@c
2797 それらのオブジェクトを移動させるのに使うプロパティを見つけ出すのに@c
2798 使ってください。
2799
2800 @multitable @columnfractions .5 .5
2801 @headitem オブジェクト タイプ                    @tab オブジェクト名
2802 @item アーティキュレーション (Articulation)      @tab @code{Script}
2803 @item 連桁 (Beam)                                @tab @code{Beam}
2804 @item 強弱記号 (Dynamic) (垂直方向)              @tab @code{DynamicLineSpanner}
2805 @item 強弱記号 (Dynamic) (水平方向)              @tab @code{DynamicText}
2806 @item 運指法記号 (Fingering)                     @tab @code{Fingering}
2807 @item リハーサル / テキスト記号 (Rehearsal / Text mark) @tab @code{RehearsalMark}
2808 @item スラー (Slur)                                @tab @code{Slur}
2809 @item テキスト -- つまり、@code{^"text"} (Text)  @tab @code{TextScript}
2810 @item タイ (Tie)                                 @tab @code{Tie}
2811 @item 連符 (Tuplet)                              @tab @code{TupletBracket}
2812 @end multitable
2813
2814
2815 @node 表記の重なりを修正する
2816 @subsection 表記の重なりを修正する
2817 @translationof Fixing overlapping notation
2818
2819 今度は、前のセクションで扱ったプロパティが記譜の重なりを解決する手助けを@c
2820 どのようにできるかを見ていきましょう。
2821
2822 @menu
2823 * padding プロパティ::
2824 * right-padding プロパティ::
2825 * staff-padding プロパティ::
2826 * self-alignment-X プロパティ::
2827 * staff-position プロパティ::
2828 * extra-offset プロパティ::
2829 * positions プロパティ::
2830 * force-hshift プロパティ::
2831 @end menu
2832
2833
2834 @node padding プロパティ
2835 @unnumberedsubsubsec @code{padding} プロパティ
2836 @translationof The padding property
2837
2838 @cindex padding (パディング)
2839 @cindex fixing overlapping notation (記譜要素の重なりを修正する)
2840 @cindex overlapping notation (重なり合っている記譜要素)
2841
2842 @code{padding} プロパティに値をセットすることによって、音符とその上または下に@c
2843 譜刻される記号との間の距離を増減することができます。
2844
2845 @cindex Script, example of overriding (Script をオーバライドする例)
2846 @cindex padding property, example (padding プロパティの例)
2847
2848 @lilypond[quote,fragment,relative=1,verbatim]
2849 c2\fermata
2850 \override Script.padding = #3
2851 b2\fermata
2852 @end lilypond
2853
2854 @cindex MetronomeMark, example of overriding (MetronomeMark をオーバライドする例)
2855 @cindex padding property, example (padding プロパティの例)
2856
2857 @c KEEP LY
2858 @lilypond[quote,fragment,relative=1,verbatim]
2859 % これは機能しません。この下を見てください
2860 \override MetronomeMark.padding = #3
2861 \tempo 4 = 120
2862 c1 |
2863 % これは機能します
2864 \override Score.MetronomeMark.padding = #3
2865 \tempo 4 = 80
2866 d1 |
2867 @end lilypond
2868
2869 2 番目の例では、ある特定のオブジェクトを扱うのはどのコンテキストなのかを@c
2870 突き止めることが重要であるということに注意してください。@c
2871 @code{MetronomeMark} オブジェクトは @code{Score} コンテキストの中で@c
2872 処理されるため、@code{Voice} コンテキストの中でのプロパティの変更は@c
2873 無視されます。@c
2874 更に詳細を知りたければ、@ruser{Modifying properties} を参照してください。
2875
2876 @code{outside-staff-priority} に従って配置されているオブジェクトの並びの中の@c
2877 あるオブジェクトの @code{padding} プロパティが増やされた場合、@c
2878 そのオブジェクトとそれよりも外側にあるすべてオブジェクトが移動させられます。
2879
2880
2881 @node right-padding プロパティ
2882 @unnumberedsubsubsec @code{right-padding} プロパティ
2883 @translationof The right-padding property
2884
2885 @cindex right-padding property (right-padding プロパティ)
2886
2887 @code{right-padding} プロパティは臨時記号とそれが適用される音符との間の@c
2888 スペースに影響を与えます。@c
2889 このプロパティを変更することは必ずしも必要ではありませんが、@c
2890 微分音の音楽で使われる特殊な臨時記号の図柄や図柄の組み合わせに対して@c
2891 デフォルトのスペースが適切ではない場合に必要となるかもしれません。@c
2892 臨時記号のステンシルを望みのシンボルを保持するマークアップにオーバライド@c
2893 する必要があります:
2894
2895 @cindex Accidental, example of overriding (Accidental をオーバライドする例)
2896 @cindex text property, example (text プロパティの例)
2897 @cindex stencil property, example (stencil プロパティの例)
2898 @cindex AccidentalPlacement, example of overriding (AccidentalPlacement をオーバライドする例)
2899 @cindex right-padding property, example (right-padding プロパティの例)
2900
2901 @c KEEP LY
2902 @lilypond[quote,ragged-right,verbatim]
2903 sesquisharp = \markup { \sesquisharp }
2904 \relative c'' {
2905   c4
2906   % これは 1.5 倍シャープを譜刻しますが、スペースが小さすぎます
2907   \once \override Accidental.stencil = #ly:text-interface::print
2908   \once \override Accidental.text = #sesquisharp
2909   cis4 c
2910   % これはスペースを改善しています
2911   \once \override Score.AccidentalPlacement.right-padding = #0.6
2912   \once \override Accidental.stencil = #ly:text-interface::print
2913   \once \override Accidental.text = #sesquisharp
2914   cis4 |
2915 }
2916 @end lilypond
2917
2918 @noindent
2919 これは必然的に臨時記号のステンシルをオーバライドすることになります。@c
2920 このオーバライドについては後々までカバーされません。@c
2921 ステンシル タイプは手続きでなければならず、ここでは @code{Accidental} の
2922 @code{text} プロパティの内容
2923 -- 内容には 1.5 倍シャープがセットされています
2924 -- を譜刻するように変更されています。@c
2925 それらの記号は @code{right-padding} のオーバライドによって@c
2926 符頭からさらに遠くへ移動させられています。
2927
2928 @noindent
2929
2930
2931 @node staff-padding プロパティ
2932 @unnumberedsubsubsec @code{staff-padding} プロパティ
2933 @translationof The staff-padding property
2934
2935 @cindex aligning objects on a baseline (オブジェクトをベースラインに揃える)
2936 @cindex objects, aligning on a baseline (オブジェクトをベースラインに揃える)
2937
2938 @code{staff-padding} を使うことで、強弱記号などのオブジェクトを、@c
2939 それらが取り付けられる音符の位置に依存した高さではなく、@c
2940 譜上のある固定した高さのベースラインに揃えることができます。@c
2941 このプロパティは @code{DynamicText} のプロパティではなく、@c
2942 @code{DynamicSpanner} のプロパティです。@c
2943 この理由は、このベースラインは延長スパナを含む @strong{すべて} の強弱記号に@c
2944 等しく適用されるべきだからです。@c
2945 そのため、これは以前のセクションでの例の中にある強弱記号を@c
2946 揃えるための方法になります:
2947
2948 @cindex DynamicText, example of overriding (DynamicText をオーバライドする例)
2949 @cindex extra-spacing-width property, example (extra-spacing-width プロパティの例)
2950 @cindex DynamicLineSpanner, example of overriding (DynamicLineSpanner をオーバライドする例)
2951 @cindex staff-padding property, example (staff-padding プロパティの例)
2952
2953 @c KEEP LY
2954 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2955 \dynamicUp
2956 % 幅を 1 単位広げます
2957 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2958 % 強弱記号を譜から 2 単位上のベース ラインに揃えます
2959 \override DynamicLineSpanner.staff-padding = #2
2960 a4\f b\mf c\mp b\p
2961 @end lilypond
2962
2963
2964 @node self-alignment-X プロパティ
2965 @unnumberedsubsubsec @code{self-alignment-X} プロパティ
2966 @translationof The self-alignment-X property
2967
2968 以下の例はこのプロパティが、運指法記号オブジェクトの右端を親の音符の@c
2969 参照ポイントに揃えることによって、@c
2970 弦楽器の運指法記号オブジェクトと音符の符幹とのこのプロパティが衝突を@c
2971 解決している様子を示しています:
2972
2973 @cindex StringNumber, example of overriding (StringNumber をオーバライドする例)
2974 @cindex self-alignment-X property, example (self-alignment-X プロパティの例)
2975
2976 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
2977 \voiceOne
2978 <a\2>
2979 \once \override StringNumber.self-alignment-X = #RIGHT
2980 <a\2>
2981 @end lilypond
2982
2983
2984 @node staff-position プロパティ
2985 @unnumberedsubsubsec @code{staff-position} プロパティ
2986 @translationof The staff-position property
2987
2988 @cindex object collision within a staff (譜内部でのオブジェクトの衝突)
2989
2990 あるボイスの中にある複数小節に亘る休符は他のボイスの中にある音符と@c
2991 衝突する可能性があります。@c
2992 このような休符は小節線と小節線の間の中央に譜刻されるため、@c
2993 LilyPond がそれと衝突するかもしれない音符を突き止めるのは非常に困難です。@c
2994 なぜなら、現在の音符間それに音符-休符間の衝突対応は、@c
2995 同時に起こる音符と休符に対してのみ行われるからです。@c
2996 以下に、このタイプの衝突の例を挙げます:
2997
2998 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
2999 << { c4 c c c } \\ { R1 } >>
3000 @end lilypond
3001
3002 ここでの最良の解決策は、複数小節に亘る休符を下へ移動させることです。@c
3003 なぜなら、その休符はボイス 2 の中にあるからです。@c
3004 @code{\voiceTwo} (すなわち、@code{<<@{...@} \\ @{...@}>>} 構造の
3005 2 番目のボイス) のデフォルト状態では、@c
3006 @code{MultiMeasureRest} の @code{staff-position} は @code{-4} に@c
3007 セットされています。@c
3008 そのため、そのプロパティを、例えば半譜スペース 4 つ分押し下げるには、@c
3009 @w{@code{-8}} に変更する必要があります。
3010
3011 @cindex MultiMeasureRest, example of overriding (MultiMeasureRest をオーバライドする例)
3012 @cindex staff-position property, example (staff-position プロパティの例)
3013
3014 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
3015 <<
3016   { c4 c c c }
3017   \\
3018   \override MultiMeasureRest.staff-position = #-8
3019   { R1 }
3020 >>
3021 @end lilypond
3022
3023 これは、例えば @code{extra-offset} を使うよりも良い解決方法です。@c
3024 なぜなら、その休符の上に加線が自動的に挿入されるからです。
3025
3026
3027 @node extra-offset プロパティ
3028 @unnumberedsubsubsec @code{extra-offset} プロパティ
3029 @translationof The extra-offset property
3030
3031 @cindex positioning objects (オブジェクトの位置を決定する)
3032 @cindex positioning grobs (グラフィカル オブジェクトの位置を決定する)
3033 @cindex objects, positioning (オブジェクトの位置を決定する)
3034 @cindex grobs, positioning (グラフィカル オブジェクトの位置を決定する)
3035
3036 @code{extra-offset} プロパティは、あるオブジェクトの水平方向と垂直方向の@c
3037 配置を完全に制御します。
3038
3039 以下の例では、2 番目の運指法記号が少し左に、そして 1.8 譜スペース下に@c
3040 移動させられています:
3041
3042 @cindex Fingering, example of overriding (Fingering をオーバライドする例)
3043 @cindex extra-offset property, example (extra-offset プロパティの例)
3044
3045 @lilypond[quote,fragment,relative=1,verbatim]
3046 \stemUp
3047 f4-5
3048 \once \override Fingering.extra-offset = #'(-0.3 . -1.8)
3049 f4-5
3050 @end lilypond
3051
3052
3053 @node positions プロパティ
3054 @unnumberedsubsubsec @code{positions} プロパティ
3055 @translationof The positions property
3056
3057 @cindex controlling tuplets, slurs, phrasing slurs, and beams manually (連符、スラー、フレージング スラーそれに連桁を手動で制御する)
3058 @cindex manually controlling tuplets, slurs, phrasing slurs, and beams (連符、スラー、フレージング スラーそれに連桁を手動で制御する)
3059 @cindex tuplet beams, controlling manually (連譜の連桁を手動で制御する)
3060 @cindex slurs, controlling manually (スラーを手動で制御する)
3061 @cindex phrasing slurs, controlling manually (フレージング スラーを手動で制御する)
3062 @cindex beams, controlling manually (連桁を手動で制御する)
3063
3064 @code{positions} プロパティは連符、スラー、フレージング スラー、@c
3065 連桁の位置を手動で制御することができ、それにより傾きも制御できます。
3066
3067 ここで、フレージング スラーとスラーが衝突している例を示します:
3068
3069 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
3070 a8 \( ( a'16 ) a \)
3071 @end lilypond
3072
3073 @cindex PhrasingSlur, example of overriding (PhrasingSlur をオーバライドする例)
3074 @cindex positions property, example (positions プロパティの例)
3075
3076 @noindent
3077 衝突を解決するために、フレージング スラーの両端を上に移動させます。@c
3078 左端を譜中央線よりも 2.5 譜スペース上に設定し、右端を 4.5 譜スペース上に@c
3079 設定すると、LilyPond は候補の中から両端の位置が最も設定に近いフレージング
3080 スラーを選択します:
3081
3082 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
3083 \once \override PhrasingSlur.positions = #'(2.5 . 4.5)
3084 a8 \( ( a'16 ) a \)
3085 @end lilypond
3086
3087 これで改善されました。@c
3088 しかしながら、スラーの右端を少し下げてみてはどうでしょうか?@c
3089 そうしようとした場合、この方法では実行できないことがわかります。@c
3090 すでに表示されているスラーよりも右端が下がっている候補は無く、@c
3091 そのような場合には @code{positions} は効果を持たないからです。@c
3092 しかしながら、必要があればタイ、スラー、それにフレージング スラーの@c
3093 位置と形状を非常に正確に設定することが @emph{できます}。@c
3094 正確な設定を行う方法は @ruser{Modifying ties and slurs} で学習してください。
3095
3096 もう 1 つ例を示します。@c
3097 連桁がタイと衝突しています:
3098
3099 @lilypond[quote,verbatim,fragment,ragged-right]
3100 {
3101   \time 4/2
3102   <<
3103     { c'1 ~ 2. e'8 f' }
3104     \\
3105     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3106   >>
3107   <<
3108     { c'1 ~ 2. e'8 f' }
3109     \\
3110     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3111  >>
3112 }
3113 @end lilypond
3114
3115 @noindent
3116 これは、譜の中央線から 1.81 譜スペース上の位置にある連桁の両端を、例えば、1
3117 に手動で上げることによって解決することができます:
3118
3119 @cindex Beam, example of overriding (Beam をオーバライドする例)
3120 @cindex positions property, example (positions プロパティの例)
3121
3122 @lilypond[quote,verbatim,fragment,ragged-right]
3123 {
3124   \time 4/2
3125   <<
3126     { c'1 ~ 2. e'8 f' }
3127     \\
3128     {
3129       \override Beam.positions = #'(-1 . -1)
3130       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
3131     }
3132   >>
3133   <<
3134     { c'1 ~ 2. e'8 f' }
3135     \\
3136     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3137   >>
3138 }
3139 @end lilypond
3140
3141 @noindent
3142 オーバライドの効果は継続して第 2 小節のボイス 1 の 8 分音符にも@c
3143 適用されていますが、@c
3144 ボイス 2 の連桁にはまったく適用されていないということに注意してください。
3145
3146 @node force-hshift プロパティ
3147 @unnumberedsubsubsec @code{force-hshift} プロパティ
3148 @translationof The force-hshift property
3149
3150 今や、@ref{私はボイスを聴いている} の最後で挙げた Chopin の例に@c
3151 どのように修正を加えるべきかを知っています。@c
3152 この例は以下のような状態でした:
3153
3154 @lilypond[quote,verbatim,fragment,ragged-right]
3155 \new Staff \relative c'' {
3156   \key aes \major
3157   <<
3158     { c2 aes4. bes8 }
3159     \\
3160     { <ees, c>2 des }
3161     \\
3162     \\
3163     { aes'2 f4 fes }
3164   >> |
3165   <c ees aes c>1 |
3166 }
3167 @end lilypond
3168
3169 @noindent
3170 最初の和音の内声の音 (つまり、4 番目のボイスにある A-フラット) を上の音符の@c
3171 音符列からずらす必要はありません。@c
3172 これを修正するには、下の音符の @code{force-hshift} --
3173 これは @code{NoteColumn} のプロパティです -- を 0 にセットします。@c
3174
3175 2 番目の和音では、F を A-フラットに揃えて、符幹の衝突を避けるために@c
3176 最下段の音符を少し右に移動させるべきでしょう。@c
3177 そうするには、D-フラットの @code{NoteColumn} の @code{force-hshift}
3178 を設定して譜スペースの半分だけ右にずらします。
3179 2 番目の和音の下の方の音符は、上の方の音符のすぐ右に置くのが最良です。@c
3180 そうするには、この音符の @code{force-hshift} を 0.5 にセットします --
3181 つまり、上の方の音符の音符列から符頭の幅の半分だけ右にずらします。
3182
3183 ここで、最終結果を挙げます:
3184
3185 @cindex NoteColumn, example of overriding (NoteColumn をオーバライドする例)
3186 @cindex force-hshift property, example (force-hshift プロパティの例)
3187
3188 @lilypond[quote,verbatim,fragment,ragged-right]
3189 \new Staff \relative c'' {
3190   \key aes \major
3191   <<
3192     { c2 aes4. bes8 }
3193     \\
3194     {
3195       <ees, c>2
3196       \once \override NoteColumn.force-hshift = #0.5
3197       des2
3198     }
3199     \\
3200     \\
3201     {
3202       \override NoteColumn.force-hshift = #0
3203       aes'2 f4 fes
3204     }
3205   >> |
3206   <c ees aes c>1 |
3207 }
3208 @end lilypond
3209
3210
3211 @node 実際の音楽からの例
3212 @subsection 実際の音楽からの例
3213 @translationof Real music example
3214
3215 調整についてのセクションを、望みの出力を作り出すためにいくつかの調整を@c
3216 必要とするトリッキーな例を処理するときにとられるステップを示すことで@c
3217 締めくくります。@c
3218 この例は、記譜法についての普通ではない問題を解決するための記譜法リファレンスの@c
3219 使い方を示すために慎重に選ばれたものです。@c
3220 この例は一般的な譜刻プロセスを代表するものではありません。@c
3221 ですから、この例の複雑さでやる気を失わないでください!@c
3222 幸いなことに、このように複雑な問題は非常に稀です!
3223
3224 この例は Chopin の Première Ballade, Op. 23 の第 6 - 9 小節からとりました。@c
3225 序盤の Lento から Moderato へと移調する部分です。@c
3226 まず最初に望んでいる出力挙げますが、例があまりにも複雑になり過ぎないように@c
3227 強弱記号、運指法記号、ペダル記号は省きました。
3228
3229 @c The following should appear as music without code
3230 @c This example should not be indexed
3231 @c line-width ensures no break
3232 @c KEEP LY
3233 @lilypond[quote,ragged-right,line-width=6\in]
3234 rhMusic = \relative c'' {
3235   \new Voice {
3236     r2 c4.\( g8 |
3237     \once \override Tie.staff-position = #3.5
3238     bes1~ |
3239     \bar "||"
3240     \time 6/4
3241     \mergeDifferentlyHeadedOn
3242     \mergeDifferentlyDottedOn
3243     bes2.^\markup { \bold "Moderato" } r8
3244     <<
3245       { c,8 d fis bes a }
3246       \new Voice {
3247         \voiceTwo
3248         c,8~
3249         % マージされる音符の右にある c2 を再配置します
3250         \once \override NoteColumn.force-hshift = #1.0
3251         % c2 をメインの音符列から外したため、
3252         % マージが機能します
3253         \shiftOnn
3254         c2
3255       }
3256       \new Voice {
3257         \voiceThree
3258         s8
3259         % マージさせるために d2 の符幹を下向きにする必要があります
3260         \stemDown
3261         % d2 の符幹を不可視にします
3262         \tweak Stem.transparent ##t
3263         d2
3264       }
3265       \new Voice {
3266         \voiceFour
3267         s4 fis4.
3268       }
3269     >> |
3270     \mergeDifferentlyHeadedOff
3271     \mergeDifferentlyDottedOff
3272     g2.\)
3273   }
3274 }
3275
3276 lhMusic = \relative c' {
3277   r2 <c g ees>2( |
3278   <d g, d>1)\arpeggio |
3279   r2. d,,4 r4 r |
3280   r4
3281 }
3282
3283 \score {
3284   \new PianoStaff <<
3285     \new Staff = "RH"  <<
3286       \key g \minor
3287       \rhMusic
3288     >>
3289     \new Staff = "LH" <<
3290       \key g \minor
3291       \clef "bass"
3292       \lhMusic
3293     >>
3294   >>
3295 }
3296 @end lilypond
3297
3298 まず、第 3 小節の右手パートには 4 つのボイスが必要であることに注目します。@c
3299 それぞれのボイスは、連桁でつながれた 5 つの 8 分音符、タイで結ばれた C、@c
3300 半音符の D (これは 8 分音符の D とマージされています)、@c
3301 付点 4 分音符の F シャープ (これも同じピッチの 8 分音符とマージされています)
3302 です。@c
3303 他の部分はすべて単一のボイスなので、最も容易な方法は
3304 4 つのボイスを必要になったときに一時的に導入する方法です。@c
3305 一時的に多声にする方法を忘れてしまったのならば、@c
3306 @ref{私はボイスを聴いている} と @ref{ボイスを明示的にインスタンス化する}
3307 を参照してください。@
3308 ここでは、多声パッセージに明示的にインスタンス化されたボイスを使うことにします。@c
3309 なぜなら、すべてのボイスが明示的にインスタンス化されている方が、@c
3310 LilyPond はうまく衝突を回避できるからです。
3311
3312 音符を 2 つの変数として入力し、@c
3313 譜構造を Score ブロックの中でセットアップすることから始めて、@c
3314 それで LilyPond がデフォルトでどのような出力を作り出すのか見てみましょう:
3315
3316 @c line-width ensures no break
3317 @c KEEP LY
3318 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3319 rhMusic = \relative c'' {
3320   \new Voice {
3321     r2 c4. g8 |
3322     bes1~ |
3323     \time 6/4
3324     bes2. r8
3325     % 4 つのボイスの多声セクションの開始
3326     <<
3327       { c,8 d fis bes a }  % メイン ボイスの続き
3328       \new Voice {
3329         \voiceTwo
3330         c,8~ 2
3331       }
3332       \new Voice {
3333         \voiceThree
3334         s8 d2
3335       }
3336       \new Voice {
3337         \voiceFour
3338         s4 fis4.
3339       }
3340     >> |
3341     g2.  % メイン ボイスの続き
3342   }
3343 }
3344
3345 lhMusic = \relative c' {
3346   r2 <c g ees>2 |
3347   <d g, d>1 |
3348   r2. d,,4 r4 r |
3349   r4
3350 }
3351
3352 \score {
3353   \new PianoStaff <<
3354     \new Staff = "RH"  <<
3355       \key g \minor
3356       \rhMusic
3357     >>
3358     \new Staff = "LH" <<
3359       \key g \minor
3360       \clef "bass"
3361       \lhMusic
3362     >>
3363   >>
3364 }
3365 @end lilypond
3366
3367 すべての音符は間違っていません。@c
3368 しかしながら、見た目は満足とは程遠いものです。@c
3369 タイは移調する拍子記号と衝突していて、第 3 小節の連桁の付け方は@c
3370 間違っていて、音符はマージされておらず、いくつかの記譜要素は欠けています。@c
3371 簡単なものから片付けていきましょう。@c
3372 連桁の付け方は手動で連桁を挿入することで修正でき、左手パートのスラーと@c
3373 右手パートのフレージング スラーは簡単に追加できます
3374 -- なぜなら、これらはすべてチュートリアルでカバーされているからです。@c
3375 これらの修正を加えると、以下のようになります:
3376
3377 @c line-width ensures no break
3378 @c KEEP LY
3379 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3380 rhMusic = \relative c'' {
3381   \new Voice {
3382     r2 c4.\( g8 |
3383     bes1~ |
3384     \time 6/4
3385     bes2. r8
3386     % 4 つのボイスの多声セクションの開始
3387     <<
3388       { c,8 d fis bes a }  % メイン ボイスの続き
3389       \new Voice {
3390         \voiceTwo
3391         c,8~ 2
3392       }
3393       \new Voice {
3394         \voiceThree
3395         s8 d2
3396       }
3397       \new Voice {
3398         \voiceFour
3399         s4 fis4.
3400       }
3401     >> |
3402     g2.\)  % メイン ボイスの続き
3403   }
3404 }
3405
3406 lhMusic = \relative c' {
3407   r2 <c g ees>2( |
3408   <d g, d>1) |
3409   r2. d,,4 r4 r |
3410   r4
3411 }
3412
3413 \score {
3414   \new PianoStaff <<
3415     \new Staff = "RH"  <<
3416       \key g \minor
3417       \rhMusic
3418     >>
3419     \new Staff = "LH" <<
3420       \key g \minor
3421       \clef "bass"
3422       \lhMusic
3423     >>
3424   >>
3425 }
3426 @end lilypond
3427
3428 第 1 小節は正しくなりました。@c
3429 第 2 小節にはアルペジオが含まれていて、2 重の小節線で終わります。@c
3430 この学習マニュアルではこれらのことは言及されてこなかったのに、@c
3431 どうやってやればいいのでしょうか?@c
3432 ここで、記譜法リファレンスに移行する必要があります。@c
3433 索引で @q{arpeggio} と @q{bar line} を探せばすぐに、アルペジオは
3434 @code{\arpeggio} を和音の後に付け加えることによって作り出され、@c
3435 2 重小節線は @code{\bar "||"} コマンドによって作り出されることが@c
3436 わかります。@c
3437 それは簡単にできます。@c
3438 次に、タイと拍子記号の衝突を修正する必要があります。@c
3439 これはタイを上に移動させる方法が最善です。@c
3440 オブジェクトの移動については以前に @ref{オブジェクトを移動させる} でカバーしました。@c
3441 そこでは、譜との相対位置で配置されるオブジェクトは、@c
3442 そのオブジェクトの @code{staff-position} プロパティを@c
3443 オーバライドすることによって、移動させることができると述べられています。@c
3444 このプロパティは譜スペースの半分を単位として、譜の中央線からの距離で@c
3445 指定されます。@c
3446 ですから、以下の以下のオーバライドをタイで結ばれる最初の音符の前に置けば、@c
3447 タイは中央線から 3.5 半譜スペースだけ上の位置に移動させられます:
3448
3449 @code{\once \override Tie.staff-position = #3.5}
3450
3451 これで第 2 小節の修正も完了で、以下のようになります:
3452
3453 @c line-width ensures no break
3454 @c KEEP LY
3455 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3456 rhMusic = \relative c'' {
3457   \new Voice {
3458     r2 c4.\( g8 |
3459     \once \override Tie.staff-position = #3.5
3460     bes1~ |
3461     \bar "||"
3462     \time 6/4
3463     bes2. r8
3464     % 4 つのボイスの多声セクションの開始
3465     <<
3466       { c,8 d fis bes a }  % メイン ボイスの続き
3467       \new Voice {
3468         \voiceTwo
3469         c,8~ 2
3470       }
3471       \new Voice {
3472         \voiceThree
3473         s8 d2
3474       }
3475       \new Voice {
3476         \voiceFour
3477         s4 fis4.
3478       }
3479     >> |
3480     g2.\)  % メイン ボイスの続き
3481   }
3482 }
3483
3484 lhMusic = \relative c' {
3485   r2 <c g ees>2( |
3486   <d g, d>1)\arpeggio |
3487   r2. d,,4 r4 r |
3488   r4
3489 }
3490
3491 \score {
3492   \new PianoStaff <<
3493     \new Staff = "RH"  <<
3494       \key g \minor
3495       \rhMusic
3496     >>
3497     \new Staff = "LH" <<
3498       \key g \minor
3499       \clef "bass"
3500       \lhMusic
3501     >>
3502   >>
3503 }
3504 @end lilypond
3505
3506 第 3 小節 -- Moderato セクションの開始部分 -- に取り掛かります。@c
3507 チュートリアルで @code{\markup} コマンドを使ってボールド体のテキストを@c
3508 付け加える方法を示しましたので、@q{Moderato} をボールド体で付け加えることは@c
3509 容易です。@c
3510 しかし、異なるボイスの中にある音符をマージするにはどうするのでしょうか?@c
3511 ここで、助けを求めて記譜法リファレンスに移行する必要があります。@c
3512 記譜法リファレンスで @qq{merge} を探せばすぐに、@c
3513 @ruser{Collision resolution} で符頭や付点の付き方が異なる音符を@c
3514 マージするためのコマンドにたどり着きます。@c
3515 今回の例では、多声部セクションで両方のタイプの音符をマージする
3516 (異なる符頭を持つ音符のマージと、付点の付き方が異なる音符のマージ)
3517 必要があるので、記譜法リファレンスで見つけた情報を使って、以下のコマンド:
3518
3519 @example
3520 \mergeDifferentlyHeadedOn
3521 \mergeDifferentlyDottedOn
3522 @end example
3523
3524 @noindent
3525 を多声部セクションの開始点に置き、以下のコマンド:
3526
3527 @example
3528 \mergeDifferentlyHeadedOff
3529 \mergeDifferentlyDottedOff
3530 @end example
3531
3532 @noindent
3533 をセクションの終了点に置きます。これで、例は以下のようになります:
3534
3535 @c line-width ensures no break
3536 @c KEEP LY
3537 @lilypond[quote,ragged-right,line-width=6\in]
3538 rhMusic = \relative c'' {
3539   \new Voice {
3540     r2 c4.\( g8 |
3541     \once \override Tie.staff-position = #3.5
3542     bes1~ |
3543     \bar "||"
3544     \time 6/4
3545     bes2.^\markup { \bold "Moderato" } r8
3546     \mergeDifferentlyHeadedOn
3547     \mergeDifferentlyDottedOn
3548     % 4 つのボイスの多声セクションの開始
3549     <<
3550       { c,8 d fis bes a }  % メイン ボイスの続き
3551       \new Voice {
3552         \voiceTwo
3553         c,8~ 2
3554       }
3555       \new Voice {
3556         \voiceThree
3557         s8 d2
3558       }
3559       \new Voice {
3560         \voiceFour
3561         s4 fis4.
3562       }
3563     >> |
3564     \mergeDifferentlyHeadedOff
3565     \mergeDifferentlyDottedOff
3566     g2.\)  % メイン ボイスの続き
3567   }
3568 }
3569
3570 lhMusic = \relative c' {
3571   r2 <c g ees>2( |
3572   <d g, d>1)\arpeggio |
3573   r2. d,,4 r4 r |
3574   r4
3575 }
3576
3577 \score {
3578   \new PianoStaff <<
3579     \new Staff = "RH"  <<
3580       \key g \minor
3581       \rhMusic
3582     >>
3583     \new Staff = "LH" <<
3584       \key g \minor
3585       \clef "bass"
3586       \lhMusic
3587     >>
3588   >>
3589 }
3590 @end lilypond
3591
3592 オーバライドは 2 つの F シャープの音符をマージしましたが、@c
3593 2 つの D をマージしませんでした。@c
3594 なぜマージしなかったのでしょうか?@c
3595 その答えは記譜法リファレンスの同じセクションにあります
3596 -- マージされる音符は反対向きの符幹を持っていなくてはならず、@c
3597 同じ音符列に 3 つ目の音符がある場合は 2 つの音符をマージさせることは@c
3598 できません。@c
3599 今回の例では、2 つの D は両方とも上向きの符幹を持っていて、@c
3600 3 つ目の音符 -- C -- が存在します。@c
3601 我々は @code{\stemDown} を用いて符幹の向きを変更する方法を知っていて、@c
3602 記譜法リファレンスも C を移動させる方法について述べています --
3603 @code{\shift} コマンドの 1 つを用いてシフトを行います。@c
3604 しかし、どのシフトを行えばよいのでしょうか?@c
3605 C はシフト off のボイス 2 の中にあり、2 つの D はボイス 1 とボイス 3 --
3606 それぞれ、シフト off とシフト on -- の中にあります。@c
3607 ですから、C が 2 つの D と衝突するのを避けるために、@c
3608 @code{\shiftOnn} を用いて C を更にシフトさせる必要があります。@c
3609 これらの変更を加えると、以下のようになります:
3610
3611 @cindex Tie, example of overriding (Tie をオーバライドする例)
3612 @cindex staff-position property, example (staff-position プロパティの例)
3613
3614 @c line-width ensures no break
3615 @c KEEP LY
3616 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3617 rhMusic = \relative c'' {
3618   \new Voice {
3619     r2 c4.\( g8 |
3620     \once \override Tie.staff-position = #3.5
3621     bes1~ |
3622     \bar "||"
3623     \time 6/4
3624     bes2.^\markup { \bold "Moderato" } r8
3625     \mergeDifferentlyHeadedOn
3626     \mergeDifferentlyDottedOn
3627     % 4 つのボイスの多声セクションの開始
3628     <<
3629       { c,8 d fis bes a }  % メイン ボイスの続き
3630       \new Voice {
3631         \voiceTwo
3632         % c2 をメインの音符列から外したため、
3633         % マージが機能します
3634         c,8~ \shiftOnn c2
3635       }
3636       \new Voice {
3637         \voiceThree
3638         % マージさせるために d2 の符幹を下向きにする必要があります
3639         s8 \stemDown d2
3640       }
3641       \new Voice {
3642         \voiceFour
3643         s4 fis4.
3644       }
3645     >> |
3646     \mergeDifferentlyHeadedOff
3647     \mergeDifferentlyDottedOff
3648     g2.\)  % メイン ボイスの続き
3649   }
3650 }
3651
3652 lhMusic = \relative c' {
3653   r2 <c g ees>2( |
3654   <d g, d>1)\arpeggio |
3655   r2. d,,4 r4 r |
3656   r4
3657 }
3658
3659 \score {
3660   \new PianoStaff <<
3661     \new Staff = "RH"  <<
3662       \key g \minor
3663       \rhMusic
3664     >>
3665     \new Staff = "LH" <<
3666       \key g \minor
3667       \clef "bass"
3668       \lhMusic
3669     >>
3670   >>
3671 }
3672 @end lilypond
3673
3674 もうちょっとです。@c
3675 残っている問題は 2 つだけです:
3676 マージされた D の下向きの符幹はあるべきではなく、C は D の右側に配置した方が@c
3677 良いということです。@c
3678 以前に行った調整からこれらを行う方法を両方とも知っています:
3679 符幹を透明にして、@code{force-hshift} プロパティを用いて C を移動させます。@c
3680 ここで、最終結果を示します:
3681
3682 @cindex NoteColumn, example of overriding (NoteColumn をオーバライドする例)
3683 @cindex force-hshift property, example (force-hshift プロパティの例)
3684 @cindex Stem, example of overriding (Stem をオーバライドする例))
3685 @cindex transparent property, example (transparent プロパティの例)
3686
3687 @c line-width ensures no break
3688 @c KEEP LY
3689 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3690 rhMusic = \relative c'' {
3691   \new Voice {
3692     r2 c4.\( g8 |
3693     \once \override Tie.staff-position = #3.5
3694     bes1~ |
3695     \bar "||"
3696     \time 6/4
3697     bes2.^\markup { \bold "Moderato" } r8
3698     \mergeDifferentlyHeadedOn
3699     \mergeDifferentlyDottedOn
3700     % 4 つのボイスの多声セクションの開始
3701     <<
3702       { c,8 d fis bes a }  % メイン ボイスの続き
3703       \new Voice {
3704         \voiceTwo
3705         c,8~
3706         % マージされる音符の右にある c2 を再配置します
3707         \once \override NoteColumn.force-hshift = #1.0
3708         % c2 をメインの音符列から外したため、マージが機能します
3709         \shiftOnn
3710         c2
3711       }
3712       \new Voice {
3713         \voiceThree
3714         s8
3715         % マージさせるために d2 の符幹を下向きにする必要があります
3716         \stemDown
3717         % d2 の符幹を不可視にします
3718         \tweak Stem.transparent ##t
3719         d2
3720       }
3721       \new Voice {
3722         \voiceFour
3723         s4 fis4.
3724       }
3725     >> |
3726     \mergeDifferentlyHeadedOff
3727     \mergeDifferentlyDottedOff
3728     g2.\)  % メイン ボイスの続き
3729   }
3730 }
3731
3732 lhMusic = \relative c' {
3733   r2 <c g ees>2( |
3734   <d g, d>1)\arpeggio |
3735   r2. d,,4 r4 r |
3736   r4
3737 }
3738
3739 \score {
3740   \new PianoStaff <<
3741     \new Staff = "RH"  <<
3742       \key g \minor
3743       \rhMusic
3744     >>
3745     \new Staff = "LH" <<
3746       \key g \minor
3747       \clef "bass"
3748       \lhMusic
3749     >>
3750   >>
3751 }
3752 @end lilypond
3753
3754
3755 @node 更なる調整
3756 @section 更なる調整
3757 @translationof Further tweaking
3758
3759 @menu
3760 * 調整のその他の使用方法::
3761 * 調整のために変数を使用する::
3762 * スタイル シート::
3763 * その他の情報源::
3764 * Scheme を用いた高度な調整::
3765 @end menu
3766
3767 @node 調整のその他の使用方法
3768 @subsection 調整のその他の使用方法
3769 @translationof Other uses for tweaks
3770
3771 @menu
3772 * 異なるボイスの中にある音符をタイで結ぶ::
3773 * MIDI でフェルマータをシミュレートする::
3774 @end menu
3775
3776 @cindex transparent property, use of (transparent プロパティの使用方法)
3777 @cindex objects, making invisible (オブジェクトを不可視にする)
3778 @cindex removing objects (オブジェクトを削除する)
3779 @cindex objects, removing (オブジェクトを削除する)
3780 @cindex hiding objects (オブジェクトを隠す)
3781 @cindex objects, hiding (オブジェクトを隠す)
3782 @cindex invisible objects (不可視のオブジェクト)
3783 @cindex objects, invisible (不可視のオブジェクト)
3784
3785
3786 @node 異なるボイスの中にある音符をタイで結ぶ
3787 @unnumberedsubsubsec 異なるボイスの中にある音符をタイで結ぶ
3788 @translationof Tying notes across voices
3789
3790 @cindex tying notes across voices (異なるボイスの中にある音符をタイで結ぶ)
3791
3792 以下の例は異なるボイスの中にある音符をタイで結ぶ方法を示しています。@c
3793 通常、タイで結べるのは同じボイスの中にある 2 つ音符だけです。@c
3794 2 つのボイスを使い、そのうちの 1 つにタイで結んだ音符を置きます:
3795
3796 @lilypond[quote,fragment,relative=2]
3797 << { b8~ 8\noBeam } \\ { b8[ g] } >>
3798 @end lilypond
3799
3800 @noindent
3801 そして、そのボイスの最初の上向き符幹を消します。@c
3802 これで、タイはボイスをまたがっているように見えます:
3803
3804 @cindex Stem, example of overriding (Stem をオーバライドする例)
3805 @cindex transparent property, example (transparent プロパティの例)
3806
3807 @lilypond[quote,fragment,relative=2,verbatim]
3808 <<
3809   {
3810     \tweak Stem.transparent ##t
3811     b8~ 8\noBeam
3812   }
3813 \\
3814   { b8[ g] }
3815 >>
3816 @end lilypond
3817
3818 符幹は表示されなくなっただけなので、タイの長さが十分ではありません。@c
3819 符幹の @code{length} を @code{8} にセットすることで符幹を伸ばすことができます:
3820
3821 @lilypond[quote,fragment,relative=2,verbatim]
3822 <<
3823   {
3824     \tweak Stem.transparent ##t
3825     \tweak Stem.length #8
3826     b8~ 8\noBeam
3827   }
3828 \\
3829   { b8[ g] }
3830 >>
3831 @end lilypond
3832
3833 @funindex \single
3834 @cindex tweak, generated from override
3835 今度は、グラフィカル オブジェクトの透明性を @emph{オーバライド} する@c
3836 ことで実現します。@c
3837 これまでに説明した短縮形 @code{\hide} を使います。@c
3838 調整と異なり、オーバライドは単一の音楽表記から生成されたプロパティにだけ@c
3839 効果を持ちます。@c
3840 @code{\single} を用いてオーバライドを調整に変換することができので、@c
3841 上記の例を以下のように書き換えることができます:
3842
3843 @lilypond[quote,fragment,relative=2,verbatim]
3844 <<
3845   {
3846     \single \hide Stem
3847     \single \hide Flag
3848     \tweak Stem.length #8
3849     b8~ 8\noBeam
3850   }
3851 \\
3852   { b8[ g] }
3853 >>
3854 @end lilypond
3855
3856 今回のケースでは、@code{\once \hide} との違いははっきりしません。@c
3857 同じ音楽タイミングに複数のオブジェクトが存在する場合
3858 (和音の中にある符頭のように)、この違いは重要になります。@c
3859 そのような場合、@code{\once} はすべてのオブジェクトに影響を与える@c
3860 のに対して、@code{\single} は直後にある音楽表記によって生成された@c
3861 ただ 1 つのオブジェクトだけに影響を与えます。
3862
3863
3864 @node MIDI でフェルマータをシミュレートする
3865 @unnumberedsubsubsec MIDI でフェルマータをシミュレートする
3866 @translationof Simulating a fermata in MIDI
3867
3868 @cindex stencil property, use of (stencil プロパティの使用方法)
3869 @cindex fermata, implementing in MIDI (MIDI でフェルマータ を実装する)
3870
3871 譜外部オブジェクトを出力から削除しようとする場合、そのオブジェクトの
3872 @code{transparent} プロパティではなく @code{stencil} プロパティを@c
3873 オーバライドする方が通常は望ましいです。@c
3874 あるオブジェクトの @code{stencil} プロパティを
3875 @code{#f} にセットすると、@c
3876 そのオブジェクトは出力から完全に削除されます。@c
3877 このことは、削除されたオブジェクトがそのオブジェクトとの相対位置で@c
3878 配置される他のオブジェクトの配置にまったく影響を及ぼさないということを@c
3879 意味します。
3880
3881 例えば、MIDI 出力でフェルマータをシミュレートするためにメトロノーム設定を@c
3882 変更したいとします。@c
3883 その場合、メトロノーム記号を出力に表示させたくありません。@c
3884 そして、それが 2 つのシステム (小節とその中にある表記) 間のスペースと、@c
3885 譜上にある隣接する注釈の位置に影響を与えることを望みません。@c
3886 そのため、そのメトロノーム記号の @code{stencil} プロパティを
3887 @code{#f} にセットする方法が最良です。@c
3888 ここで、2 つの手法の結果を示します:
3889
3890 @cindex MetronomeMark, example of overriding (MetronomeMark をオーバライドする例)
3891 @cindex transparent property, example (transparent プロパティの例)
3892
3893 @lilypond[quote,verbatim,ragged-right]
3894 \score {
3895   \relative c'' {
3896     % Visible tempo marking
3897     \tempo 4=120
3898     a4 a a
3899     \once \hide Score.MetronomeMark
3900     % Invisible tempo marking to lengthen fermata in MIDI
3901     \tempo 4=80
3902     a4\fermata |
3903     % New tempo for next section
3904     \tempo 4=100
3905     a4 a a a |
3906   }
3907   \layout { }
3908   \midi { }
3909 }
3910 @end lilypond
3911
3912 @cindex MetronomeMark, example of overriding (MetronomeMark をオーバライドする例)
3913 @cindex stencil property, example (stencil プロパティの例)
3914
3915 @lilypond[quote,verbatim,ragged-right]
3916 \score {
3917   \relative c'' {
3918     % Visible tempo marking
3919     \tempo 4=120
3920     a4 a a
3921     \once \omit Score.MetronomeMark
3922     % Invisible tempo marking to lengthen fermata in MIDI
3923     \tempo 4=80
3924     a4\fermata |
3925     % New tempo for next section
3926     \tempo 4=100
3927     a4 a a a |
3928   }
3929   \layout { }
3930   \midi { }
3931 }
3932 @end lilypond
3933
3934 @noindent
3935 両方の手段とも、フェルマータ部分の演奏時間を伸ばすメトロノーム記号を@c
3936 出力から削除していて、両方とも MIDI の演奏に必要な効果を与えています。@c
3937 しかし、1 番目の例の透明なメトロノーム記号がそれに続く拍子指示を@c
3938 上に押し上げているのに対して、2 番目のメトロノーム記号 (ステンシルが@c
3939 削除されたもの) は押し上げていません。
3940
3941 @seealso
3942 音楽用語集:
3943 @rglos{system}
3944
3945
3946 @node 調整のために変数を使用する
3947 @subsection 調整のために変数を使用する
3948 @translationof Using variables for tweaks
3949
3950 @cindex variables, using for tweaks (調整のために変数を使用する)
3951 @cindex using variables for tweaks (調整のために変数を使用する)
3952 @cindex tweaks, using variables for (調整のために変数を使用する)
3953
3954 オーバライド コマンドはしばしば長く、入力するのが大変なものになります。@c
3955 そして、それらは完全に正しく記述されなければなりません。@c
3956 同じオーバライドが何度も使用される場合、それらを保持する変数を定義すると@c
3957 非常に役に立ちます。
3958
3959 歌詞の中のある特定の単語をボールド イタリック体で譜刻することによって、@c
3960 それらを強調したいと仮定します。@c
3961 歌詞の中では、@code{\italic} と @code{\bold} は (書式を) 変更したい@c
3962 単語や文と一緒に @code{\markup} ブロックの中に入れた場合にのみ@c
3963 機能しますが、それを毎回入力するのは大変です。@c
3964 埋め込む必要のある単語自体が、2 つのコマンドを簡単な変数を用いて使うことを@c
3965 妨げます。@c
3966 代替手段として、@code{\override} コマンドと @code{\revert} コマンドを@c
3967 使うことはできないでしょうか?
3968
3969 @example
3970 @code{\override Lyrics.LyricText.font-shape = #'italic}
3971 @code{\override Lyrics.LyricText.font-series = #'bold}
3972
3973 @code{\revert Lyrics.LyricText.font-shape}
3974 @code{\revert Lyrics.LyricText.font-series}
3975 @end example
3976
3977 これらも、強調する必要のある単語がたくさんある場合、入力するのが@c
3978 非常に大変です。@c
3979 しかしながら、これらは 2 つの変数として定義することが@emph{でき}、@c
3980 それらの変数で単語を囲むことによって使ってその単語を強調することが@c
3981 @emph{できます}。@c
3982 これらのオーバライドに変数を用いることのもう 1 つの利点は、@c
3983 ドットの両側にスペースを置く必要が無いことです。@c
3984 なぜなら、これらのオーバライドは @code{\lyricmode} の中で@c
3985 直接解釈されるわけではないからです。@c
3986 ここで変数を用いる例を挙げますが、実際には早く打ち込めるように@c
3987 もっと短い変数名を使用します:
3988
3989 @cindex LyricText, example of overriding (LyricText をオーバライドする例)
3990 @cindex font-shape property, example (font-shape プロパティの例)
3991 @cindex font-series property, example (font-series プロパティの例)
3992
3993 @lilypond[quote,verbatim]
3994 emphasize = {
3995   \override Lyrics.LyricText.font-shape = #'italic
3996   \override Lyrics.LyricText.font-series = #'bold
3997 }
3998
3999 normal = {
4000   \revert Lyrics.LyricText.font-shape
4001   \revert Lyrics.LyricText.font-series
4002 }
4003
4004 global = { \key c \major \time 4/4 \partial 4 }
4005
4006 SopranoMusic = \relative c' { c4 | e4. e8 g4 g    | a4   a   g  }
4007 AltoMusic    = \relative c' { c4 | c4. c8 e4 e    | f4   f   e  }
4008 TenorMusic   = \relative c  { e4 | g4. g8 c4.  b8 | a8 b c d e4 }
4009 BassMusic    = \relative c  { c4 | c4. c8 c4 c    | f8 g a b c4 }
4010
4011 VerseOne = \lyrics {
4012   E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
4013 }
4014
4015 VerseTwo = \lyricmode {
4016   O | \once \emphasize Christ, whose voice the | wa -- ters heard,
4017 }
4018
4019 VerseThree = \lyricmode {
4020   O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
4021 }
4022
4023 VerseFour = \lyricmode {
4024   O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
4025 }
4026
4027 \score {
4028   \new ChoirStaff <<
4029     \new Staff <<
4030       \clef "treble"
4031       \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
4032       \new Voice = "Alto" { \voiceTwo \AltoMusic }
4033       \new Lyrics \lyricsto "Soprano" { \VerseOne }
4034       \new Lyrics \lyricsto "Soprano" { \VerseTwo }
4035       \new Lyrics \lyricsto "Soprano" { \VerseThree }
4036       \new Lyrics \lyricsto "Soprano" { \VerseFour }
4037     >>
4038     \new Staff <<
4039       \clef "bass"
4040       \new Voice = "Tenor" { \voiceOne \TenorMusic }
4041       \new Voice = "Bass"  { \voiceTwo \BassMusic }
4042     >>
4043   >>
4044 }
4045 @end lilypond
4046
4047
4048 @node スタイル シート
4049 @subsection スタイル シート
4050 @translationof Style sheets
4051
4052 LilyPond が作り出す出力にはさまざまな変更を加えることができます
4053 (詳細は @ref{出力を調整する} を参照してください)。@c
4054 しかしながら、調整を加えたい入力ファイルがたくさんあるとしたらどうでしょう?@c
4055 また、単に調整を実際の音楽表記から分離したいとしたらどうでしょう?@c
4056 これはとても簡単なことです。
4057
4058 以下の例を見てみましょう。@c
4059 @code{#()} を持つ部分を理解できなくても心配しないでください。@c
4060 @ref{Scheme を用いた高度な調整} で説明されています。
4061
4062 @lilypond[quote,verbatim,ragged-right]
4063 mpdolce =
4064 #(make-dynamic-script
4065   #{ \markup { \hspace #0
4066                \translate #'(5 . 0)
4067                \line { \dynamic "mp"
4068                        \text \italic "dolce" } }
4069   #})
4070
4071 inst =
4072 #(define-music-function
4073      (parser location string)
4074      (string?)
4075    #{ <>^\markup \bold \box #string #})
4076
4077 \relative c'' {
4078   \tempo 4=50
4079   a4.\mpdolce d8 cis4--\glissando a |
4080   b4 bes a2 |
4081   \inst "Clarinet"
4082   cis4.\< d8 e4 fis |
4083   g8(\! fis)-. e( d)-. cis2 |
4084 }
4085 @end lilypond
4086
4087 @code{mpdolce} と @code{tempoMark} の定義に手を加えてみることにします。@c
4088 それらは望みの出力を作り出していますが、それらを別の楽曲で使いたいとします。@c
4089 単純にそれらを各ファイルの先頭部分にカット&ペーストすることもできますが、@c
4090 わずらわしいです。@c
4091 その方法では定義は依然として入力ファイルの中にあり、@c
4092 私は個人的にすべての @code{#()} は何か醜いと感じます。@c
4093 それらを他のファイルの中に隠すことにしましょう:
4094
4095 @example
4096 %%% これを "definitions.ily" というファイル名で保存してください
4097 mpdolce =
4098 #(make-dynamic-script
4099   #@{ \markup @{ \hspace #0
4100                \translate #'(5 . 0)
4101                \line @{ \dynamic "mp"
4102                        \text \italic "dolce" @} @}
4103   #@})
4104
4105 inst =
4106 #(define-music-function
4107      (parser location string)
4108      (string?)
4109    #@{ <>^\markup \bold \box #string #@})
4110 @end example
4111
4112 音楽ファイルの先頭付近で @code{\include} コマンドを使ってこのファイルを@c
4113 参照します。@c
4114 (インクルードされるファイルをコンパイルされるメイン ファイルと区別するため、@c
4115 拡張子 @file{.ily} を使っています。)
4116 今度は音楽ファイルを変更しましょう
4117 (このファイルを @file{"music.ly"} として保存してください)。
4118
4119 @c  We have to do this awkward example/lilypond-non-verbatim
4120 @c  because we can't do the \include stuff in the manual.
4121
4122 @example
4123 \include "definitions.ily"
4124
4125 \relative c'' @{
4126   \tempo 4=50
4127   a4.\mpdolce d8 cis4--\glissando a |
4128   b4 bes a2 |
4129   \inst "Clarinet"
4130   cis4.\< d8 e4 fis |
4131   g8(\! fis)-. e( d)-. cis2 |
4132 @}
4133 @end example
4134
4135 @lilypond[quote,ragged-right]
4136 mpdolce =
4137 #(make-dynamic-script
4138   #{ \markup { \hspace #0
4139                \translate #'(5 . 0)
4140                \line { \dynamic "mp"
4141                        \text \italic "dolce" } }
4142   #})
4143
4144 inst =
4145 #(define-music-function
4146      (parser location string)
4147      (string?)
4148    #{ <>^\markup \bold \box #string #})
4149
4150 \relative c'' {
4151   \tempo 4=50
4152   a4.\mpdolce d8 cis4--\glissando a |
4153   b4 bes a2 |
4154   \inst "Clarinet"
4155   cis4.\< d8 e4 fis |
4156   g8(\! fis)-. e( d)-. cis2 |
4157 }
4158 @end lilypond
4159
4160 これで前よりも良くなりましたが、いくつか変更を加えることにします。@c
4161 グリッサンド (訳者: 第 1 小節の C シャープと A の間) は見え難いので、@c
4162 もっと太く、符頭に近づけます。@c
4163 メトロノーム記号を、最初の音符の上ではなく、@c
4164 音部記号の上に持ってきます。@c
4165 最後に、私の作曲の先生は @q{C} 拍子記号を嫌っているので、@c
4166 @q{4/4} に変更した方が良さそうです。
4167
4168 @file{music.ly} には変更を加えないでください。@c
4169 @file{definitions.ily} を以下のように書き換えます:
4170
4171 @example
4172 %%%  definitions.ily
4173 mpdolce =
4174 #(make-dynamic-script
4175   #@{ \markup @{ \hspace #0
4176                \translate #'(5 . 0)
4177                \line @{ \dynamic "mp"
4178                        \text \italic "dolce" @} @}
4179   #@})
4180
4181 inst =
4182 #(define-music-function
4183      (parser location string)
4184      (string?)
4185    #@{ <>^\markup \bold \box #string #@})
4186
4187 \layout@{
4188   \context @{
4189     \Score
4190     \override MetronomeMark.extra-offset = #'(-5 . 0)
4191     \override MetronomeMark.padding = #'3
4192   @}
4193   \context @{
4194     \Staff
4195     \override TimeSignature.style = #'numbered
4196   @}
4197   \context @{
4198     \Voice
4199     \override Glissando.thickness = #3
4200     \override Glissando.gap = #0.1
4201   @}
4202 @}
4203 @end example
4204
4205 @lilypond[quote,ragged-right]
4206 mpdolce =
4207 #(make-dynamic-script
4208   #{ \markup { \hspace #0
4209                \translate #'(5 . 0)
4210                \line { \dynamic "mp"
4211                        \text \italic "dolce" } }
4212   #})
4213
4214 inst =
4215 #(define-music-function
4216      (parser location string)
4217      (string?)
4218    #{ <>^\markup \bold \box #string #})
4219
4220 \layout{
4221   \context {
4222     \Score
4223     \override MetronomeMark.extra-offset = #'(-5 . 0)
4224     \override MetronomeMark.padding = #'3
4225   }
4226   \context {
4227     \Staff
4228     \override TimeSignature.style = #'numbered
4229   }
4230   \context {
4231     \Voice
4232     \override Glissando.thickness = #3
4233     \override Glissando.gap = #0.1
4234   }
4235 }
4236
4237 \relative c'' {
4238   \tempo 4=50
4239   a4.\mpdolce d8 cis4--\glissando a |
4240   b4 bes a2 |
4241   \inst "Clarinet"
4242   cis4.\< d8 e4 fis |
4243   g8(\! fis)-. e( d)-. cis2 |
4244 }
4245 @end lilypond
4246
4247 もっと良くなりました!@c
4248 今度はこれを公表したいとします。@c
4249 私の作曲の先生は @q{C} 拍子記号を嫌っていますが、@c
4250 私はそちらを好みます。@c
4251 現在の @code{definitions.ily} を @code{web-publish.ily} にコピーして、@c
4252 それにを変更を加えてみましょう。@c
4253 この音楽はスクリーンに表示される PDF を作り出すことを意図したものなので、@c
4254 出力のフォントを全体に大きくすることにします。
4255
4256 @example
4257 %%%  web-publish.ily
4258 mpdolce =
4259 #(make-dynamic-script
4260   #@{ \markup @{ \hspace #0
4261                \translate #'(5 . 0)
4262                \line @{ \dynamic "mp"
4263                        \text \italic "dolce" @} @}
4264   #@})
4265
4266 inst =
4267 #(define-music-function
4268      (parser location string)
4269      (string?)
4270    #@{ <>^\markup \bold \box #string #@})
4271
4272 #(set-global-staff-size 23)
4273
4274 \layout@{
4275   \context @{
4276     \Score
4277     \override MetronomeMark.extra-offset = #'(-5 . 0)
4278     \override MetronomeMark.padding = #'3
4279   @}
4280   \context @{
4281     \Staff
4282   @}
4283   \context @{
4284     \Voice
4285     \override Glissando.thickness = #3
4286     \override Glissando.gap = #0.1
4287   @}
4288 @}
4289 @end example
4290
4291 @lilypond[quote,ragged-right]
4292 mpdolce =
4293 #(make-dynamic-script
4294   #{ \markup { \hspace #0
4295                \translate #'(5 . 0)
4296                \line { \dynamic "mp"
4297                        \text \italic "dolce" } }
4298   #})
4299
4300 inst =
4301 #(define-music-function
4302      (parser location string)
4303      (string?)
4304    #{ <>^\markup \bold \box #string #})
4305
4306 #(set-global-staff-size 23)
4307
4308 \layout{
4309   \context { \Score
4310     \override MetronomeMark.extra-offset = #'(-5 . 0)
4311     \override MetronomeMark.padding = #'3
4312   }
4313   \context { \Voice
4314     \override Glissando.thickness = #3
4315     \override Glissando.gap = #0.1
4316   }
4317 }
4318
4319 \relative c'' {
4320   \tempo 4=50
4321   a4.\mpdolce d8 cis4--\glissando a |
4322   b4 bes a2 |
4323   \inst "Clarinet"
4324   cis4.\< d8 e4 fis |
4325   g8(\! fis)-. e( d)-. cis2 |
4326 }
4327 @end lilypond
4328
4329 音楽ファイルの中では、単に @code{\include "definitions.ily"} を
4330 @code{\include "web-publish.ily"} に置き換えるだけです。@c
4331 もちろん、これをもっと便利なようにすることができます。@c
4332 @file{definitions.ily} ファイルには
4333 @code{mpdolce} と @code{tempoMark} の定義だけを持たせて、@c
4334 @file{web-publish.ily} ファイルには@c
4335 上で記述した @code{\layout} セクションだけを持たせ、@c
4336 @file{university.ily} ファイルには@c
4337 私の先生の好む出力を作り出すための調整だけを持たせます。@c
4338 @file{music.ly} の先頭部分は以下のようになります:
4339
4340 @example
4341 \include "definitions.ily"
4342
4343 %%%  以下の 2 行のどちらか片方のコメントを外してください!
4344 \include "web-publish.ily"
4345 %\include "university.ily"
4346 @end example
4347
4348 このアプローチは、@c
4349 あなたがパーツ一式を作っているだけだとしても役に立つ可能性があります。@c
4350 私は自分のプロジェクトのために@c
4351 半ダースの @q{スタイル シート} ファイルを使います。@c
4352 私はそれぞれの音楽ファイルを
4353 @code{\include "../global.ily"} で始め、@c
4354 @file{gloval.ily} には以下の内容を記述しています:
4355
4356 @example
4357 %%%   global.ily
4358 \version @w{"@version{}"}
4359
4360 #(ly:set-option 'point-and-click #f)
4361
4362 \include "../init/init-defs.ly"
4363 \include "../init/init-layout.ly"
4364 \include "../init/init-headers.ly"
4365 \include "../init/init-paper.ly"
4366 @end example
4367
4368
4369 @node その他の情報源
4370 @subsection その他の情報源
4371 @translationof Other sources of information
4372
4373 内部リファレンスは LilyPond についての多くの情報を持っていますが、@c
4374 LilyPond の内部ファイルを調べることによって@c
4375 さらに多くの情報を収集することができます。@c
4376 内部ファイルを探究するには、@c
4377 まずあなたの使っているシステム特有のディレクトリを見つけ出す必要があります。@c
4378 このディレクトリの場所は、(a) あなたが lilypond.org からコンパイル済みの@c
4379 バイナリをダウンロードすることによって LilyPond を手に入れたのか、@c
4380 それとも、パッケージ マネージャから LilyPond をインストールした
4381 (つまり、GNU/Linux と一緒に配布されたか、fink や cygwin でインストールされた)
4382 のか、(b) LilyPond はどの OS 上で使用されているのか、に依存します:
4383
4384 @subsubsubheading lilypond.org からダウンロードした
4385
4386 @itemize @bullet
4387 @item GNU/Linux
4388
4389 @example
4390 @file{@var{INSTALLDIR}/lilypond/usr/share/lilypond/current/}
4391 @end example
4392 に進んでください
4393
4394 @item MacOS X
4395
4396 @example
4397 @file{@var{INSTALLDIR}/LilyPond.app/Contents/Resources/share/lilypond/current/}
4398 @end example
4399 に進んでください。@c
4400 ターミナルからこのディレクトリへ @code{cd} で移動するか、@c
4401 LilyPond アプリケーション上でコントロール クリックして
4402 @q{Show Package Contents} を選択します。
4403
4404 @item Windows
4405
4406 @example
4407 @file{@var{INSTALLDIR}/LilyPond/usr/share/lilypond/current/}
4408 @end example
4409 に進んでください。Windows Explorer を使います。
4410
4411 @end itemize
4412
4413 @subsubsubheading パッケージ マネージャからインストールした、あるいは、ソースからコンパイルした
4414
4415 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/} に進んでください。@c
4416 @var{PREFIX} はパッケージ マネージャか @code{configure} スクリプトによって@c
4417 セットされるものであり、@var{X.Y.Z} は LilyPond のバージョン番号です。
4418
4419 @smallspace
4420
4421 このディレクトリの中に 2 つの興味深いサブディレクトリがあります:
4422
4423 @itemize
4424 @item @file{ly/} - LilyPond フォーマットに関するファイルを保持しています
4425 @item @file{scm/} -Scheme フォーマットに関するファイルを保持しています
4426 @end itemize
4427
4428 @file{ly/} の中にあるファイルから見ていきましょう。@c
4429 @file{ly/property-init.ly} をテキスト エディタで開いてください。@c
4430 エディタはあなたが普段 @code{.ly} ファイルを編集するために使っているもので@c
4431 結構です。@c
4432 このファイルは標準の LilyPond 定義済みコマンド
4433 -- @code{\stemUp} や @code{\slurDotted} など
4434 -- のすべての定義を保持しています。@c
4435 1 つまたは複数の @code{\override} コマンドを保持している@c
4436 変数の定義以外のものはないということがわかるでしょう。@c
4437 例えば、@code{\tieDotted} は以下のように定義されています:
4438
4439 @example
4440 tieDotted = @{
4441   \override Tie.dash-period = #0.75
4442   \override Tie.dash-fraction = #0.1
4443 @}
4444 @end example
4445
4446 あなたがこれらのデフォルト値を好まない場合、これらの定義済みコマンドを@c
4447 容易に再定義することができます --
4448 他の変数と同様に、入力ファイルの先頭で定義します。
4449
4450 以下のファイルは @file{ly/} で見つかる有用なファイルです:
4451
4452 @multitable @columnfractions .4 .6
4453 @headitem ファイル名
4454   @tab 内容
4455 @item @file{ly/engraver-init.ly}
4456   @tab エングラーバ コンテキストの定義
4457 @item @file{ly/paper-defaults-init.ly}
4458   @tab 紙面関係のデフォルトの仕様
4459 @item @file{ly/performer-init.ly}
4460   @tab パフォーマ コンテキストの定義
4461 @item @file{ly/property-init.ly}
4462   @tab すべての共通定義済みコマンドの定義
4463 @item @file{ly/spanner-init.ly}
4464   @tab スパナ関係の定義済みコマンドの定義
4465 @end multitable
4466
4467 他の設定 (マークアップ コマンドの定義など) は
4468 @code{.scm} (Scheme) ファイルとして保存されています。@c
4469 Scheme プログラミング言語は、LilyPond 内部処理へのプログラム可能な@c
4470 インタフェイスを提供するために使用されます。@c
4471 これらのファイルについての詳しい説明は、Scheme 言語についての知識が@c
4472 必要となるため、このマニュアルの範囲外です。@c
4473 Scheme 言語とこれらのファイルを理解するには、十分な知識や時間が@c
4474 必要であるということを知っておくべきです
4475 (@rextend{Scheme tutorial} を参照してください)。
4476
4477 あなたがこの知識を持っているのなら、興味を持つかもしれない Scheme ファイルは@c
4478 以下のものです:
4479
4480 @multitable @columnfractions .4 .6
4481 @headitem ファイル名
4482   @tab 内容
4483 @item @file{scm/auto-beam.scm}
4484   @tab サブ 連桁のデフォルト (訳者: 8 分音符には連桁だけが使用され、@c
4485 16 分音符やそれよりも短い音符には連桁とサブ 連桁が使われるのだと思います)
4486 @item @file{scm/define-grobs.scm}
4487   @tab Grob (グラフィカル オブジェクト) プロパティのデフォルト設定
4488 @item @file{scm/define-markup-commands.scm}
4489   @tab すべてのマークアップ コマンドの仕様
4490 @item @file{scm/midi.scm}
4491   @tab MIDI 出力のデフォルト設定
4492 @item @file{scm/output-lib.scm}
4493   @tab フレット、色、臨時記号、小節線などの見た目に影響を与える設定
4494 @item @file{scm/parser-clef.scm}
4495   @tab サポートされる音部記号の定義
4496 @item @file{scm/script.scm}
4497   @tab アーティキュレーションのデフォルト設定
4498 @end multitable
4499
4500
4501 @node Scheme を用いた高度な調整
4502 @subsection Scheme を用いた高度な調整
4503 @translationof Advanced tweaks with Scheme
4504
4505 @code{\override} と @code{\tweak} コマンドを用いることで@c
4506 多くのことが可能になりますが、LilyPond のアクションを変更するもっと強力な手段が
4507 LilyPond 内部処理へのプログラム可能なインタフェイスを通じて利用可能です。@c
4508 Scheme プログラミング言語で書かれたコードは LilyPond の内部処理に@c
4509 直接組み込むことができます。@c
4510 もちろん、それを行うには Scheme プログラミングについての基礎知識が必要であり、@c
4511 その手引きが @rextend{Scheme tutorial} で提供されています。
4512
4513 多くの実現可能なことの 1 つの例としては、プロパティに定数をセットする代わりに
4514 Scheme プロシージャをセットすることができます。@c
4515 このプロパティが LilyPond によってアクセスされたときに、@c
4516 このプロシージャが呼び出されます。@c
4517 このプロシージャが呼び出されたときに、このプロシージャによって決定された@c
4518 値を動的にそのプロパティにセットすることができます。@c
4519 以下の例では、符頭にその音符の譜上での位置に従って色を付けています:
4520
4521 @cindex x11-color function, example of using (x11-color 関数の使用方法)
4522 @cindex NoteHead, example of overriding (NoteHead をオーバライドする例)
4523 @cindex color property, setting to Scheme procedure (Scheme プロシージャに color プロパティをセットする)
4524
4525 @c KEEP LY
4526 @lilypond[quote,verbatim,ragged-right]
4527 #(define (color-notehead grob)
4528    "Color the notehead according to its position on the staff."
4529    (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
4530                                7)))
4531      (case mod-position
4532        ;;   Return rainbow colors
4533        ((1) (x11-color 'red    ))  ; for C
4534        ((2) (x11-color 'orange ))  ; for D
4535        ((3) (x11-color 'yellow ))  ; for E
4536        ((4) (x11-color 'green  ))  ; for F
4537        ((5) (x11-color 'blue   ))  ; for G
4538        ((6) (x11-color 'purple ))  ; for A
4539        ((0) (x11-color 'violet ))  ; for B
4540        )))
4541
4542 \relative c' {
4543   % Arrange to obtain color from color-notehead procedure
4544   \override NoteHead.color = #color-notehead
4545   a2 b | c2 d | e2 f | g2 a |
4546 }
4547 @end lilypond
4548
4549 @rextend{Callback functions} に、これらのプログラム可能なインタフェイスの@c
4550 使い方を示している例がもっとあります。
4551
4552