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

4.3 Erscheinung von Objekten

@translationof Appearance of objects

In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der vorigen Abschnitte in der Praxis angewandt werden können, um das Aussehen des Musiksatzes zu beeinflussen.


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

4.3.1 Sichtbarkeit und Farbe von Objekten

@translationof Visibility and color of objects

In Unterrichtsmaterial für den Musikunterricht wird oft eine Partitur dargestellt, in der bestimmte Notationselemente fehlen, so dass der Schüler die Aufgabe bekommt, die nachzutragen. Ein einfaches Beispiel ist etwa, die Taktstriche zu entfernen, damit der Schüler sie selber zeichnen kann. Aber die Taktstriche werden normalerweise automatisch eingefügt. Wie verhindern wir, dass sie ausgegeben werden?

Bevor wir uns hieran machen, sei daran erinnert, dass Objekteigenschaften in sogenannten Schnittstellen – engl. interface – gruppiert sind, siehe auch Eigenschaften, die Schnittstellen besitzen können. Das dient ganz einfach dazu, die Eigenschaften zusammenzufassen, die üblicherweise zusammen benötigt werden – wenn eine davon für ein Objekt gilt, dann auch die anderen. Manche Objekte brauchen die Eigenschaften von der einen Schnittstelle, andere von einer anderen. Die Schnittstellen, die die Eigenschaften von einem bestimmten Grob beinhalten, sind in der IR unten auf der Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften können betrachtet werden, indem die Seite der entsprechenden Schnittstelle geöffnet wird.

Zu Information, wie man Eigenschaften von Grobs findet, siehe Eigenschaften von Layoutobjekten. Wir benutzen also jetzt die selbe Methode um in der IR das Layout-Objekt zu finden, dass für die Taktstriche zuständig ist. Über die Überschriften Backend und All layout objects kommen wir zu einem Layout-Objekt mit der Bezeichnung BarLine (engl. Taktstrich). Seine Eigenschaften beinhalten zwei, die über die Sichtbarkeit entscheiden: break-visibility und stencil. BarLine unterstützt auch einige Schnittstellen, unter anderem grob-interface, wo wir eine transparent und eine color-Eigenschaft finden. Alle können die Sichtbarkeit von Taktstriche (und natürlich auch die Sichtbarkeit von vielen anderen Objekten) beeinflussen. Schauen wir uns diese Eigenschaften eine nach der anderen an.


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

Die stencil-Eigenschaft (Matrize)

@translationof The stencil property

