Notationsspezifisch > Noten für Gitarre

Anfängerfragen

<< < (3/3)

harm6:

--- Zitat ---Wenn mit Pseudocode meine Versuche gemeint sind, die sind schon gelöscht.

--- Ende Zitat ---

Eigentlich hatte ich eher an die Syntax, sowie das gewünschte Ergebnis gedacht, d.h. z.B.:


--- Zitat ---c''1-\my-function #my-arg-1 ...

soll folgendes Ergebnis zeitigen:
...

--- Ende Zitat ---


Wobei besonders interessant wäre, wie `my-function' angewendet wird (in meinem Beispiel als post-event) und wieviele Argumente `my-function' haben soll, sowie der Typ dieser Argumente.
Und natürlich welches Endergebnis.

Nicht funktioniert habende Versuche sind manchmal auch ok, da wir mitunter ablesen könnenm wohin die Reise denn gehen soll.


Du hast jetzt ein paar Versuche gepostet ein markup-command zu definieren.
Dieses markup-command ist gedacht als Zusammenfassung und damit Kurzschreibweise von anderen markup-commands.
Generell ziehe ich dafür eine scheme-function vor (siehe unten), aber es geht schon.

Dazu
(1) Jedes Argument braucht eine Typ-Abfrage? (fehlt teilweise, bzw manchmal ist eine Abfrage da, aber kein Argument)
(2) \translate braucht ein pair als Argument.
Entweder Du gibst ein pair (siehe scheme-function für ein Beispiel), oder Du konstruierst eins: (cons val-1 val-2)

Beispiel:


--- Code: ---\version "2.18.2"

