Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: erich am Montag, 6. Dezember 2021, 15:28

Titel: markup funktion
Beitrag von: erich am Montag, 6. Dezember 2021, 15:28
Hallo allen!
Das kleine Skript
\version "2.23.2"
  \new Voice {  c''2
               \mark \markup{ \hspace #2 \box \fontsize #-2
                 \combine
                 \number "3"
                 \translate #'(1.6 . 1.1)
                 \musicglyph "accidentals.sharp"}
               cis'' }


setzt mir 3# in einem Kasten als Marke über die Notenlinie.
Ich hätte gerne eine Funktionsdefinition, so dass ich die Marke durch "\kreuz 3" setzen kann.

Gruß Erich
Titel: Antw:markup funktion
Beitrag von: Manuela am Dienstag, 7. Dezember 2021, 09:19
So auf die Schnelle
#(define-markup-command (kreuz layout props ziffer)
   (string?)
   (interpret-markup layout props
     #{
       \markup {
         \hspace #2 \box \fontsize #-2
         \combine
         \number $ziffer
         \translate #'(1.6 . 1.1)
         \musicglyph "accidentals.sharp"
       }
     #}
     ))

\new Voice {
  \mark \markup {
    \hspace #2 \box \fontsize #-2
    \combine
    \number "3"
    \translate #'(1.6 . 1.1)
    \musicglyph "accidentals.sharp"
  }
  c''2
  \mark \markup \kreuz "4"
  cis''
}


Wahlweise könnte man noch die verschiedenen Größen wie Schriftgröße etc. als variable Parameter definieren.

Hier gibt es eine ausführlichere Dokumentation: 2.5.3 Neue Definitionen von Beschriftungsbefehlen (http://lilypond.org/doc/v2.23/Documentation/extending/new-markup-command-definition)
Titel: Antw:markup funktion
Beitrag von: erich am Dienstag, 7. Dezember 2021, 11:49
Danke Manuela!

Gibt es nicht auch noch die Möglichkeit statt  \mark \markup \kreuz "4" einfach  \kreuz 4 zu setzen?

Gruß
Erich
Titel: Antw:markup funktion
Beitrag von: Manuela am Dienstag, 7. Dezember 2021, 12:24
Zitat von: erich am Dienstag,  7. Dezember 2021, 11:49
Gibt es nicht auch noch die Möglichkeit statt  \mark \markup \kreuz "4" einfach  \kreuz 4 zu setzen?

Auf die Schnelle habe ich keine Idee, vll weiß ja Harm etwas? Man müsste wahrscheinlich die Definition von RehearsalMark finden und analysieren

Update: zu kompliziert gedacht.

Das funktioniert aber (noch) nicht richtig:
kreuz =
#(define-scheme-function (ziffer) (string?)
   #{
     \mark \markup \box { \number $ziffer }
   #}
   )

\relative c' { c2 c4\kreuz "3" }


Ich kriege eine Fehlermeldung

Warnung: Unendlich oder nan in Ausgabe gefunden. Wird durch 0.0 ersetzt

und die Notenlinien sind verschwunden
Titel: Antw:markup funktion
Beitrag von: harm6 am Donnerstag, 9. Dezember 2021, 10:34
Zitat von: Manuelavll weiß ja Harm etwas?

Ich würde eine music-function nehmen, keine scheme-function, aber ansonsten geht Dein Code völlig in Ordnung.

Das es im Beispiel nicht funktioniert liegt an:
https://gitlab.com/lilypond/lilypond/-/issues/4826 (https://gitlab.com/lilypond/lilypond/-/issues/4826)

Aber meistens kommt nach der RehearsalMark noch etwas Platz forderndes, mindestens ein Schlußtaktstrich, dann klappt es.

Gruß,
  Harm
Titel: Antw:markup funktion
Beitrag von: Manuela am Donnerstag, 9. Dezember 2021, 15:03
Danke Harm. Sobald ich noch eine Note nach dem RehearsalMark einfüge, klappt es, auch als scheme-function
Titel: Antw:markup funktion
Beitrag von: harm6 am Donnerstag, 9. Dezember 2021, 21:29
Zitatklappt [...] auch als scheme-function

Ja, aber nenn' es Code-Hygiene, die Funktion gibt music zurück, also music-function.

Natürlich gibt es eine scheme-Repräsentation von music ... aber das auszudiskutieren halte ich nicht für lohnenswert. ;)

Gruß,
  Harm
Titel: Antw:markup funktion
Beitrag von: Manuela am Freitag, 10. Dezember 2021, 11:40
Ok, danke für den Hinweis.