Diese Eigenschaft kontrolliert die Erscheinung der Taktstriche, indem sie das Symbol bestimmt, das ausgegeben werden soll. Wie bei vielen anderen Eigenschaften auch, kann sie so eingestellt werden, dass sie nichts ausgibt, indem ihr Wert auf #f (falsch) gesetzt wird. Ein Versuch also, wie vorher, indem wir den impliziten Kontext (Voice) auslassen:

 
\relative {
  \time 12/16
  \override BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Die Taktstriche werden aber immer noch angezeigt. Was ist da falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf die Seite, die die Eigenschaften für BarLine angibt. Oben auf der Seite steht: „Barline objects are created by: Bar_engraver“. Schauen Sie sich die Bar_engraver-Seite an. Unten auf der Seite steht eine Liste der Kontexte, in denen der Takt-Engraver funktioniert. Alle Kontexte sind Staff-Typen (also Notensystem-Typen). Der Grund, warum der \override-Befehl nicht funktioniert hat, liegt also darin, dass das Taktstrich-Objekt (BarLine) sich nicht im Voice-Kontext befindet. Wenn der Kontext falsch angegeben wird, bewirkt der Befehl einfach gar nichts. Keine Fehlermeldung wird ausgegeben und auch nichts in die Log-Datei geschrieben. Versuchen wir also, den richtigen Kontext mit anzugeben:

 
\relative {
  \time 12/16
  \override Staff.BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Jetzt sind die Taktstriche wirklich verschwunden. Setzen der stencil-Eigenschaft auf #f wird derart häufig verwendet, dass es dafür einen eigenen Befehl gibt, \omit:

 
\relative {
  \time 12/16
  \omit Staff.BarLine
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Es sollte jedoch beachtet werden, dass das Setzen der stencil-Eigenschaft auf #f zu Fehlerhinweisen führen kann, wenn die Dimensionen des Objekts für die richtige Behandlung benötigt werden. Zum Beispiel werden Fehler ausgegeben, wenn die stencil-Eigenschaft des NoteHead-Objekts auf #f gesetzt wird. Wenn dieser Fall auftritt, kann anstatt dessen die point-stencil-Funktion benutzt werden, welche den Stencil auf ein Objekt mit der Größe Null setzt:

 
\relative {
  c''4 c
  \once \override NoteHead.stencil = #point-stencil
  c4 c
}

[image of music]


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

The break-visibility-Eigenschaft (unsichtbar machen)

@translationof The break-visibility property

Aus der Beschreibung der Eigenschaften für BarLine in der IR geht hervor, dass die break-visibility-Eigenschaft einen Vektor mit drei Booleschen Werten benötigt. Diese kontrollieren jeweils, ob die Taktstriche am Ende einer Zeile, in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben werden. Wenn also alle Taktstriche unsichtbar sein sollen, wie in unserem Beispiel, brauchen wir den Wert #(#f #f #f), (den es auch unter dem symbolischen Namen all-invisible gibt). Versuchen wir es also, und berücksichtigen wir auch den Staff-Kontext. Beachten Sie auch, dass Sie ## vor der öffnenden Klammer schreiben müssen: # wird benötigt als Teil des Wertes, um einen Vektor zu signalisieren, und das erste # wird benötigt, um den Wert in einem \override-Befehl anzuführen.

 
\relative {
  \time 12/16
  \override Staff.BarLine.break-visibility = ##(#f #f #f)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Auch auf diesem Weg gelingt es, die Taktstriche unsichtbar zu machen.


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

Die transparent-Eigenschaft (durchsichtig)

@translationof The transparent property

Aus den Eigenschaftsdefinitionen auf der grob-interface-Seite in der IR geht hervor, dass die transparent-Eigenschaft boolesch ist. Mit #t (wahr) wird also ein Grob durchsichtig gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig gemacht werden, anstatt die Taktstriche durchsichtig zu machen. Wir brauchen also wieder die Grob-Bezeichnung für die Taktart. Auf der „All layout objects“-Seite in der IR müssen wir die Eigenschaften des TimeSignature-Layout-Objekts suchen Das Objekt wird vom Time_signature_engraver erstellt, der sich auch im Staff-Kontext befindet und genauso das grob-interface unterstützt, wie Sie sich überzeugen können. Der Befehl, um die Taktangabe unsichtbar zu machen, ist also:

 
\relative {
  \time 12/16
  \override Staff.TimeSignature.transparent = ##t
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Auch das Setzen der transparent-Eigenschaft ist ein recht häufige Operation und so gibt es auch hierfür eine Kurzform names \hide:

 
\relative {
  \time 12/16
  \hide Staff.TimeSignature
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

In beiden Fällen ist die Taktangabe ist verschwunden, aber mit diesem Befehl bleibt freier Platz, wo sich die Taktangabe eigentlich befinden würde. Das braucht man vielleicht für eine Schulaufgabe, in der die richtige Taktangabe eingefügt werden soll, aber in anderen Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen, muss stattdessen die Matrize (stencil) der Taktangabe auf #f (falsch) gesetzt werden:

 
{
  \time 12/16
  \override Staff.TimeSignature.stencil = ##f
  c4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Und der Unterschied wird deutlich: Setzen des stencil auf #f (ggf. mittels \omit) entfernt das gesamte Objekt, während man mit transparent (was auch mittels \hide eingestellt werden kann) ein Objekt unsichtbar machen kann, es aber an seinem Platz gelassen wird.


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

Die color-Eigenschaft (Farbe)

@translationof The color property

Abschließend wollen wir die Taktstriche unsichtbar machen, indem wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße Taktstrich übermalt manchmal die Taktstriche, wo sie sie kreuzt, manchmal aber auch nicht. Sie können in den Beispielen unten sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum das passiert und wie sie es kontrollieren können, werden dargestellt in (notation)Objekte weiß malen in Abschnitt ‘Objekte weiß malen’ in Notationsreferenz. Im Moment wollen wir lernen, wie man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die Beschränkung.)

Das grob-interface bestimmt, dass der Wert der Farb-Eigenschaft eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das sein soll. Die Liste, die benötigt wird, ist eine Liste mit Werten in internen Einheiten, aber damit Sie nicht wissen müssen, wie diese aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste Weg ist es, „normale“ Farben zu benutzen, wie sie in der Tabelle in (notation)Liste der Farben in Abschnitt ‘Liste der Farben’ in Notationsreferenz aufgelistet sind. Beachten Sie, dass die Bezeichnungen auf Englisch sind. Um die Taktstriche auf weiß zu setzen, können Sie schreiben:

 
\relative {
  \time 12/16
  \override Staff.BarLine.color = #white
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

und die Taktstriche verschwinden in der Tat. Beachten Sie, dass white nicht mit einem Apostroph angeführt wird – es ist kein Symbol, sondern eine Variable. Wird sie ausgewertet, stellt sie eine Liste mit internen Werten zu Verfügung, mit welcher die Farbe auf weiß gestellt wird. Die anderen Farben in der Liste sind auch Funktionen. Um sich zu überzeugen, dass der Befehl auch wirklich funktioniert, können Sie die Farbe auf eine der anderen Variablen dieser Liste abändern.

Die zweite Art die Farbe zu ändern geschieht, indem die Liste der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste in (notation)Liste der Farben in Abschnitt ‘Liste der Farben’ in Notationsreferenz. Diese Namen werden durch die Funktion x11-color durch die tatsächlichen internen Farbwerte ersetzt. Das geschieht wie folgt:

 
\relative {
  \time 12/16
  \override Staff.BarLine.color = #(x11-color 'white)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

In diesem Fall hat die Funktion x11-color ein Symbol als Argument, darum muss dem Symbol ein Apostroph vorangestellt werden, damit es nicht als Variable interpretiert wird. Beide zusammen müssen in Klammern gesetzt werden.

Es gibt noch eine weitere Funktion, die RGB-Werte in die internen Werte übersetzt – die rgb-color-Funktion. Sie braucht drei Argumente, um die Stärke von Rot, Grün und Blau darzustellen. Die Werte befinden sich zwischen 0 und 1. Um also die Farbe Rot darzustellen, muss der Wert der Funktion lauten: (rgb-color 1 0 0), weiß würde sein: (rgb-color 1 1 1).

 
\relative {
  \time 12/16
  \override Staff.BarLine.color = #(rgb-color 1 1 1)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Schließlich gibt es noch eine Grauskala, die zu den X11-Farben gehört. Sie reicht von schwarz ('grey0) bis weiß ('grey100), in Einerschritten. Wir wollen das illustrieren, indem alle Layout-Objekte im Beispiel verschiedene Grauschattierungen erhalten:

 
\relative {
  \time 12/16
  \override Staff.StaffSymbol.color = #(x11-color 'grey30)
  \override Staff.TimeSignature.color = #(x11-color 'grey60)
  \override Staff.Clef.color = #(x11-color 'grey60)
  \override Voice.NoteHead.color = #(x11-color 'grey85)
  \override Voice.Stem.color = #(x11-color 'grey85)
  \override Staff.BarLine.color = #(x11-color 'grey10)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen, damit die Befehle funktionieren. Denken Sie daran, dass der Kontext sich daran orientiert, wo sich der entsprechende Engraver befindet. Den Standardkontext für Engraver finden Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver gehen, der es produziert und auf der Seite des Engravers in der IR finden Sie Information, in welchem Kontext sich der Engraver normalerweise befindet.


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

4.3.2 Größe von Objekten

@translationof Size of objects

Als Startpunkt wollen wir wieder ein früheres Beispiel wählen, siehe Musikalische Ausdrücke ineinander verschachteln. Hier wurde ein neues Notensystem erstellt, wie man es für ein (music-glossary)ossia in Abschnitt ‘ossia’ in Glossar braucht.

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main" }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt. Wie man Schlüssel und Taktangabe entfernt, wissen wir schon: wir setzen den Stencil von beiden auf #f:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
      }
      {
        \omit Staff.Clef
        \omit Staff.TimeSignature
        { f8 f c }
      }
    >>
    r4 |
  }
}

[image of music]

wobei ein zusätzliches Klammerpaar nach der \with-Konstruktion erforderlich ist um sicherzugehen, dass die Modifikation und die Noten sich auch auf das Ossia-System beziehen.

Was für einen Unterschied macht es, ob man den Staff-Kontext mit \with verändert, oder ob man die Stencils mit \override oder wie in diesem Fall mit \omit beeinflusst? Der größte Unterschied liegt darin, dass Änderungen, die mit \with eingeführt werden, während der Erstellung des Kontextes mit erzeugt werden und als Standardeinstellungen für diesen Kontext während seiner gesamten Dauer gelten, während \set- oder \override-Befehle dynamisch in die Noten eingebettet werden – sie führen die Änderungen synchron mit einem bestimmten Zeitpunkt in der Musik aus. Wenn die Änderungen mit \unset oder \revert rückgängig gemacht werden, werden wieder die Standardwerte eingesetzt, die also die sind, die mit einer \with-Konstruktion definiert wurden, oder wenn hier keine definiert worden sind, die normalen Standardwerte.

Manche Kontexteigenschaften können nur ein einer \with-Konstruktion verändert werden. Das sind Eigenschaften, die nicht sinnvoll mitten im System geändert werden können. alignAboveContext (Orientierung über dem Kontext) und die Parallele, alignBelowContext (Orientierung unter dem Kontext) sind zwei derartige Eigenschaften – wenn das Notensystem einmal erstellt wurde, ist die Orientierung schon bestimmt und es wäre nicht sinnvoll, sie später zu ändern.

Die Standardwerte für Layout-Objekt-Eigenschaften können auch in der \with-Konstruktion gesetzt werden. Benutzen Sie einfach den normalen \override-Befehl ohne den Kontext, denn der Kontext ist eindeutig definiert durch die Stelle, an welcher sich \with befindet. Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond eine Fehlermeldung.

Das obige Beispiel könnte also auch so aussehen:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        % Don't print clefs in this staff
        \override Clef.stencil = ##f
        % Don't print time signatures in this staff
        \override TimeSignature.stencil = ##f
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Es zeigt sich, dass wir hier ebenso die Kurzformen \hide und \omit zum Setzen der transparent-Eigenschaft und zum Entfernen des stencil verwenden können, was zu folgender Fassung führt

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        % Don't print clefs in this staff
        \omit Clef
        % Don't print time signatures in this staff
        \omit TimeSignature
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Nun können wir daran gehen, auch wirklich die Größe der Objekte zu ändern.

Manche Layout-Objekte werden aus Glyphen erstellt, die sich in einer Schriftartdatei befinden. Dazu gehören die Notenköpfe, Versetzungszeichen, Text, Schlüssel, Taktbezeichnung, Dynamik und Gesangstext. Ihre Größe wird verändert, indem die font-size- (Schriftgröße)-Eigenschaft geändert wird, wie wir bald sehen werden. Andere Layout-Objekte, wie Bögen – oder allgemein Strecker-Objekte – werden individuell gezeichnet, es gibt dazu also keine font-size, die mit ihnen verknüpft wäre. Weitere Eigenschaften wie die Länge von Hälsen und Taktstriche, Dicke von Balken und anderen Linien und der Abstand der Notenlinien voneinander müssen auf spezielle Weise verändert werden.

In unserem Ossia-Beispiel wollen wir zuerst die Schriftgröße verändern. Das ist auf zwei Arten möglich. Entweder wir ändern die Schriftgröße für jede Objektart mit einem eigenen Befehl, etwa:

 
\override NoteHead.font-size = #-2

oder wir ändern die Größe aller Schriftobjekte, indem wir den Wert einer besonderen Eigenschaft, fontSize, mit dem \set-Befehl bestimmen oder sie in eine \with-Konstruktion (ohne \set einschließen.

 
\set fontSize = #-2

Beide Beispiele reduzieren die Schriftgröße um zwei Schritte im Vergleich zum vorigen Wert, wobei jeder Schritt die Schriftgröße um etwa 12% verändert.

Setzen wir das also in unserem Ossia-Beispiel ein:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        \omit Clef
        \omit TimeSignature
        % Verkleinere alle Fonts um ~24%
        fontSize = #-2
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Das sieht aber immer noch nicht richtig aus. Die Notenköpfe und Fähnchen sind kleiner, aber die Hälse im Vergleich dazu zu lang und die Notenlinien zu weit auseinander. Sie müssen auch proportional zur Schriftart verkleinert werden. Der nächste Abschnitt behandelt diese Anpassung.


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

4.3.3 Länge und Dicke von Objekten

@translationof Length and thickness of objects

Abstände und Längen werden in LilyPond üblicherweise in Notenlinienabständen (engl. staff-spaces) gemessen. Das ist der Abstand zwischen zwei Notenlinien im System. Die meisten Dicken (engl. thickness) dagegen werden in einer internen Einheit Linien-Dicke (engl. line-thickness) gemessen. Die Linien von Dynamikklammern zum Beispiel haben standardmäßig eine Dicke von einer Einheit line-thickness, während die Dicke eines Notenhalses 1,3 ist. Beachten Sie jedoch, dass sich manche Dicken anders verhalten: die Dicke von Balken etwa wird in Notenlinienabständen gemessen.

Wie also werden Längen skaliert um der Schriftgröße zu entsprechen? Das kann mit einer besonderen Funktion magstep vorgenommen werden, die genau für diesen Zweck vorhanden ist. Sie nimmt ein Argument auf, die Änderung der Schriftgröße (#-2 im obigen Beispiel) und gibt einen Skalierungsfaktor aus, der dazu dient, Objekte proportional zueinander zu verändern. So wird sie benutzt:

 
\new Staff ="main" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "main"
        \omit Clef
        \omit TimeSignature
        fontSize = #-2
        % Reduziere Halslängen und Notenlinienabstände in gleicher Weise
        \override StaffSymbol.staff-space = #(magstep -2)
      }
      { f8 f c }
    >>
    r4 |
  }
}

[image of music]

Da die Länge eines Halses und viele andere Längeneigenschaften relativ zum Wert des Notenlinienabstands (staff-space) errechnet werden, werden sie auch automatisch verkleinert. Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias aus – die horizontale Skala ist durch das Layout des Haupsystems bestimmt und wird also von diesen Größenänderungen nicht betroffen. Wenn natürlich die Größe der gesamten Noten reduziert würde, würde sich auch die horizontalen Abstände ändern. Dass wird später im Layout-Abschnitt betrachtet.

Mit dieser Änderung ist unser Ossia fertig. Die Größen und Längen aller anderen Objekte können auf analoge Weise geändert werden.

Für kleine Größenänderungen, wie in dem obigen Beispiel, braucht die Dicke der verschiedenen Linien, wie Taktstriche, Notenlinien, Balken, Dynamikklammern usw. normalerweise keine spezielle Anpassung. Wenn die Dicke eines bestimmten Layout-Objektes angepasst werden muss, kann man das erreichen, indem die entsprechende thickness-Eigenschaft des Objekts mit \override verändert wird. Ein Beispiel, wie man die Dicke von Bögen ändert, wurde schon gezeigt, siehe Eigenschaften von Layoutobjekten. Die Dicke aller gezeichneten Objekte (die also nicht aus einer Schriftart stammen) können auf gleiche Weise geändert werden.


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

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

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