[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.5 Fortgeschrittene Optimierungen

@translationof Advanced tweaks

Dieser Abschnitt behandelt verschiedene Möglichkeiten, das Aussehen des Notenbildes zu polieren.

Siehe auch

Handbuch zum Lernen: (learning)Die Ausgabe verbessern in Abschnitt ‘Die Ausgabe verbessern’ in Handbuch zum Lernen, (learning)Mehr Information in Abschnitt ‘Mehr Information’ in Handbuch zum Lernen.

Notationsreferenz: Die Referenz der Programminterna erklärt, Eigenschaften verändern.

Erweitern: (extending)Schnittstellen für Programmierer in Abschnitt ‘Schnittstellen für Programmierer’ in Extending.

Installierte Dateien: ‘scm/define-grobs.scm’.

Schnipsel: (snippets)Tweaks and overrides in Abschnitt ‘Tweaks and overrides’ in Schnipsel.

Referenz der Interna: (internals)All layout objects in Abschnitt ‘All layout objects’ in Referenz der Interna.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.5.1 Objekte ausrichten

@translationof Aligning objects

Graphische Objekte, die das self-alignment-interface und/obder das side-position-interface unterstützen, können an einem vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden. Eine Liste derartiger Objekte findet sich in (internals)self-alignment-interface in Abschnitt ‘self-alignment-interface’ in Referenz der Interna und (internals)side-position-interface in Abschnitt ‘side-position-interface’ in Referenz der Interna.

Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale Ausdehnung und eine vertikale Ausdehnung. Die horizontale Ausdehnung ist ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen nach links mit negativen Zahlen notiert werden. Die vertikale Ausdehnung ist ein Zahlenpaar, das die Verschiebung der unteren und oberen Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach unten mit negativen Zahlen notiert werden.

Die Position eines Objektes auf dem Notensystem wird mit Werten von X-offset und Y-offset angegeben. Der Wert von X-offset gibt die Verschiebung von der X-Koordinate des Referenzpunkts des Elternobjektes an, der Wert von Y-offset die Verschiebung ausgehend von der Mittellinie des Notensystemes. Die Werte von X-offset und Y-offset können direkt bestimmt werden oder durch Prozeduren errechnet werden, sodass eine Ausrichtung mit dem Elternobjekt erreicht werden kann.

Achtung: Viele Objekte brauchen besondere Überlegungen zu ihrer Position, weshalb in manchen Fällen manuell gesetzte Werte von X-offset oder Y-offset ignoriert oder verändert werden können, obwohl das Objekt das self-alignment-interface unterstützt. Wenn man X-offset oder Y-offset auf einen festen Wert setzt, wird die entsprechende self-alignment-Eigenschaft ignoriert.

Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung von Y-offset verschoben werden, aber Änderungen von X-offset haben keine Auswirkung.

Übungszeichen können an trennbaren Objekten (wie Taktstrichen, Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden. In break-aligned-interface finden sich besondere Eigenschaften, mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können.

Siehe auch

Notationshandbuch: Benutzung des break-alignable-interface.

Erweitern: (extending)Callback functions in Abschnitt ‘Callback functions’ in Extending.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

X-offset und Y-offset direkt setzen

@translationof Setting X-offset and Y-offset directly

Numerische Werte können den X-offset- und Y-offset-Eigenschaften vieler Objekte zugewiesen werden. Das folgende Beispiel zeigt drei Noten mit der Standardposition von Fingersatzanweisungen und die Positionen, wenn X-offset und Y-offset verändert werden.

 
a'-3
a'
-\tweak X-offset #0
-\tweak Y-offset #0
-3
a'
-\tweak X-offset #-1
-\tweak Y-offset #1
-3

[image of music]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Das side-position-interface benutzen

@translationof Using the side-position-interface

Ein Objekt, das die side-position-interface-Schnittstelle unterstützt, kann neben sein Elternobjekt gesetzt werden, sodass zwei definierte Enden der Objekte sich berühren. Das Objekt kann über, unter, rechts oder links vom Ursprungsobjekt positioniert werden. Das Ursprungsobjekt kann nicht definiert werden: es ergibt sich aus der Reihenfolge der Objekte in der Eingabe. Die meisten Objekte haben einen Notenkopf als Ursprung assoziiert.

Die Werte von side-axis und direction bestimmen, wo das Objekt platziert werden soll, wie in der Tabelle zu sehen:

side-axis-direction-
EigenschaftEigenschaftPlatzierung
0-1links
01rechts
1-1unten
11oben

Wenn side-axis gleich 0 ist, sollte X-offset auf die Prozedur ly:side-position-interface::x-aligned-side gesetzt werden. Diese Prozedur errechnet den richtigen Wert für X-offset, sodass das Objekt auf der rechten oder linken Seite des Ursprungs angeordnet wird, entsprechend dem Wert der direction-Eigenschaft.

Wenn side-axis gleich 1 ist, sollte Y-offset auf die Prozedur ly:side-position-interface::y-aligned-side gesetzt werden. Diese Prozedur errechnet den richtigen Wert für Y-offset, sodass das Objekt über oder unter dem Ursprungsobjekt angeordnet wird, entsprechend dem Wert der direction-Eigenschaft.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Das self-alignment-interface benutzen

@translationof Using the self-alignment-interface

Selbstausrichtende Objekte horizontal

Die horizontale Ausrichtung eines Objektes, das die self-alignment-interface-(Selbstausrichtungs)-Schnittstelle unterstützt, wird durch den Wert von self-alignment-X kontrolliert, vorausgesetzt die Eigenschaft X-offset des Objektes ist auf ly:self-alignment-interface::x-aligned-on-self gesetzt. self-alignment-X kann eine beliebige reale Zahl zugewiesen werden, in Einheiten der Hälfte der X-Gesamtausdehnung des Objekts. Negative Werte verschieben das Objekt nach rechts, positive nach links. Ein Wert von 0 zentriert das Objekt auf dem Referenzpunkt des Ursprungs, ein Wert von -1 richtet die linke Ecke des Objekts am Referenzpunkt des Ursprungsobjektes aus, ein Wert von 1 richtet die rechte Ecke des Objektes am Referenzpunkt des Ursprungsobjektes aus. Die Symbole LEFT, CENTER und RIGHT können anstelle von -1, 0 und 1 eingesetzt werden.

Normalerweise würde der \override-Befehl benutzt werden, um die Werte von self-alignment-X zu verändern, aber der \tweak-Befehl kann benutzen, um verschiedene Anmerkungen an einer einzigen Note auszurichten:

 
a'
-\tweak self-alignment-X #-1
^"left-aligned"
-\tweak self-alignment-X #0
^"center-aligned"
-\tweak self-alignment-X #RIGHT
^"right-aligned"
-\tweak self-alignment-X #-2.5
^"aligned further to the right"

[image of music]

Objekte vertikal automatisch ausrichten

Objekte können auf ähnliche Weise auch vertikal aneinander ausgerichtet werden, wenn ihre Y-offset-Eigenschaft auf ly:self-alignment-interface::y-aligned-on-self gesetzt ist. Oft greifen jedoch auch andere Mechanismen bei der vertikalen Ausrichtung ein: Der Wert von Y-offset ist nur eine der Variablen, die für die Berechnung benutzt werden. Darum ist es kompliziert, den Wert für einige Objekte richtig anzupassen. Die Einheiten sind Halbe der vertikalen Ausdehnung des Objektes, welche normalerweise recht klein ist, sodass ziemlich große Werte erforderlich sein können. Der Wert -1 richtet die untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes aus, der Wert 0 richtet die Mitte des Objekts am Referenzpunkt des Ursprungsobjektes aus und der Wert 1 richtet die Oberkante des Objektes am Referenzpunkt des Ursprungsobjektes aus. Die Symbole DOWN, CENTER und UP können anstelle von -1, 0 und 1 benutzt werden.

Automatische Ausrichtung in beide Richtungen

Indem sowohl X-offset als auch Y-offset eingestellt werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet werden.

Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so ausrichtet, dass sie nah am Notenkopf bleibt.

 
a'
-\tweak self-alignment-X #0.5  % move horizontally left
-\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
-\tweak self-alignment-Y #-1  % move vertically up
-3  % third finger

[image of music]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Benutzung des break-alignable-interface

@translationof Using the break-alignable-interface

Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich Taktstriche) ausgerichtet werden. Zu diesen Objekten gehören ambitus, breathing-sign, clef, custos, staff-bar, left-edge, key-cancellation, key-signature und time-signature.

Standardmäßig werden Übungszeichen und Taktzahlen horizontal über dem Objekt zentriert:

 
% The RehearsalMark will be centered above the Clef
\override Score.RehearsalMark.break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
e1
% The RehearsalMark will be centered above the TimeSignature
\override Score.RehearsalMark.break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
% The rehearsal mark will be centered above the Breath Mark
\override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
\key a \major
\clef treble
\time 4/4
e1
\breathe
\mark "↓"

[image of music]

Eine Liste von möglichen Objekten zur Ausrichtung kann definiert werden. Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar ist (etwa durch Einstellung von break-visibility oder die expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen), werden Übungszeichen und Taktzahlen an dem ersten Objekt in der Liste ausgerichtet, dass sichtbar ist. Wenn keine Objekte in der Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet. Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle ausgerichtet, an der sich der Taktstrich befinden würde.

 
% The RehearsalMark will be centered above the Key Signature
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e1
% The RehearsalMark will be centered above the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef bass
\mark "↓"
gis,,1
% The rehearsal mark will be centered above the Bar Line
\set Staff.explicitKeySignatureVisibility = #all-invisible
\set Staff.explicitClefVisibility = #all-invisible
\override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
e''1

[image of music]

Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann verändert werden, wie das nächste Beispiel zeigt. In einer Partitur mit vielen Systemen würde man diese Einstellung für alle Systeme vornehmen.

 
% The RehearsalMark will be centered above the KeySignature
\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the KeySignature
\once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
e1
% The RehearsalMark will be aligned with the right edge of the KeySignature
\once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
e1

[image of music]

Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert verschoben werden. Die Einheiten sind in Notenlinienzwischenräumen:

 
% The RehearsalMark will be aligned with the left edge of the KeySignature
% and then shifted right by 3.5 staff-spaces
\override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\once \override Score.KeySignature.break-align-anchor = #3.5
\key a \major
\mark "↓"
e1
% The RehearsalMark will be aligned with the left edge of the KeySignature
% and then shifted left by 2 staff-spaces
\once \override Score.KeySignature.break-align-anchor = #-2
\key a \major
\mark "↓"
e1

[image of music]


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.5.2 Vertikale Gruppierung der grafischen Objekte („grob“s)

@translationof Vertical grouping of grobs

Die graphischen Objekte VerticalAlignment und VerticalAxisGroup funktionieren zusammen. VerticalAxisGroup gruppiert unterschiedliche Objekte wie Notensysteme, Gesangstext usw. zusammen. VerticalAlignment richtet die unterschiedlichen Objektgruppen dann aneinander aus. Es gibt normalerweise nur ein VerticalAlignment in einer Partitur, aber jedes Notensystem, Gesangstext usw. hat eine eigene VerticalAxisGroup.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.5.3 stencils verändern

@translationof Modifying stencils

Alle Layout-Objekte haben eine stencil-(Stempel-)Eigenschaft, die ein Teil von grob-interface ist. Diese Eigenschaft ist normalerweise als eine Funktion definiert, die auf das jeweilige Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild erscheint. Beispielsweise die Standardeinstellung für die stencil-Eigenschaft von MultiMeasureRest (Ganztaktpausenobjekt) ist ly:multi-measure-rest::print.

Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man die stencil-Eigenschaft verändert, sodass sie auf eine andere, speziell geschriebene Prozedur verweist. Das erfordert einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse erzielen kann.

Dieser Weg besteht darin, die stencil-Eigenschaft auf die Prozedur zu verweisen, die Text ausgibt: ly:text-interface::print und eine text-Eigenschaft zu dem Objekt hinzuzufügen, in welcher dann die Textbeschriftung definiert wird, mit der das entsprechende Symbol dargestellt wird. Aufgrund der Flexibilität der Textbeschriftung ist hier sehr viel möglich. Siehe zu Details insbesondere Graphische Notation innerhalb einer Textbeschriftung.

Das folgende Beispiel zeigt diese Methode, indem das Symbol der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt wird.

 
XinO = {
  \once \override NoteHead.stencil = #ly:text-interface::print
  \once \override NoteHead.text = \markup {
    \combine
      \halign #-0.7 \draw-circle #0.85 #0.2 ##f
      \musicglyph "noteheads.s2cross"
  }
}
\relative {
  a' a \XinO a a
}

[image of music]

Alle Schriftzeichen in der Feta-Glyphe können mit dem \musicglyph-Befehl erreicht werden. Siehe auch Die Emmentaler-Schriftart.

Siehe auch

Notationsreferenz: Graphische Notation innerhalb einer Textbeschriftung, Text formatieren, Textbeschriftungsbefehle, Die Emmentaler-Schriftart.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.5.4 Formen verändern

@translationof Modifying shapes


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

Bögen verändern

@translationof Modifying ties and slurs

Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven dritter Ordnung gezeichnet. Wenn die Form eines automatischen Bogens nicht optimal ist, kann sie manuell verändert werdne, indem man die vier erforderlichen Kontrollpunkte angibt.

Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven bezeichnet) werden durch vier Kontrollpunkte definiert. Der erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve an. Die zwei Punkte dazwischen werden benutzt, um die Form der Kurve zu bestimmen. Im Internet gibt es Animationen, die illustrieren, wie eine derartige Kurve gezeichnet wird, aber die folgende Beschreibung kann hilfreich sein. Die Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten, wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin krümmt. Die Form der Kurve wird vollständig von den vier Punkten definiert.

Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal erscheint, und wo auch \tieDown das Problem nicht lösen würde.

 
<<
  { e'1~ 1 }
\\
  \relative { r4 <g' c,> <g c,> <g c,> }
>>

[image of music]

Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine Kontrollpunkte manuell zu verändern:

Die Koordinaten von Bézierkontrollpunkten werden in Notenlinienzwischenräumen angegeben. Die X-Achse ist relativ zum Referenzpunkt der Note, an die der Bogen angefügt wird, und die Y-Achse relativ zur Mittellinie des Notensystems. Die Koordinaten werden als eine Liste von vier Paaren an realen Dezimalzahlen eingegeben. Eine Möglichkeit ist es, die Koordinaten der zwei Endpunkte zu schätzen und dann die zwei Zwischenpunkte zu erraten. Die optimalen Werte können nur durch Ausprobieren gefunden werden.

Es lohnt sich daran zu denken, dass eine symmetrische Kurve symmetrische Kontrollpunkte benötigt, und dass Bézierkurven die nützliche Eigenschaft haben, dass eine Transformation der Kurve wie eine Übersetzung, Drehung oder Skalierung der Kurve erreicht werden kann, indem man die gleiche Skalierung auf die Kontrollpunkte anwendet.

In dem obigen Beispiel geben folgende Werte einen zufriedenstellenden Bogen – Achtung: der Befehl muss direkt vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt wird.

 
<<
  {
  \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
  e1~ 1
  }
\\
  { r4 <g c,> <g c,> <g c,>  }
>>

[image of music]

Bekannte Probleme und Warnungen

Es ist nicht möglich, die Form von Bögen anhand ihrer control-points-Eigenschaft zu verändern, wenn mehrere Binde- oder Legatobögen zum gleichen musikalischen Moment auftreten, nicht einmal mit dem \tweak-Befehl. Die Eigenschaft tie-configuration von TieColumn kann jedoch verändert werden, sodass Startlinie und Richtung wie benötigt platziert werden.

Siehe auch

Referenz der Interna: (internals)TieColumn in Abschnitt ‘TieColumn’ in Referenz der Interna.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

5.5.5 Reine und unreine Container

@translationof Unpure-pure containers

Unreine und reine Container (engl. unpure/pure containers) sind nützlich, wenn man die Berechnungen der Platzierungen für die Y-Achse verändern will, insbesondere für Y-offset und Y-extent. Mit diesen Containern kann die Veränderung durch eine Scheme-Funktion anstelle einer direkten Zahl oder eines Paares vorgenommen werden.

Für bestimmte Grobs basiert die Eigenschaft Y-extent auf der stencil-Eigenschaft. Wenn diese mit \override verändert werden soll, braucht man eine zusätzliche Veränderung von Y-extent mit einem unreinen-reinen Container. Wenn eine Funktion Y-offset und/oder Y-extent verändert, wird angenommen, dass dadurch Zeilenumbruchsberechnungen zu früh während der Kompilation aufgerufen werden. Die Funktion wird also überhaupt nicht ausgewertet (und gibt also normalerweise den Wert ‘0’ oder ‘'(0 . 0)’ zurück), wodurch sich Zusammenstöße ergeben können. Eine „saubere“ Funktion beeinflusst keine Eigeschaften, Objekte oder Grob-Suizide, weshalb ihre Werte, die sich auf Y-axis beziehen, richtig berechnet werden.

Es gibt zuzeit etwa 30 Funktionen, die schon als „sauber“ erachtet werden, und unsaubere-saubere Container sind eine Möglichkeit, auch Funktionen, die sich nicht auf dieser Liste befinden, als „sauber“ zu markieren. Die „saubere“ Funktion wird ausgewertet, bevor Seitenumbruch stattfindet, sodass die horizontale Platzierung „rechtzeitig“ stattfindet. Die „unsaubere“ Funktion wird dann nach dem Seitenumbruch ausgewertet.

Achtung: Da es schwierig ist, immer sicher zu sein, welche Funktionen sich auf dieser Liste befinden, wird empfohlen, dass die selbsterstellten „sauberen“ Funktionen nicht die Grobs Beam oder VerticalAlignment einsetzen.

Ein unsauberer-sauberer Container wird wie folgend erstellt:

(ly:make-unpure-pure-container f0 f1)

wobei f0 eine Fuktion ist, die n Arguments braucht (n >= 1) und deren erstes Argument immer der Grob sein muss. Das ist die Funktion, die das eigentliche Resultat ausgibt. f1 ist die Funktion, die als „sauber“ bezeichnet wird, und braucht n + 2 Argumente. Wiederum muss das erste Argument immer der Grob sein, aber das erste und zweite Argument sind „Beginn-“ und „Endeargumente“.

start (Beginn) und end (Ende) sind absichtlich nur Platzhalter, die nur für die Strecker gelten (etwa Hairpin oder Beam), die unterschiedliche Höhenberechnungen je nach beginnender und endender Note ausgeben können.

Der Rest sind andere Argumente für die erste Funktion (es können auch Null sein, wenn n = 1).

Die Ergebnisse der zweiten Funktion werden als Näherungswert des benötigten Wertes benutzt, welche dann von der ersten Funktion eingesetzt wird, um den wirklichen Wert auszugeben, mit dem dann sehr viel später im Layoutprozess die Platzierung justiert werden soll.

 
#(define (square-line-circle-space grob)
(let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
      (notename (ly:pitch-notename pitch)))
 (if (= 0 (modulo notename 2))
     (make-circle-stencil 0.5 0.0 #t)
     (make-filled-box-stencil '(0 . 1.0)
                              '(-0.5 . 0.5)))))

squareLineCircleSpace = {
  \override NoteHead.stencil = #square-line-circle-space
}

smartSquareLineCircleSpace = {
  \squareLineCircleSpace
  \override NoteHead.Y-extent =
   #(ly:make-unpure-pure-container
      ly:grob::stencil-height
      (lambda (grob start end) (ly:grob::stencil-height grob)))
}

\new Voice \with { \remove "Stem_engraver" }
\relative c'' {
  \squareLineCircleSpace
  cis4 ces disis d
  \smartSquareLineCircleSpace
  cis4 ces disis d
}

[image of music]

Im ersten Takt weiß die Layoutmaschine ohne den unsauberen-sauberen Container nicht die Breite des Notenkopfes und lässt ihn deshalb mit den Versetzungszeichen zusammenstoßen. Im zweiten Takt, mit unreinen-reinen Containern, weiß die Layoutmaschine die Breite des Notenkopfes und vermeidet den Zusammenstoßf, indem die Zeile entsprechend verlängert wird.

Normalerweise können für eine einfache Berechnungen fast identische Funktionen für den „unsauberen“ und „sauberen“ Teil benutzt werden, indem nur die Zahl der Argumente und die Reichweite der Funktion verändert wird.

Achtung: Wenn eine Funktion als „sauber“ bezeichnet ist und das aber nicht ist, können unerwartete Ergebnisse auftreten.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]

Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.

Andere Sprachen: English, català, español, français, italiano, 日本語.
Über die automatische Sprachauswahl.