1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond-learning.tely
4 Translation of GIT committish: 3121682025660b6c85fbf3f22bb9cd8396699ad1
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
13 @chapter Tweaking output
15 In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern
16 kann. In LilyPond kann man sehr viel konfigurieren, fast jedes
17 Notenfragment kann geändert werden.
22 * The Internals Reference manual::
23 * Appearance of objects::
24 * Placement of objects::
25 * Collisions of objects::
32 @section Tweaking basics
35 * Introduction to tweaks::
36 * Objects and interfaces::
37 * Naming conventions of objects and properties::
41 @node Introduction to tweaks
42 @subsection Introduction to tweaks
44 @qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die
45 verschiedenen Methoden, die Aktionen zu beeinflussen, die während
46 der Kompilation einer Notationsdatei vorgenommen werden sowie auf
47 das Notenbild einzuwirken. Einige dieser Opitmierungen sind sehr
48 einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das
49 System an Optimierungen so gut wie alle möglichen Erscheindungsformen
52 In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt,
53 um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen
54 Befehlen bereitgestellt werden, die einfach in die Quelldatei
55 kopiert werden können um den selben Effekt wie im Beispiel
56 zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle
57 konstruiert werden, so dass Sie in der Lage sein werden, eigene
58 Befehle auf dieser Grundlage zu entwickeln.
60 Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den
61 Abschnitt @ref{Contexts and engravers} interessieren, dann
62 Kontexte und Engraver sowie die Eigenschaften, die mit ihnen
63 verknüpft sind, sind die Voraussetzung, um die Funktionsweise
64 von Optimierungen verstehen zu können.
67 @node Objects and interfaces
68 @subsection Objects and interfaces
72 @node Naming conventions of objects and properties
73 @subsection Naming conventions of objects and properties
77 @node Tweaking methods
78 @subsection Tweaking methods
82 @node The Internals Reference manual
83 @section The Internals Reference manual
88 * Properties of layout objects::
89 * Properties found in interfaces::
90 * Types of properties::
93 @node Properties of layout objects
94 @subsection Properties of layout objects
98 @node Properties found in interfaces
99 @subsection Properties found in interfaces
103 @node Types of properties
104 @subsection Types of properties
108 @node Appearance of objects
109 @section Appearance of objects
114 * Visibility and color of objects::
116 * Length and thickness of objects::
119 @node Visibility and color of objects
120 @subsection Visibility and color of objects
124 @node Size of objects
125 @subsection Size of objects
129 @node Length and thickness of objects
130 @subsection Length and thickness of objects
134 @node Placement of objects
135 @section Placement of objects
140 * Automatic behavior::
141 * Within-staff objects::
142 * Outside staff objects::
145 @node Automatic behavior
146 @subsection Automatic behavior
150 @node Within-staff objects
151 @subsection Within-staff objects
155 @node Outside staff objects
156 @subsection Outside staff objects
161 @node Collisions of objects
162 @section Collisions of objects
166 * Fixing overlapping notation::
167 * Real music example::
171 @subsection Moving objects
173 Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht
174 perfekt. Einige Notationselemente können sich überschneiden. Das
175 ist nicht schön, kann aber (in den meisten Fällen) sehr einfach
178 @c FIXME: find a better example for 5.1 Moving Objects. -gp
179 @c yes, I want this TODO to be visible to end-users. It's better
180 @c than having nothing at all.
181 TODO: Mit den neuen Abstandseigenschaften seit Version 2.12 sind die
182 jeweiligen Beispiele nicht mehr relevant. Sie zeigen jedoch immer noch
183 machtvolle Eigenschaften von LilyPond und verbleiben deshalb in der
184 Dokumentation, bis jemand bessere Beispiel zur Verfügung stellt.
186 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
187 % temporary code to break this example:
188 \override TextScript #'outside-staff-priority = ##f
189 e4^\markup{ \italic ritenuto } g b e
192 @cindex Abstände füllen
194 Die einfachste Lösung ist es, Abstände zwischen Objekt und Note zu vergrößern
195 (genauso auch für Fingersätze oder Dynamikzeichen). In
196 LilyPond wird das durch Veränderung der @code{padding} (Füllungs)-Eigenschaft
197 erreicht, ihre Maßeinheit sind Notenzeilenabstände. Für die meisten
198 Objekte ist der Wert etwa 1.0 oder weniger (das unterscheidet sich
199 von Objekt zu Objekt). Hier soll der Abstand vergrößert werden, also
200 scheint 1.5 eine gute Wahl.
202 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
203 % temporary code to break this example:
204 \override TextScript #'outside-staff-priority = ##f
205 \once \override TextScript #'padding = #1.5
206 e4^\markup{ \italic ritenuto } g b e
209 Das sieht besser aus, ist aber noch nicht groß genug. Nach einigen
210 Experimenten wird darum 2.3 genommen für diesen Fall. Diese Zahl
211 ist aber nur das Resultat einigen Probierens und persönlicher
212 Geschmack. Probieren Sie selber ein wenig herum und entscheiden
213 Sie nach eigenem Geschmack.
215 Die @code{staff-padding}-Eigenschaft ist der vorigen sehr ähnlich.
216 @code{padding} entscheidet über den minimalen Abstand zwischen einem
217 Objekt und dem nächsten anderen Objekt (meistens eine Note oder
218 Notenzeile); @code{staff-padding} entscheidet über den minimalen
219 Abstand zwischen einem Objekt und dem Notensystem. Das ist nur ein
220 kleiner Unterschied, aber hier wird das Verhalten demonstriert:
222 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
223 % temporary code to break this example:
224 \override TextScript #'outside-staff-priority = ##f
226 \once \override TextScript #'padding = #4.6
228 \once \override TextScript #'staff-padding = #4.6
229 c4^"piu mosso" fis a g
231 c'4^"piu mosso" b a b
232 \once \override TextScript #'padding = #4.6
234 \once \override TextScript #'staff-padding = #4.6
235 c4^"piu mosso" fis a g
238 @cindex Abstand, zusätzlicher
241 Eine andere Lösung ermöglicht vollständige Kontrolle über die Positionierung
242 eines Objektes sowohl horizontal als auch vertikal. Das wird mit der
243 @code{extra-offset} (Zusätzlicher-Abstand)-Eigenschaft erreicht. Das
244 ist etwas komplizierter und kann andere Probleme mit sich ziehen. Wenn
245 Objekte mit dieser Eigenschaft verschoben werden, heißt das, dass
246 LilyPond sie erst setzt, nachdem alle anderen Objekte positioniert
247 worden sind. Deshalb können sich die Objekte am Ende überlagern.
249 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
250 % temporary code to break this example:
251 \override TextScript #'outside-staff-priority = ##f
252 \once \override TextScript #'extra-offset = #'( 1.0 . -1.0 )
253 e4^\markup{ \italic ritenuto } g b e
256 Bei Verwendung von @code{extra-offset} bestimmt die erste Zahl über die
257 horizontale Verschiebung (nach links ist negativ), die zweite Zahl
258 bestimmt die vertikale Verschiebung (nach oben ist positiv). Nach einigen
259 Experimenten wurden hier folgende Werte für gut befunden:
261 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
262 % temporary code to break this example:
263 \override TextScript #'outside-staff-priority = ##f
264 \once \override TextScript #'extra-offset = #'( -1.6 . 1.0 )
265 e4^\markup{ \italic ritenuto } g b e
269 Auch diese Zahlen sind nur Resultat einigen Herumprobierens und Vergleichens
270 der Ergebnisse. Sie wollen den Text vielleicht etwas höher oder etwas mehr
271 nach links setzen. Versuchen Sie es selber und vergleichen Sie das Ergebnis.
273 Eine letzte Warnung: in diesem Kapitel haben wir den Befehl
276 \once \override TextScript @dots{}
280 benutzt. Dieser Befehl verändert die Anzeige des Textes für die nächste
281 Note. Wenn die Note keinen Text zugeordnet hat, wird auch nichts
282 verändert (und es wird @strong{nicht} nach dem nächsten Text gesucht).
283 Um das Verhalten zu verändern, so dass alles, was nach dem Befehl
284 kommt, verändert wird, müssen Sie den Befehl @code{\once} weglassen.
285 Um die Veränderung zu stoppen, benutzen Sie den Befehl @code{\revert}.
286 Das wird genauer im Kapitel
287 @ruser{The \override command} erklärt.
289 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
290 % temporary code to break this example:
291 \override TextScript #'outside-staff-priority = ##f
293 \once \override TextScript #'padding = #4.6
296 \once \override TextScript #'padding = #4.6
300 \override TextScript #'padding = #4.6
303 \revert TextScript #'padding
309 @ruser{The \override command}, @ref{Common tweaks}.
312 @node Fixing overlapping notation
313 @subsection Fixing overlapping notation
315 Im Kapitel @ref{Moving objects} wurde gezeigt, wie man Texte
316 (@code{TextScript}-Objekte) verschiebt. Mit der gleichen
317 Technik können auch andere Objektklassen verschoben werden,
318 @code{TextScript} muss dann nur durch den Namen des Objektes
321 Um den Objektnamen zu finden, siehe die @q{@strong{see also}}-Hinweise
322 am Ende des jeweiligen Abschnittes. Zum Beispiel am Ende des
323 Kapitels @ruser{Dynamics} findet sich:
328 Programmreferenz: @rinternals{DynamicText}, @rinternals{Hairpin}.
329 Vertikale Positionierung dieser Symbole wird mit
330 @rinternals{DynamicLineSpanner} erreicht.
334 Um also Dynamik-Zeichen zu verschieben, muss
337 \override DynamicLineSpanner #'padding = #2.0
340 benutzt werden. Es ist nicht genügend Platz, um jedes Objekt aufzulisten,
341 aber die gebräuchlichsten finden sich hier:
343 @multitable @columnfractions .33 .66
344 @headitem Objekttyp @tab Objektbezeichnung
345 @item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner}
346 @item Dynamikzeichen (horizontal) @tab @code{DynamicText}
347 @item Bindebögen @tab @code{Tie}
348 @item Phrasierungsbögen @tab @code{Slur}
349 @item Artikulationszeichen @tab @code{Script}
350 @item Fingersatz @tab @code{Fingering}
351 @item Text, z. B. @code{^"text"} @tab @code{TextScript}
352 @item Übungs-/Textmarken @tab @code{RehearsalMark}
356 @node Real music example
357 @subsection Real music example
362 @c DEPRECATED SECTION
364 @section Common tweaks
366 Bestimmte Korrekturen sind so häufig, dass für sie schon fertige
367 angepasste Befehle bereitgestellt sind, so etwa
368 @code{\slurUp} um einen Bindebogen oberhalb anzuzeigen oder
369 @code{\stemDown} um den Notenhals nach unten zu zwingen. Diese
370 Befehle sind im Teil Alles über die Notation unter dem
371 entsprechenden Abschnitt erklärt.
373 Eine vollständige Liste aller Veränderungen, die für jeden Objekttypen
374 (etwa Bögen oder Balken) zur Verfügung stehen, ist in der Programmreferenz
375 dargestellt. Viele Layoutobjekte benutzen jedoch gleiche Eigenschaften,
376 die benutzt werden können, um eigene Einstellungen vorzunehmen.
384 @code{padding}-Eigenschaft kann gesetzt werden, um den Abstand zwischen
385 Symbolen über oder unter den Noten zu vergrößern oder zu verkleinern.
386 Das gilt für alle Objekte, die ein @code{side-position-interface}
387 besitzen, also unterscheiden, auf welcher Seite der Note sie sich befinden.
389 @lilypond[quote,fragment,relative=1,verbatim]
391 \override Script #'padding = #3
395 @lilypond[quote,fragment,relative=1,verbatim]
396 % This will not work, see below:
397 \override MetronomeMark #'padding = #3
401 \override Score.MetronomeMark #'padding = #3
406 Im zweiten Beispiel ist es sehr wichtig zu wissen, welcher Kontext
407 für bestimmte Objekte zuständig ist. Weil das
408 @code{MetronomeMark}-Objekt vom @code{Score}-Kontext gesetzt
409 wird, werden Veränderungen innerhalb des @code{Voice}-Kontextes
410 nicht berücksichtigt. Genauere Details im Kapitel
411 @ruser{The \override command}.
414 @cindex zusätzlicher Abstand
415 @cindex Abstand, zusätzlicher
418 Die @code{extra-offset}-Eigenschaft verschiebt Objekte, hier ist ein
419 Zahlenpaar zur Angabe der Positionierung erforderlich. Die erste Nummer bestimmt
420 die horizontale Bewegung, eine positive Zahl bewegt das Objekt nach rechts.
421 Die zweite Zahl bestimmt die vertikale Bewegung, eine positive Zahl bewegt
422 das Objekt nach oben. Die
423 @code{extra-offset}-Eigenschaft läuft auf unterster Ebene ab: Die
424 Formatierungsmaschine ist sich der Veränderungen nicht bewusst.
426 Im folgenden Beispiel wird die zweite Fingersatzbezeichnung etwas nach
427 links verschoben und 1,8 Notenzeilenabstände nach unten:
429 @lilypond[quote,fragment,relative=1,verbatim]
432 \once \override Fingering
433 #'extra-offset = #'(-0.3 . -1.8)
438 Die Verwendung der @code{transparent}-Eigenschaft druckt das entsprechende Objekt
439 mit @qq{unsichtbarer Druckerschwärze}: Das Objekt wird nicht angezeigt, aber
440 sein Verhalten bleibt bestehen. Das Objekt nimmt weiterhin Platz ein, es nimmt
441 teil an Überschneidungen und deren Auflösung durch das Programm, Bögen und Balken
442 können daran angebunden werden.
444 @cindex transparente Objekte
445 @cindex Entfernen von Objekten
446 @cindex Verstecken von Objekten
447 @cindex unsichtbare Objekte
448 Das nächste Beispiel zeigt, wie man unterschiedliche Stimmen mit
449 Bindebögen verbinden kann. Normalerweise können Bindebögen nur
450 zwei Noten der selben Stimme verbinden. Indem aber ein Bogen in einer
451 anderen Stimme erstellt wird,
453 @lilypond[quote,fragment,relative=2]
462 und dann der erste Hals nach oben unsichtbar gemacht wird, scheint der
463 Bindebogen die Stimme zu wechseln:
466 @lilypond[quote,fragment,relative=2,verbatim]
468 \once \override Stem #'transparent = ##t
475 Damit der Hals den Bogen nicht zu sehr verkleinert, wird seine
476 Länge (@code{length}) auf den Wert @code{8} gesetzt:
479 @lilypond[quote,fragment,relative=2,verbatim]
481 \once \override Stem #'transparent = ##t
482 \once \override Stem #'length = #8
491 @cindex Veränderungen von Abständen
492 @cindex Optimierung von Abständen
495 Abstände in LilyPond werden in Notenzeilenabständen
496 (@code{staff-space}) gemessen, während die meisten Dicke-Eigenschaften
497 auf mit der Notenliniendicke korrespondieren. Eine Eigenschaften
498 verhalten sich anders, etwa die Dicke von Balken ist an die
499 Notenzeilenabstände gekoppelt. Mehr Information findet sich
500 im relevanten Teil der Programmreferenz.
502 @node Further tweaking
503 @section Further tweaking
506 * Other uses for tweaks::
507 * Using variables for tweaks::
508 * Other sources of information::
509 * Avoiding tweaks with slower processing::
510 * Advanced tweaks with Scheme::
513 @node Other uses for tweaks
514 @subsection Other uses for tweaks
518 @node Using variables for tweaks
519 @subsection Using variables for tweaks
523 @node Other sources of information
524 @subsection Other sources of information
526 Die Programmreferenz enthält sehr viel Information über LilyPond, aber
527 noch mehr Information findet sich in den internen
530 Eine Standardeinstellungen (wie die Definitionen für den Kopf (@code{\header}
531 sind als @code{.ly}-Datei gespeichert. Andere Einstellungen
532 (wie die Definition für Beschriftung (@code{markup}) sind
533 als @code{.scm} (Scheme)-Datei gespeichert. Eine nähere Erklärung
534 geht über den Rahmen dieses Handbuches hinaus. Der Hinweis
535 scheint aber angebracht, dass es grundlegende technische
536 Kenntnis und sehr viel Zeit erfordert, diese Dateien zu verstehen.
540 @item Linux: @file{@var{installdir}/lilypond/usr/share/lilypond/current/}
543 @file{@var{installdir}/LilyPond.app/Contents/Resources/share/lilypond/current/}.
544 Um diese Ordner anzuschauen, wechseln Sie entweder mit @code{cd} im Terminal
545 zu der Adresse oder klicken Sie mit der rechten Maustaste auf das LilyPond-Symbol
546 und wählen Sie @q{Show Package Contents}.
548 @item Windows: @file{@var{installdir}/LilyPond/usr/share/lilypond/current/}
552 Die @file{ly/} und @file{scm/}-Ordner sind von besonderem Interesse.
553 Dateien wie @file{ly/property-init.ly} und
554 @file{ly/declarations-init.ly} definieren alle häufig vorkommenden Veränderungen.
557 @node Avoiding tweaks with slower processing
558 @subsection Avoiding tweaks with slower processing
560 LilyPond kann einige zusätzliche Tests durchführen, während
561 die Noten gesetzt werden. Dadurch braucht das Programm länger,
562 um den Notensatz zu produzieren, aber üblicherweise werden
563 weniger nachträgliche Anpassungen nötig sein.
566 %% Um sicher zu gehen, dass Texte und Liedtext
567 %% innerhalb der Papierränder bleiben
568 \override Score.PaperColumn #'keep-inside-line = ##t
572 @node Advanced tweaks with Scheme
573 @subsection Advanced tweaks with Scheme
575 Es wurde schon gezeigt, wie die LilyPond-Ausgabe sehr stark verändert
576 werden kann, indem man Befehle wie
577 @code{\override TextScript #'extra-offset = ( 1 . -1)} benutzt. Aber
578 noch mehr Einfluss auf die Formatierung kann durch den Einsatz von
579 Scheme genommen werden. Eine vollständige Erklärung findet sich in der
580 @ref{Scheme tutorial} und den
581 @ruser{Interfaces for programmers}.
583 Scheme kann benutzt werden, um einfach nur Befehle zu @qq{überschreiben}
586 @lilypond[quote,verbatim,ragged-right]
587 padText = #(define-music-function (parser location padding) (number?)
589 \once \override TextScript #'padding = #$padding
597 c4^"piu mosso" fis a g
601 Hiermit können aber auch neue Befehle erstellt werden:
603 @lilypond[quote,verbatim,ragged-right]
604 tempoMark = #(define-music-function (parser location padding marktext)
607 \once \override Score . RehearsalMark #'padding = $padding
608 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
609 \mark \markup { \bold $marktext }
614 \tempoMark #3.0 #"Allegro"
619 Sogar ganze musikalische Ausdrücke können eingefügt werden:
621 @lilypond[quote,verbatim,ragged-right]
622 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
629 \pattern {d16 dis} { ais16-> b\p }