Autor Thema: left-align in scheme markup?  (Gelesen 2066 mal)

kilgore

  • Member
left-align in scheme markup?
« am: Donnerstag, 19. Mai 2011, 13:04 »
Liebe Lilys,

Es geht um custom dynamik.  Ich habe enige, die etwas lang sind (zB p, leggiero e dolce ).  Die werden automatisch unter der Note zentriert.  Ich kann mit einem override das verbessern, aber da es nur um manche, nicht alle, dynamik geht, würde ich das einfach gern in dem betroffenen custom dynamik eingeben.   #:left-align bringt kine Fehlermeldung, tut aber auch nichts!  Kennt jemand den richtigen Befehl dafür in Scheme?

besten Dank!
Kil

\version "2.12.3"


pptop = #(make-dynamic-script
            (markup #:left-align
                    #:dynamic "pp"
                    #:normal-text #:italic "<"
                    #:dynamic "p"
                    #:normal-text #:italic ">"
                    #:dynamic "pp"
                    #:normal-text #:italic "etc. . ."
                    ))


\relative c' {
  %\override DynamicText #'self-alignment-X = #LEFT
  c1 c1\pptop c1
}

harm6

  • Member
Re:left-align in scheme markup?
« Antwort #1 am: Freitag, 20. Mai 2011, 00:54 »
Hallo kil,

der Befehl #:left-align ist völlig in Ordnung!!
Aber laut http://lilypond.org/doc/v2.12/input/lsr/0e/lily-d7d3650a.ly funktioniert "expicit alignment" nur in Verbindung mit \override DynamicText #'X-offset = #0 oder \override DynamicText #'X-offset = ##ff (-> Solution 6).

Der Code müßte also so aussehen:
\version "2.12.3"

  pptop = #(make-dynamic-script
            (markup #:line(
                  #:left-align
                      #:dynamic "pp"
                      #:normal-text #:italic "<"
                      #:dynamic "p"
                      #:normal-text #:italic ">"
                      #:dynamic "pp"
                      #:normal-text #:italic "etc. . ."
                    )))
                   
\relative c' {
  \override DynamicText #'X-offset = ##f
  c1
  c1\pptop
  c1
}

Gruß,
  Harm

harm6

  • Member
Re: left-align in scheme markup?
« Antwort #2 am: Freitag, 24. Juni 2011, 01:15 »
Hallo kil,

angeregt durch einen Thread auf Old Nabble habe ich mich noch mal mit dem Thema befaßt und bin zu folgender Funktion gekommen:

\version "2.14.1"

#(define my-dynamic-alist '(
("pptop" . ("pp" "<"  "p" ">" "pp" "etc" "" ". . ." ""))
("ffdolcef" . ("ff" "dolce" "" ">" "" "" "" "" "f"))
("pleggierodolce" . ("p" ", leggiero" "" "e" "" "dolce" "" "" ""))
("dolcecantabile" . ("" "dolce" "" "e" "" "cantabile" "" "" "" ""))
("fcantabile" . ("f" ", ma cantabile" "" "" "" "" "" "" ""))
("pquasieco" . ("p" ", quasi" "" "eco" "" "" "" "" ""))
("ffsubito" . ("ff" "subito" "" "" "" "" "" "" ""))
))

myDynamic =
#(define-music-function (parser location listPos)(string?)
   (let* (
         (firstExpr (list-ref (assoc listPos my-dynamic-alist) 1))
         (MARKUP (markup ;#:whiteout
           #:line (
               #:dynamic firstExpr
               #:hspace -0.3
               #:normal-text #:italic (list-ref (assoc listPos my-dynamic-alist) 2)
               #:dynamic       (list-ref (assoc listPos my-dynamic-alist) 3)
               #:normal-text #:italic (list-ref (assoc listPos my-dynamic-alist) 4)
               #:dynamic       (list-ref (assoc listPos my-dynamic-alist) 5)
               #:normal-text #:italic (list-ref (assoc listPos my-dynamic-alist) 6)
               #:dynamic       (list-ref (assoc listPos my-dynamic-alist) 7)
               #:normal-text #:italic (list-ref (assoc listPos my-dynamic-alist) 8)
               #:dynamic       (list-ref (assoc listPos my-dynamic-alist) 9)
               )))
         )
     (make-music
       'AbsoluteDynamicEvent
       'tweaks
         ;; calculate centering for firstExpr
         (list (cons 'X-offset (+ -0.5 (* -0.5 (string-length firstExpr)))))
       'text
         MARKUP
      )))
 
%------------------------------ Test -------------------------------------------
     
\relative c''     
{
a4 bes-\myDynamic "pptop" a a |
a bes a a |
a a a a |\break
a bes-\myDynamic "ffdolcef" a a |
a a a a |                 
a a a a |\break           
a bes-\myDynamic "pleggierodolce" a a |
a a a a |                 
a a a a |\break           
a bes-\myDynamic "dolcecantabile" a a |
a a a a|                   
a a a a |\break           
a bes-\myDynamic "fcantabile" a a |
a a a a |                 
a a a a |\break                 
a bes-\myDynamic "pquasieco" a a |
a a a a |
a a a a |
}

"Bedienungsanleitung":
 Zunächst wird die  my-dynamic-alist nach folgendem Aufbau erstellt:
( Name . (Dynamik1 Text2 Dynamik3 Text4 Dynamik5 Text6 Dynamik7 Text8 Dynamik9))
Wenn der erste Ausdruck kein dynamisches Zeichen ist sollte "" stehen bleiben. (An anderen Stellen entsprechend)
Man kann also ziemlich viel reinschreiben! ;)

 Die sich anschließende Funktion zentriert das erste Zeichen (falls es sich um Dynamik handelt) unter der Note. Falls in der alist "" zuerst und dann normaler Text kommt erfolgt einfaches left-align. Das Minus-Zeichen vor Aufruf der Funktion ist unbedingt erforderlich, sonst wird er der Aufruf der folgenden Note zugeordnet.

Custom-Dynamic einfach in einer Liste abzulegen finde eigentlich ich noch praktischer als die Definition via make-dynamic-script. Ideal wäre natürlich eine Einstellmöglichkeit wahlweise für left-, center- oder right-align aber das habe ich noch nicht hinbekommen.

Gruß,
  Harm

kilgore

  • Member
Re: left-align in scheme markup?
« Antwort #3 am: Freitag, 24. Juni 2011, 10:10 »
Hey harm!

Wow, dass ist schon ziemlich cool!  Eine Liste zu erstellen finde ich auch recht praktisch.  Der zweite Teil davon ( myDynamic = ) finde ich etwas verwirrend, aber copy/paste war nie zu banal für mich ;)

U Rock!

harm6

  • Member
Re: left-align in scheme markup?
« Antwort #4 am: Montag, 27. Juni 2011, 23:59 »
Hallo kil,

ich habe noch etwas besseres gefunden und dafür einen neuen Thread angefangen. ->building and aligning custom-dynamics

Gruß,
  Harm