markup funktion

Begonnen von erich, Montag, 6. Dezember 2021, 15:28

« vorheriges - nächstes »

erich

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

Manuela

#1
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
Danke für eure Hilfe
viele Grüße
-- Manuela

erich

Danke Manuela!

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

Gruß
Erich

Manuela

#3
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
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

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

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

Gruß,
  Harm

Manuela

Danke Harm. Sobald ich noch eine Note nach dem RehearsalMark einfüge, klappt es, auch als scheme-function
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

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

Manuela

Danke für eure Hilfe
viele Grüße
-- Manuela