@c -*- coding: utf-8; mode: texinfo; -*- @c This file is part of lilypond.tely @ignore Translation of GIT committish: 3121682025660b6c85fbf3f22bb9cd8396699ad1 When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore @c \version "2.11.51" @node Tweaking output @chapter Tweaking output In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern kann. In LilyPond kann man sehr viel konfigurieren, fast jedes Notenfragment kann geändert werden. @menu * Tweaking basics:: * The Internals Reference manual:: * Appearance of objects:: * Placement of objects:: * Collisions of objects:: * Common tweaks:: * Further tweaking:: @end menu @node Tweaking basics @section Tweaking basics @untranslated @menu * Introduction to tweaks:: * Objects and interfaces:: * Naming conventions of objects and properties:: * Tweaking methods:: @end menu @node Introduction to tweaks @subsection Introduction to tweaks @untranslated @node Objects and interfaces @subsection Objects and interfaces @untranslated @node Naming conventions of objects and properties @subsection Naming conventions of objects and properties @untranslated @node Tweaking methods @subsection Tweaking methods @untranslated @node The Internals Reference manual @section The Internals Reference manual @untranslated @menu * Properties of layout objects:: * Properties found in interfaces:: * Types of properties:: @end menu @node Properties of layout objects @subsection Properties of layout objects @untranslated @node Properties found in interfaces @subsection Properties found in interfaces @untranslated @node Types of properties @subsection Types of properties @untranslated @node Appearance of objects @section Appearance of objects @untranslated @menu * Visibility and color of objects:: * Size of objects:: * Length and thickness of objects:: @end menu @node Visibility and color of objects @subsection Visibility and color of objects @untranslated @node Size of objects @subsection Size of objects @untranslated @node Length and thickness of objects @subsection Length and thickness of objects @untranslated @node Placement of objects @section Placement of objects @untranslated @menu * Automatic behavior:: * Within-staff objects:: * Outside staff objects:: @end menu @node Automatic behavior @subsection Automatic behavior @untranslated @node Within-staff objects @subsection Within-staff objects @untranslated @node Outside staff objects @subsection Outside staff objects @untranslated @node Collisions of objects @section Collisions of objects @menu * Moving objects:: * Fixing overlapping notation:: * Real music example:: @end menu @node Moving objects @subsection Moving objects Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht perfekt. Einige Notationselemente können sich überschneiden. Das ist nicht schön, kann aber (in den meisten Fällen) sehr einfach korrigiert werden. @c FIXME: find a better example for 5.1 Moving Objects. -gp @c yes, I want this TODO to be visible to end-users. It's better @c than having nothing at all. TODO: Mit den neuen Abstandseigenschaften seit Version 2.12 sind die jeweiligen Beispiele nicht mehr relevant. Sie zeigen jedoch immer noch machtvolle Eigenschaften von LilyPond und verbleiben deshalb in der Dokumentation, bis jemand bessere Beispiel zur Verfügung stellt. @lilypond[quote,fragment,ragged-right,verbatim,relative=2] % temporary code to break this example: \override TextScript #'outside-staff-priority = ##f e4^\markup{ \italic ritenuto } g b e @end lilypond @cindex Abstände füllen Die einfachste Lösung ist es, Abstände zwischen Objekt und Note zu vergrößern (genauso auch für Fingersätze oder Dynamikzeichen). In LilyPond wird das durch Veränderung der @code{padding} (Füllungs)-Eigenschaft erreicht, ihre Maßeinheit sind Notenzeilenabstände. Für die meisten Objekte ist der Wert etwa 1.0 oder weniger (das unterscheidet sich von Objekt zu Objekt). Hier soll der Abstand vergrößert werden, also scheint 1.5 eine gute Wahl. @lilypond[quote,fragment,ragged-right,verbatim,relative=2] % temporary code to break this example: \override TextScript #'outside-staff-priority = ##f \once \override TextScript #'padding = #1.5 e4^\markup{ \italic ritenuto } g b e @end lilypond Das sieht besser aus, ist aber noch nicht groß genug. Nach einigen Experimenten wird darum 2.3 genommen für diesen Fall. Diese Zahl ist aber nur das Resultat einigen Probierens und persönlicher Geschmack. Probieren Sie selber ein wenig herum und entscheiden Sie nach eigenem Geschmack. Die @code{staff-padding}-Eigenschaft ist der vorigen sehr ähnlich. @code{padding} entscheidet über den minimalen Abstand zwischen einem Objekt und dem nächsten anderen Objekt (meistens eine Note oder Notenzeile); @code{staff-padding} entscheidet über den minimalen Abstand zwischen einem Objekt und dem Notensystem. Das ist nur ein kleiner Unterschied, aber hier wird das Verhalten demonstriert: @lilypond[quote,fragment,ragged-right,verbatim,relative=2] % temporary code to break this example: \override TextScript #'outside-staff-priority = ##f c4^"piu mosso" b a b \once \override TextScript #'padding = #4.6 c4^"piu mosso" d e f \once \override TextScript #'staff-padding = #4.6 c4^"piu mosso" fis a g \break c'4^"piu mosso" b a b \once \override TextScript #'padding = #4.6 c4^"piu mosso" d e f \once \override TextScript #'staff-padding = #4.6 c4^"piu mosso" fis a g @end lilypond @cindex Abstand, zusätzlicher @cindex extra-offset Eine andere Lösung ermöglicht vollständige Kontrolle über die Positionierung eines Objektes sowohl horizontal als auch vertikal. Das wird mit der @code{extra-offset} (Zusätzlicher-Abstand)-Eigenschaft erreicht. Das ist etwas komplizierter und kann andere Probleme mit sich ziehen. Wenn Objekte mit dieser Eigenschaft verschoben werden, heißt das, dass LilyPond sie erst setzt, nachdem alle anderen Objekte positioniert worden sind. Deshalb können sich die Objekte am Ende überlagern. @lilypond[quote,fragment,ragged-right,verbatim,relative=2] % temporary code to break this example: \override TextScript #'outside-staff-priority = ##f \once \override TextScript #'extra-offset = #'( 1.0 . -1.0 ) e4^\markup{ \italic ritenuto } g b e @end lilypond Bei Verwendung von @code{extra-offset} bestimmt die erste Zahl über die horizontale Verschiebung (nach links ist negativ), die zweite Zahl bestimmt die vertikale Verschiebung (nach oben ist positiv). Nach einigen Experimenten wurden hier folgende Werte für gut befunden: @lilypond[quote,fragment,ragged-right,verbatim,relative=2] % temporary code to break this example: \override TextScript #'outside-staff-priority = ##f \once \override TextScript #'extra-offset = #'( -1.6 . 1.0 ) e4^\markup{ \italic ritenuto } g b e @end lilypond @noindent Auch diese Zahlen sind nur Resultat einigen Herumprobierens und Vergleichens der Ergebnisse. Sie wollen den Text vielleicht etwas höher oder etwas mehr nach links setzen. Versuchen Sie es selber und vergleichen Sie das Ergebnis. Eine letzte Warnung: in diesem Kapitel haben wir den Befehl @example \once \override TextScript @dots{} @end example @noindent benutzt. Dieser Befehl verändert die Anzeige des Textes für die nächste Note. Wenn die Note keinen Text zugeordnet hat, wird auch nichts verändert (und es wird @strong{nicht} nach dem nächsten Text gesucht). Um das Verhalten zu verändern, so dass alles, was nach dem Befehl kommt, verändert wird, müssen Sie den Befehl @code{\once} weglassen. Um die Veränderung zu stoppen, benutzen Sie den Befehl @code{\revert}. Das wird genauer im Kapitel @ruser{The \override command} erklärt. @lilypond[quote,fragment,ragged-right,verbatim,relative=3] % temporary code to break this example: \override TextScript #'outside-staff-priority = ##f c4^"piu mosso" b \once \override TextScript #'padding = #4.6 a4 b c4^"piu mosso" d e f \once \override TextScript #'padding = #4.6 c4^"piu mosso" d e f c4^"piu mosso" d e f \break \override TextScript #'padding = #4.6 c4^"piu mosso" d e f c4^"piu mosso" d e f \revert TextScript #'padding c4^"piu mosso" d e f @end lilypond @seealso @ruser{The \override command}, @ref{Common tweaks}. @node Fixing overlapping notation @subsection Fixing overlapping notation Im Kapitel @ref{Moving objects} wurde gezeigt, wie man Texte (@code{TextScript}-Objekte) verschiebt. Mit der gleichen Technik können auch andere Objektklassen verschoben werden, @code{TextScript} muss dann nur durch den Namen des Objektes ersetzt werden. Um den Objektnamen zu finden, siehe die @q{@strong{see also}}-Hinweise am Ende des jeweiligen Abschnittes. Zum Beispiel am Ende des Kapitels @ruser{Dynamics} findet sich: @quotation @seealso Programmreferenz: @rinternals{DynamicText}, @rinternals{Hairpin}. Vertikale Positionierung dieser Symbole wird mit @rinternals{DynamicLineSpanner} erreicht. @end quotation @noindent Um also Dynamik-Zeichen zu verschieben, muss @example \override DynamicLineSpanner #'padding = #2.0 @end example benutzt werden. Es ist nicht genügend Platz, um jedes Objekt aufzulisten, aber die gebräuchlichsten finden sich hier: @multitable @columnfractions .33 .66 @headitem Objekttyp @tab Objektbezeichnung @item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner} @item Dynamikzeichen (horizontal) @tab @code{DynamicText} @item Bindebögen @tab @code{Tie} @item Phrasierungsbögen @tab @code{Slur} @item Artikulationszeichen @tab @code{Script} @item Fingersatz @tab @code{Fingering} @item Text, z. B. @code{^"text"} @tab @code{TextScript} @item Übungs-/Textmarken @tab @code{RehearsalMark} @end multitable @node Real music example @subsection Real music example @untranslated @c DEPRECATED SECTION @node Common tweaks @section Common tweaks Bestimmte Korrekturen sind so häufig, dass für sie schon fertige angepasste Befehle bereitgestellt sind, so etwa @code{\slurUp} um einen Bindebogen oberhalb anzuzeigen oder @code{\stemDown} um den Notenhals nach unten zu zwingen. Diese Befehle sind im Teil Alles über die Notation unter dem entsprechenden Abschnitt erklärt. Eine vollständige Liste aller Veränderungen, die für jeden Objekttypen (etwa Bögen oder Balken) zur Verfügung stehen, ist in der Programmreferenz dargestellt. Viele Layoutobjekte benutzen jedoch gleiche Eigenschaften, die benutzt werden können, um eigene Einstellungen vorzunehmen. @itemize @bullet @cindex padding @cindex Füllung @item @code{padding}-Eigenschaft kann gesetzt werden, um den Abstand zwischen Symbolen über oder unter den Noten zu vergrößern oder zu verkleinern. Das gilt für alle Objekte, die ein @code{side-position-interface} besitzen, also unterscheiden, auf welcher Seite der Note sie sich befinden. @lilypond[quote,fragment,relative=1,verbatim] c2\fermata \override Script #'padding = #3 b2\fermata @end lilypond @lilypond[quote,fragment,relative=1,verbatim] % This will not work, see below: \override MetronomeMark #'padding = #3 \tempo 4=120 c1 % This works: \override Score.MetronomeMark #'padding = #3 \tempo 4=80 d1 @end lilypond Im zweiten Beispiel ist es sehr wichtig zu wissen, welcher Kontext für bestimmte Objekte zuständig ist. Weil das @code{MetronomeMark}-Objekt vom @code{Score}-Kontext gesetzt wird, werden Veränderungen innerhalb des @code{Voice}-Kontextes nicht berücksichtigt. Genauere Details im Kapitel @ruser{The \override command}. @cindex extra-offset @cindex zusätzlicher Abstand @cindex Abstand, zusätzlicher @item Die @code{extra-offset}-Eigenschaft verschiebt Objekte, hier ist ein Zahlenpaar zur Angabe der Positionierung erforderlich. Die erste Nummer bestimmt die horizontale Bewegung, eine positive Zahl bewegt das Objekt nach rechts. Die zweite Zahl bestimmt die vertikale Bewegung, eine positive Zahl bewegt das Objekt nach oben. Die @code{extra-offset}-Eigenschaft läuft auf unterster Ebene ab: Die Formatierungsmaschine ist sich der Veränderungen nicht bewusst. Im folgenden Beispiel wird die zweite Fingersatzbezeichnung etwas nach links verschoben und 1,8 Notenzeilenabstände nach unten: @lilypond[quote,fragment,relative=1,verbatim] \stemUp f-5 \once \override Fingering #'extra-offset = #'(-0.3 . -1.8) f-5 @end lilypond @item Die Verwendung der @code{transparent}-Eigenschaft druckt das entsprechende Objekt mit @qq{unsichtbarer Druckerschwärze}: Das Objekt wird nicht angezeigt, aber sein Verhalten bleibt bestehen. Das Objekt nimmt weiterhin Platz ein, es nimmt teil an Überschneidungen und deren Auflösung durch das Programm, Bögen und Balken können daran angebunden werden. @cindex transparente Objekte @cindex Entfernen von Objekten @cindex Verstecken von Objekten @cindex unsichtbare Objekte Das nächste Beispiel zeigt, wie man unterschiedliche Stimmen mit Bindebögen verbinden kann. Normalerweise können Bindebögen nur zwei Noten der selben Stimme verbinden. Indem aber ein Bogen in einer anderen Stimme erstellt wird, @lilypond[quote,fragment,relative=2] << { b8~ b8\noBeam } \\ { b[ g8] } >> @end lilypond @noindent und dann der erste Hals nach oben unsichtbar gemacht wird, scheint der Bindebogen die Stimme zu wechseln: @lilypond[quote,fragment,relative=2,verbatim] << { \once \override Stem #'transparent = ##t b8~ b8\noBeam } \\ { b[ g8] } >> @end lilypond Damit der Hals den Bogen nicht zu sehr verkleinert, wird seine Länge (@code{length}) auf den Wert @code{8} gesetzt: @lilypond[quote,fragment,relative=2,verbatim] << { \once \override Stem #'transparent = ##t \once \override Stem #'length = #8 b8~ b8\noBeam } \\ { b[ g8] } >> @end lilypond @end itemize @cindex Veränderungen von Abständen @cindex Optimierung von Abständen @cindex Abstände Abstände in LilyPond werden in Notenzeilenabständen (@code{staff-space}) gemessen, während die meisten Dicke-Eigenschaften auf mit der Notenliniendicke korrespondieren. Eine Eigenschaften verhalten sich anders, etwa die Dicke von Balken ist an die Notenzeilenabstände gekoppelt. Mehr Information findet sich im relevanten Teil der Programmreferenz. @node Further tweaking @section Further tweaking @menu * Other uses for tweaks:: * Using variables for tweaks:: * Other sources of information:: * Avoiding tweaks with slower processing:: * Advanced tweaks with Scheme:: @end menu @node Other uses for tweaks @subsection Other uses for tweaks @untranslated @node Using variables for tweaks @subsection Using variables for tweaks @untranslated @node Other sources of information @subsection Other sources of information Die Programmreferenz enthält sehr viel Information über LilyPond, aber noch mehr Information findet sich in den internen LilyPond-Dateien. Eine Standardeinstellungen (wie die Definitionen für den Kopf (@code{\header} sind als @code{.ly}-Datei gespeichert. Andere Einstellungen (wie die Definition für Beschriftung (@code{markup}) sind als @code{.scm} (Scheme)-Datei gespeichert. Eine nähere Erklärung geht über den Rahmen dieses Handbuches hinaus. Der Hinweis scheint aber angebracht, dass es grundlegende technische Kenntnis und sehr viel Zeit erfordert, diese Dateien zu verstehen. @itemize @bullet @item Linux: @file{@var{installdir}/lilypond/usr/share/lilypond/current/} @item OS X: @file{@var{installdir}/LilyPond.app/Contents/Resources/share/lilypond/current/}. Um diese Ordner anzuschauen, wechseln Sie entweder mit @code{cd} im Terminal zu der Adresse oder klicken Sie mit der rechten Maustaste auf das LilyPond-Symbol und wählen Sie @q{Show Package Contents}. @item Windows: @file{@var{installdir}/LilyPond/usr/share/lilypond/current/} @end itemize Die @file{ly/} und @file{scm/}-Ordner sind von besonderem Interesse. Dateien wie @file{ly/property-init.ly} und @file{ly/declarations-init.ly} definieren alle häufig vorkommenden Veränderungen. @node Avoiding tweaks with slower processing @subsection Avoiding tweaks with slower processing LilyPond kann einige zusätzliche Tests durchführen, während die Noten gesetzt werden. Dadurch braucht das Programm länger, um den Notensatz zu produzieren, aber üblicherweise werden weniger nachträgliche Anpassungen nötig sein. @example %% Um sicher zu gehen, dass Texte und Liedtext %% innerhalb der Papierränder bleiben \override Score.PaperColumn #'keep-inside-line = ##t @end example @node Advanced tweaks with Scheme @subsection Advanced tweaks with Scheme Es wurde schon gezeigt, wie die LilyPond-Ausgabe sehr stark verändert werden kann, indem man Befehle wie @code{\override TextScript #'extra-offset = ( 1 . -1)} benutzt. Aber noch mehr Einfluss auf die Formatierung kann durch den Einsatz von Scheme genommen werden. Eine vollständige Erklärung findet sich in der @ref{Scheme tutorial} und den @ruser{Interfaces for programmers}. Scheme kann benutzt werden, um einfach nur Befehle zu @qq{überschreiben} (@code{\override}): @lilypond[quote,verbatim,ragged-right] padText = #(define-music-function (parser location padding) (number?) #{ \once \override TextScript #'padding = #$padding #}) \relative c''' { c4^"piu mosso" b a b \padText #1.8 c4^"piu mosso" d e f \padText #2.6 c4^"piu mosso" fis a g } @end lilypond Hiermit können aber auch neue Befehle erstellt werden: @lilypond[quote,verbatim,ragged-right] tempoMark = #(define-music-function (parser location padding marktext) (number? string?) #{ \once \override Score . RehearsalMark #'padding = $padding \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) \mark \markup { \bold $marktext } #}) \relative c'' { c2 e \tempoMark #3.0 #"Allegro" g c } @end lilypond Sogar ganze musikalische Ausdrücke können eingefügt werden: @lilypond[quote,verbatim,ragged-right] pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) #{ $x e8 a b $y b a e #}) \relative c''{ \pattern c8 c8\f \pattern {d16 dis} { ais16-> b\p } } @end lilypond