Autor Thema: Bindebogen und Staccatopunkte  (Gelesen 2504 mal)

juppes

  • Member
Bindebogen und Staccatopunkte
« am: Mittwoch, 29. Juni 2016, 18:49 »
Noch längerer Suche in der Doku und im Netz bin ich leider bei folgender Sache nicht fündig geworden, aber vielleicht kann mir ja hier jemand weiterhelfen:

In Nachahmung einer Praxis des 18. Jhs. möchte ich eine Abkürzung schreiben können für wiederholte Noten gleicher Tonhöhe bei Streichern. Man schreibt zum Beispiel eine halbe Note. Über der halben Note stehen acht Punkte (für Sechzehnet) und darüber ein Bindebogen. Wie die Punkte gehen, weiß ich, aber wie bekomme ich auch noch den Bindebogen? Läßt sich der auch als Markup schreiben wie die Punkte? Oder muß man einen anderen Weg nehmen?

Danke für Eure Anregungenp

fugenkomponist

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #1 am: Mittwoch, 29. Juni 2016, 19:51 »
\version "2.19.44"

bogenvib = -\tweak stencil
#(lambda (grob)
   (grob-interpret-markup grob
     (if (eq? (ly:grob-property grob 'direction) UP)
         #{
           \markup \overtie \line {
             \musicglyph #"scripts.staccato"
             \musicglyph #"scripts.staccato"
             \musicglyph #"scripts.staccato"
             \musicglyph #"scripts.staccato"
           }
         #}
         #{
           \markup \undertie \line {
             \musicglyph #"scripts.staccato"
             \musicglyph #"scripts.staccato"
             \musicglyph #"scripts.staccato"
             \musicglyph #"scripts.staccato"
           }
         #})))
-\staccato

\relative {
  c'8-.( c-. c-. c-.)
  c2:8\bogenvib
  f:\bogenvib
  g:\bogenvib
  c:\bogenvib
}
Man kann hier noch im Markup ein bisschen an den Abständen schrauben (Punkt zu nächstem Punkt per \concat und \hspace statt \line sowie Punkte zu Bogen vermutlich mit nem Override), aber ist das schonmal grundsätzlich was in die richtige Richtung?

Edit: einfachere Version mit gleichem Ergebnis siehe unten.
« Letzte Änderung: Mittwoch, 29. Juni 2016, 21:56 von fugenkomponist »

juppes

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #2 am: Mittwoch, 29. Juni 2016, 20:46 »
Ganz herzlichen Dank. Ich arbeite allerdings noch nicht mit der neuesten Lilypond-Version, sondern mit 2.18.2, und da gibt es Fehlermeldungen. Vielleicht liegt das aber an einer Syntxänderung, denn das gibt es ja zwischen den Versionen immer wieder. Im Protokoll bleibt es hier hängen:

Zitat
Fehler: Ungültige Fluchtsequenz: »\undertie«
           \markup
                   \undertie \line {

Das sieht danach aus, daß meine Version den undertie-Befehl möglicherweise nicht kennt, oder?

fugenkomponist

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #3 am: Mittwoch, 29. Juni 2016, 21:17 »
Richtig, \tie, \overtie und \undertie gibts erst in Version 2.19, das war mir vorher nicht aufgefallen. Man findet aber eine Version dieser Befehle für 2.18.2 in diesem Forum, wenn ich das recht erinnere (harm?)

Jedenfalls ist mir grad aufgefallen, dass man die Unterscheidung mit \overtie und \undertie nicht braucht, sondern einfach \tie verwenden kann, dadurch wird das ganze übersichtlicher:
\version "2.19.44"

bogenvib = -\tweak stencil
#(lambda (grob)
   (grob-interpret-markup grob
     #{
       \markup \tie \line {
         \musicglyph #"scripts.staccato"
         \musicglyph #"scripts.staccato"
         \musicglyph #"scripts.staccato"
         \musicglyph #"scripts.staccato"
       }
     #}))
-\staccato

\relative {
  c'8-.( c-. c-. c-.)
  c2:8\bogenvib
  f:\bogenvib
  g:\bogenvib
  c:\bogenvib
}

harm6

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #4 am: Mittwoch, 29. Juni 2016, 23:12 »
Hallo,

Jan Nieuwenhuizen hatte die Idee und den initialen code für \undertie geschrieben.
https://sourceforge.net/p/testlilyissues/issues/3088/?page=1
Diesen code kann man für 2.18. verwenden.
Ich hatte undertie damals für persönlichen Gebrauch verändert zu folgendem und overtie hinzugefügt (funktioniert natürlich nur mit Jan's Code):

#(define-markup-command (undertie layout props arg)
  (markup?)
#:category font
#:properties ((thickness 1)
              (offset 2)
              (direction DOWN)
              (adjust-length 0)
              (adjust-x-pos 0))
"
@cindex undertie-ing text

Undertie @var{arg}. Looks at @code{thickness} to determine line
thickness, and @code{offset} to determine line y-offset.

@lilypond[verbatim,quote]
\\markup \\line {
\\undertie \"undertied\"
\\override #'(offset . 5)
\\override #'(thickness . 1)
\\undertie \"undertied\"
\\override #'(offset . 1)
\\override #'(thickness . 5)
\\undertie \"undertied\"
}
@end lilypond"
  (let* ((line-thickness (ly:output-def-lookup layout 'line-thickness))
         (thick (* thickness line-thickness))
         (markup (interpret-markup layout props arg))
         (x1 (car (ly:stencil-extent markup X)))
         (x2 (cdr (ly:stencil-extent markup X)))
         (y2 (cdr (ly:stencil-extent markup Y)))
         (w (- x2 x1 adjust-length (* 2 line-thickness)))
         (y (if (positive? direction)
                (+ line-thickness offset -2 y2)
                (* line-thickness (- offset))))
         (tie (ly:stencil-translate
                (make-tie-stencil w thick direction)
                (cons (+ line-thickness adjust-x-pos) y))))
  (ly:stencil-add markup tie)))
 
#(define-markup-command (overtie layout props arg)
  (markup?)
  #:category graphic
#:properties ((thickness 1)
              (offset 2)
              (direction DOWN)
              (adjust-length 0)
              (adjust-x-pos 0))
"
@cindex overtie-ing text

Overtie @var{arg}.

@lilypond[verbatim,quote]
\\markup \\line {
\\overtie \"overtied\"
\\override #'(offset . 15)
\\override #'(thickness . 2)
\\overtie \"overtied\"
\\override #'(thickness . 5)
\\overtie \"overtied\"
}
@end lilypond"

  (let ((new-props (prepend-alist-chain 'direction UP props)))

  (interpret-markup layout
                    new-props
                    (make-undertie-markup arg))))

Meine finale Implementierung in 2.19.33 erfolgte allerdings mit weitreichenden Änderungen.
Insoweit sind beide codes nicht kompatibel.
Ich rate dringend zum upgrade.

Zitat
Jedenfalls ist mir grad aufgefallen, dass man die Unterscheidung mit \overtie und \undertie nicht braucht, sondern einfach \tie verwenden kann, dadurch wird das ganze übersichtlicher

Genau das war der Grund over/undertie mit hart-kodierter Richtung als Abkömmlinge des allgemeinen tie-markup-command zu programmieren, welches sich die Richtung aus der "Umgebung" holt.

Hier noch eine automatisierte Funktion für dots-plus-bow als Script:

\version "2.19.44"

%% after:
%% http://lsr.di.unimi.it/LSR/Item?id=772

tongue =
#(define-music-function (parser location dots) (integer?)
  #{
    \tweak stencil
      #(lambda (grob)
        (grob-interpret-markup grob
        #{
          \markup
            \override #'(offset . 5)
            \tie
            \stencil
            #(let ((stil (ly:script-interface::print grob)))
               (let loop ((count (1- dots)) (new-stil stil))
                 (if (> count 0)
                     (loop
                       (1- count)
                       (ly:stencil-combine-at-edge new-stil X RIGHT stil 0.2))
                     (ly:stencil-aligned-to new-stil X CENTER))))
        #}))
     \staccato
  #})

\relative c' {
  c2_\tongue #8
  c2^\tongue #8
}


HTH,
  Harm

juppes

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #5 am: Donnerstag, 30. Juni 2016, 10:15 »
Ich danke Euch für die ausführlichen Infos. Der beste Weg scheint in der Tat zu sein, daß ich mal 2.19.44 installiere und sehe, wie es dann geht. Da ich mit Frescobaldi arbeite, kann ich ja auch zwischen Versionen hin- und herschalten, falls es mal Probleme geben sollte.

juppes

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #6 am: Donnerstag, 30. Juni 2016, 16:00 »
Habe nun mal 2.19.44 installiert, aber leider verträgt die sich offenbar nicht mit Frescobaldi. Beim Kompilieren von .ly-Dateien gibt es immer eine fette Fehlermeldung, die irgendwas mit der PDF-Erzeugung und nichts mit dem Code zu tun hat:

Zitat
Warnung: »(gs -q -dSAFER -dDEVICEWIDTHPOINTS=595.28 -dDEVICEHEIGHTPOINTS=841.89 -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH -r1200 -sDEVICE=pdfwrite -sOutputFile=HaydnArienVly.pdf -c.setpdfwrite -f/tmp/lilypond-TOTbyf)« gescheitert (256)


Kann hier jemand etwas dazu sagen?

Auf der Kommandozeile hingegen funktioniert die Sache, und da sehe ich, daß es das ist, was ich suche. Man müßte es in der Tat noch ein wenig verfeinern, aber das kriege ich hin.
Ich werde allerdings wegen Frescobaldi dann wohl noch auf die nächste stabile Version warten, denn diese Notationsweise braucht man nicht sooo oft, und es gibt ja auch moderne Schreibweisen dafür (die zwar ein wenig mehr Platz beanspruchen, aber auch ihren Zweck erfüllen), die ich auch benutzen kann. Bin nicht so ein Nutzer wie ein Gast namens "Notenzweifler" oder so ähnlich, dessen Post ich vor kurzem gelesen habe wegen eines Pausenproblems, das Lilypond nicht automatisch regelt. Ich kann nur sagen: Lilypond produziert die schönsten Noten, und die paar Probleme, die es hat, lassen sich meist lösen - irgendwie. Außerdem kann man sich viele Dinge basteln, wenn man Zeit und Lust hast, die mit anderen Programmen vermutlich nicht gingen.

Ich bin lange Jahre ein begeisterter Handschreiber gewesen und habe mich lange dagegen gesträubt, Noten am Rechner zu schreiben. Ich habe eine schöne Handschrift (das haben meine Kollegen immer gesagt, nicht ich), und am Computer wollte ich keinen Abstieg erleben müssen. Das habe ich nun auch nicht mit Lilypond, und ich bin froh, daß es existiert und finde, daß es ein wunderbares Werkzeug ist und daß man seine Macher nur beglückwünschen und ermutigen kann. Und der Support läßt auch nicht zu wünschen übrig - was will man mehr...

fugenkomponist

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #7 am: Donnerstag, 30. Juni 2016, 21:30 »
Hm, das klingt so, als gäbs da Probleme von wegen „LilyPonds mitgebrachtes gs vs. das gs auf dem System“ und Frescobaldi bringt da was durcheinander oder so. Wundert mich, dass es mit 2.18 nicht auftritt. Wo hast du denn die beiden Versionen installiert?

juppes

  • Member
Re: Bindebogen und Staccatopunkte
« Antwort #8 am: Freitag, 1. Juli 2016, 15:54 »
Die Lilyponds sind beide in meinem Benutzerordner. Den lilypond-Orcner, der ja immer angelegt wird, wenn man das Installationsskript ausführt, habe ich für 2.18.2 umbenannt in lilypond_18.2. Und Frescobaldi habe ich in den Einstellungen mitgeteilt, wo die beiden lilyponds liegen. ABer die Probleme mit der PDF-Erzeugung treten eben nur bei 2.19 auf.