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