Autor Thema: Einklammern von Punkten (dots) in Akkorddiagrammen  (Gelesen 6114 mal)

trulli

  • Gast
Einklammern von Punkten (dots) in Akkorddiagrammen
« am: Mittwoch, 8. August 2012, 17:18 »
Hallo Freunde,

ich möchte in dem Diagramm des Akkordes einen Griffpunkt einklammern. Das ist eine übliche Praxis, wenn ein Finger später hinzugenommen wird und man kein neues Griffbild schreiben will.

Habt ihr dazu eine Idee? Bisher habe ich an diesen beiden Stellen gesucht, aber nichts passendes gefunden:
http://lilypond.org/doc/v2.14/Documentation/internals/fret_002ddiagram_002dinterface
http://lilypond.org/doc/v2.14/Documentation/internals/fretboard

Danke und Grüße

\version "2.14.1"

\relative c {
 
d'^\markup {
      \override #'(size . 2.1) {
        \override #'(fret-diagram-details . (
                     (orientation . landscape)
                     (number-type . roman-upper)
                     (dot-label-font-mag . 0.9)
                     (finger-code . none)
                     (fret-label-vertical-offset . -0.5)
                     (fret-count  . 3)
                     (dot-position . 0.5)
                     (xo-font-magnification . 0.3)
                     (xo-padding . 0.3))) {
          \fret-diagram-verbose #'((open 1)
                                   (open 2)
                                   (place-fret 3 4 1)
                                   (place-fret 4 5 2)
                                   (place-fret 6 4 3))
        }
      }
    }
   
   
  }

Be-3

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #1 am: Mittwoch, 8. August 2012, 18:53 »
Hallo Trulli,

da es sich bei den Fretboards um ganz "gewöhnliches" Markup handelt, hätte ich als "Notlösung" den \combine-Befehl benutzt, um mittels \translate zwei ordinäre Text-Klammern "( )" dorthin zu schieben, wo ich sie haben möchte.

Das ist zwar alles andere als elegant (vor allem muß man sich an die Plazierung mühnsam hinarbeiten), aber immerhin ist diese Lösung besser als nichts... Immerhin ein erster Ansatz.

Viele Grüße
Torsten

\version "2.14.1"

\relative c {
 
d'^\markup {
      \combine \translate #'(0.82 . -1.5) "( )"
      \combine \translate #'(-1.27 . -5.7) "( )"
      \override #'(size . 2.1) {
        \override #'(fret-diagram-details . (
                     (orientation . landscape)
                     (number-type . roman-upper)
                     (dot-label-font-mag . 0.9)
                     (finger-code . none)
                     (fret-label-vertical-offset . -0.5)
                     (fret-count  . 3)
                     (dot-position . 0.5)
                     (xo-font-magnification . 0.3)
                     (xo-padding . 0.3))) {
          \fret-diagram-verbose #'((open 1)
                                   (open 2)
                                   (place-fret 3 4 1)
                                   (place-fret 4 5 2)
                                   (place-fret 6 4 3))
        }
      }
    }
   
   
  }

trulli

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #2 am: Mittwoch, 8. August 2012, 19:23 »
Hallo Torsten,

danke für die Antwort. Ja, ich hatte an \combine auch schon gedacht, aber keine Lust auf die Fummelei mit der richtigen Position gehabt.  ::)

Danke, dass du es gemacht hast. Wenn es keine andere Lösung gibt, werde ich es so darstellen. Ich bin aber sicher, dass es noch weitere Lösungen gibt - meistens kommt man nur nicht gleich drauf... Mir ist noch eingefallen, dass man den Punkt auch durchsichtig mit durchgezogenem Rand darstellen könnte (#'(fret-diagram-details dot-color) = #'white). Wäre aber auch nur eine Notlösung.

Gruß

harm6

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #3 am: Mittwoch, 8. August 2012, 22:39 »
Hallo,

ich habe leider auch keine einfache Lösung gefunden.

So hab' ich mir dann eben mal /scm/fret-diagrams.scm mal etwas genauer angeschaut. Um das Einklammern möglich zu machen sind gar nicht mal viele Änderungen in (define (make-fret-diagram ...)) nötig. Allerdings handelt es sich hierbei um die fast 600 Zeilen lange Hauptdefinition, die auch noch von anderen Definitionen dort abhängig ist.

Ganz davon abgesehen, daß es nie eine gute Idee ist in den Installationsdateien rumzufuschen, macht es die Länge der Definitionen völlig unpraktikabel sie einfach in das zu bearbeitende file zu setzen.

Stattdessen habe ich das ganze /scm/fret-diagrams.scm in ein .ly file (mit den gewünschten Änderungen) konvertiert.
Also wie üblich: irgendwo abspeichern und via \include einbinden.
fret-diagrams.ly im Anhang

Ob es immer funktionieren wird weiß ich noch nicht. D.h. das Einklammern wird immer klappen, aber vielleicht gibt es Verschiebungen in X-Achse. Falls Du so was bemerkst, dann melde Dich.

Die Syntax bleibt (mit einer Ausnahme) völlig gleich: als letztes Argument von place-fret kann parenthesize hinzugefügt werden, um den dot einzuklammern.

Zitat
Mir ist noch eingefallen, dass man den Punkt auch durchsichtig mit durchgezogenem Rand darstellen könnte (#'(fret-diagram-details dot-color) = #'white).

Ich meine, daß dieser Befehl alle Punkte verändert. Falls Du nur einen verändert haben willst solltest Du inverted als letztes Argument von place-fret schreiben.


Es wäre ein schöne Sache, wenn die Möglichkeit zum Einklammern einzelner Elemente eines Griffdiagrams im source-code beinhaltet wäre. Was hälst Du davon eine feature-request einzureichen? bug-lilypond ist die richtige Adresse dafür.
-> http://lilypond.org/website/bug-reports.html (Stör Dich nicht daran, daß dort nur von bugs die Rede ist, für requests gilt dasselbe)

Anwendungsbeispiel:\version "2.14.1"

\include "fret-diagrams.ly"

\relative c {
 
d'^\markup {
      \override #'(size . 2.1) {
        \override #'(fret-diagram-details . (
                     (orientation . landscape)
                     (number-type . roman-upper)
                     (dot-label-font-mag . 0.9)
                     (finger-code . none)
                     (fret-label-vertical-offset . -0.5)
                     (fret-count  . 3)
                     (dot-position . 0.5)
                     (xo-font-magnification . 0.3)
                     (xo-padding . 0.3)))
                     {
          \fret-diagram-verbose #'((open 1)
                                   (open 2)
                                   (place-fret 3 4 1)
                                   (place-fret 4 5 2 parenthesize)
                                   (place-fret 6 4 3 inverted))
        }
      }
    }
}

fd = \markup {
          \fret-diagram-verbose #'((place-fret 1 1 1)
                                   (place-fret 2 3 4)
                                   (place-fret 3 2 2)
                                   (open 4)
                                   (place-fret 4 3 3 parenthesize)
                                   (mute 5)
                                   (mute 6))
}
 
\relative c' {
        <>^\fd
        <<{ <a' d f>1 } \\ { d,2 f }>>
}


HTH,
  Harm

trulli

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #4 am: Mittwoch, 8. August 2012, 23:37 »
Klasse harm,

vielen Dank! Funktioniert in meinem Kontext bestens! Ich musste nur die Dot-Position etwas angleichen.

Ich habe mal das Problem für den Bug-Report verschickt. Wäre natürlich am einfachsten, wenn es einfach wie inverted als Argument eingefügt werden könnte.

Vielen Dank an alle und Grüße von Trulli

harm6

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #5 am: Samstag, 21. Juni 2014, 12:40 »
Hallo,

ich habe mal einen patch + Doku dazu geschrieben.
Sobald 2.19.9 raus ist, kann man es benutzen.

Das gibt ein Bild wie im Anhang (leider schlechte Auflösung, war zu faul es neu zu machen ;) )

Gruß,
  Harm


trulli

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #6 am: Montag, 23. Juni 2014, 17:28 »
Hallo harm,

kann man dann mit "parenthesize" die Klammerung angeben?

Gruß

harm6

  • Gast
Re: Einklammern von Punkten (dots) in Akkorddiagrammen
« Antwort #7 am: Montag, 23. Juni 2014, 22:30 »
Hallo trulli,

ein code-example mit Bild hier

Gruß,
  Harm