#(define-markup-command (Aus layout props x y arg) (number? number? markup?)
  "whatever doc-string"
  (interpret-markup layout props
    #{
      \markup \with-color #blue \translate  #(cons x y) $arg
    #}))
   
   
{
  c''1^\markup \Aus #-3 #4 "A"
  d''
}

--- Ende Code ---

Hier die scheme-function

--- Code: ---\version "2.18.2"

foo =
#(define-scheme-function (parser location mrkp pair)(markup? pair?)
#{
  \markup { \with-color #blue \translate $pair $mrkp }
#})

fooI = \foo #"A" #'(0 . 4)
fooII = \foo #"R" #'(-3 . 4)
%% etc

{
  c''1^\fooII
  d''
}

--- Ende Code ---

Für das markup-command wäre es natürlich ebenfalls möglich standards vorzudefinieren.

HTH,
  Harm

P.S.
Innerhalb von [ c o d e ] kannst Du hier im Forum keine Farben setzen. Bitte kontolliere Deine posts auf solche Mißgeschicke, es vernebelt ansonsten was Du sagen willst und verringert Deine Chancen eine Antwort zu bekommen.
Man kann seine posts auch nachträglich editieren.
Falls Du Farben setzen willst dann in einfachem Text oder innerhalb [ q u o t e ].

Notensatzzweifel:
Sehr vielen Dank für deine Mühe. Ich muss es noch in Ruhe ausprobieren und verstehen.

Notensatzzweifel:
Okay, das ist ziemlich genial.

Ich will daraus eine eierlegende Wollmilchsau machen.


--- Code: ---\version "2.18.2"
foo =
#(define-scheme-function (parser location mrkp  color cons  number pair)(markup? color? cons? number? pair?  )
#{
  \markup {  \with-color  $color \magnify number\override  cons  \translate $pair $mrkp }
#})

fooA = \foo #"A" #blue  #'(0 . 4) #'(font-name . "Wingdings3") #0.7

%% etc

{
  c''1^\fooA

}
--- Ende Code ---

text-color habe ich selbst hinbekommen. Magnify und text-font nicht.

harm6:
Das log gibt Hinweise wo Deine Funktion scheitert:

--- Zitat ---[...]
Unbound variable: cons?
[...]

--- Ende Zitat ---
cons? ist nicht definiert und somit natürlich auch keine Typabfrage.

Wenn ich eine Funktion codiere fange ich häufig mit dem "Gerippe" an, d.h. keine Argumente (deshalb auch keine Typ-Abfragen). Alles ist hard-coded aber funktionsfähig. Hier wäre das:

(1)

--- Code: ---\version "2.18.2"

fooStart =
#(define-scheme-function (parser location)()
#{
  \markup { 
    \with-color #blue
    \magnify #0.7
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    "A"
  }
#})

{
  c''1^\fooStart
}

--- Ende Code ---

parser und location sind obligatorische default-argumente. Erst in neueren devel-Versionen können sie weggelassen werden.

(2)
Dann setze ich nach und nach Variablen, sowie deren Typ-Abfragen. Im Aufruf dann natürlich auch.

Ich werde das mal Schritt für Schritt durchexerzieren. Hier zunächst das Text-Argument:


--- Code: ---fooStepI =
#(define-scheme-function (parser location mrkp)(markup?)
#{
  \markup { 
    \with-color #blue
    \magnify #0.7
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepI "A"
}
--- Ende Code ---

(3)
Nun die Farbe.
Die korrepondierende Reihenfolge von Argumenten, deren Typ und deren späterer Aufruf ist notwendig. Vertausche da nichts.


--- Code: ---fooStepII =
#(define-scheme-function (parser location mrkp clr)(markup? color?)
#{
  \markup { 
    \with-color $clr
    \magnify #0.7
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepII "A" #blue
}

--- Ende Code ---

(3)
Der Wert für \magnify


--- Code: ---fooStepIII =
#(define-scheme-function (parser location mrkp clr mag-nmbr)(markup? color? number?)
#{
  \markup { 
    \with-color $clr
    \magnify #mag-nmbr
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepIII "A" #blue #0.7
}

--- Ende Code ---

(4)
Der font-name.
Hier ist der zweite Wert (der cdr) eines pair zu setzen.
Das halte ich hier für sinnvoller als ein koplettes pair im Funktionsaufruf anzugeben.
Da gibt es syntaktisch verschiedene Möglichkeiten. Hier zwei davon, eine auskommentiert.


--- Code: ---fooStepIV =
#(define-scheme-function (parser location mrkp clr mag-nmbr font-name-string)(markup? color? number? string?)
#{
  \markup { 
    \with-color $clr
    \magnify #mag-nmbr
    \override #(cons 'font-name font-name-string)
    %% other syntax-possibility:
    %\override #`(font-name . ,font-name-string)
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepIV "A" #blue #0.7 #"Wingdings3"
}

--- Ende Code ---

(5)
Der Wert für \translate.
Auch ein pair. Hier ist es jedoch sinvoll das pair im Aufruf komplett anzugeben und somit in der Funktion auch als solches einzufordern.


--- Code: ---fooFinal =
#(define-scheme-function
  (parser location mrkp clr mag-nmbr font-name-string tr-val)
  (markup? color? number? string? pair?)
#{
  \markup { 
    \with-color $clr
    \magnify #mag-nmbr
    \override #(cons 'font-name font-name-string)
    %% other syntax-possibility:
    %\override #'(font-name . ,font-name-string)
    \translate #tr-val
    $mrkp
  }
#})

{
  c''1^\fooFinal "A" #blue #0.7 #"Wingdings3" #'(0 . 4)
}

--- Ende Code ---

Fertig!

Eine Schwierigkeit wird wahrscheinlich die Verwendung der Zeichen # und $ sein, was sie bedeuten, wo man welches setzen kann/muß bzw unter welchen Bedingungen man sie auch weglassen kann.
Das führt momentan aber zu weit ...

HTH,
  Harm

Notensatzzweifel:
Super. Vielen Dank. Ich muss es erst einmal verdauen. Aber es ist genial.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln