Slash chords kleiner und tiefgestellt mit kreuz oder b statt deutschem Namen

Begonnen von Multimax, Donnerstag, 25. November 2021, 19:45

« vorheriges - nächstes »

Multimax

Hallo,

ich würde gerne die Slashchords etwas kleiner und tiefer gestellt haben, wie in dem angehängten Beispiel. Zusätzlich sollte der Basston auch mit # oder b ausgedrückt werden, also Ab anstatt As oder F# anstatt Fis.

Eine Funktion für die  Großbuchstaben hat harm schonmal in einem Beitrag https://archiv.lilypondforum.de/index.php?topic=1021.0 gepostet.

Könnte mir jemand helfen?


Multimax

Mir fällt gerade noch spontan ein, dass man vielleicht Kapitälchen (oder in englisch small caps) nehmen könnte. Damit hätte man aber noch keine Tiefstellung.

Ich würde sogar sagen, der Ersteller dieses Buches hat das sogar gemacht. Wenn man sich die kleinen Kapitalen anguckt, haben sie nämlich die gleiche Stärke. Typografisch machts ja auch Sinn.

harm6

Hallo,

meinst Du so:


\language "deutsch"

\layout  {
  \context {
    \ChordNames
    %% numerical values found by try and error
    slashChordSeparator =
      \markup \raise #-0.8
        \with-dimensions #'(0 . 0.4) #'(0 . 2.4) \beam #0.6 #4.4 #0.1
   
    chordNoteNamer =
       #(lambda (pitch lowercase?)
         (make-sub-markup ((chord-name->german-markup #t) pitch lowercase?)))

    chordNameLowercaseMinor = ##t
  }
}

\new ChordNames \chordmode { g4 g/fis e:m7 g/h g/a }


Gruß,
  Harm

EDIT code korrigiert

Multimax

Ja, super, danke. Genau so meine ich das.

Kapitälchen werden übrigens leider nicht angeboten, da kein Schriftschnitt vorhanden ist.

Wie der Slash in Deinem Code gebaut wird, habe ich verstanden.

Aber wie wird der Buchstabe nach dem Slash definiert?
Lowercase heißt ja eigentlich Kleinbuchstabe. Aber ich vermute, dass ist der Buchstabe für die Bassnote. Wo in dem Code steckt die Anweisung, dass er ein Großbuchstabe wird?

harm6

ZitatAber wie wird der Buchstabe nach dem Slash definiert?
Lowercase heißt ja eigentlich Kleinbuchstabe. Aber ich vermute, dass ist der Buchstabe für die Bassnote. Wo in dem Code steckt die Anweisung, dass er ein Großbuchstabe wird?

Kurze Antwort:
Nirgendwo, passiert automatisch, `lowercase?' ist nur der Name einer Variablen.

Langfassung:

Die Lage:
Zusätzliche Basstöne, also das nach dem Slash, werden per `chordNoteNamer' formatiert, einem context-property.
Per default '(), also ungesetzt! Es springt dann die procedure für den `chordRootNamer' ein, per default `note-name->markup'. Das hat zwar eine `lowercase?'-Variable, kann also das Ergebnis durchaus klein oder groß drucken. Allerdings wird die `lowercase?'-Variable im `chordNoteNamer' seitens LilyPond immer mit #f angeliefert.
Per default wird also immer gross gedruckt.
Wenn man etwas anderes haben möchte, muß man den `chordNoteNamer' auf eine andere procedure setzen.
Vordefiniert sind ja `frenchChords', `germanChords', `semiGermanChords' und `italianChords'
Für `germanChords' und `semiGermanChords' wird die `lowercase?'-Variable schlichtweg ignoriert, die Kleinbuchstaben dort sind hardcoded. `frenchChords' und `italianChords' funktionieren noch anders (verständlicherweise).

Das Ziel:
Gewollt sind deutsche Notennamen (für den zusäzlichen Baßton), großgedruckt.

Der Weg:
Für den `chordNoteNamer' nehmen wir nicht den default für `germanChords', sondern die procedure für den deutschen `chordRootNamer' und nutzen dazu aus, daß dort die `lowercase?'-Variable immer #f ist.
Und fügen noch die Verschiebung ein, per sub-markup.

Et voilà.

Gruß,
  Harm

Multimax

Vielen Dank für die ausführliche Antwort. Jetzt hab ichs verstanden.