Hallo Trulli,
als kleine Hilfe zum Verständnis der Code-Änderungen und vor allem des Weges dorthin ein paar Hinweise zu meinem Lösungsweg:
Schritt 1: Welche Funktion zeichnet die Barré-Linie und was bestimmt ihre Dicke?make-straight-barre-stencil ist für den "straight-Barré" zuständig und hat neben Bundnummer, Start- und Endsaitennummer als letzten Parameter
half-thickness, der die Dicke der Linie bestimmt:
(define (make-straight-barre-stencil
fret-coordinate
start-string-coordinate
end-string-coordinate
half-thickness)
Ziel: Diese Definition unverändert lassen, um das Standardverhalten nicht zu beeinflussen.
Schritt 2: Welcher Wert wird beim Aufruf dieser Funktion als half-thickness übergeben?Interessant für uns ist der Aufruf von
make-straight-barre-stencil für den Fall von
barre-type = 'straight:
Dieser Aufruf ist in der Definition von
draw-barre enthalten, und wir sehen, daß als letzter Parameter
scale-dot-radius übergeben wird. Daher meine Behauptung, die Barré-Dicke sei fest mit dem Punktradius verknüpft.
Lösung: wir übergeben stattdessen eine neue, eigene Variable
scale-barre-thickness:
(barre-stencil
(cond
((eq? barre-type 'straight)
(make-straight-barre-stencil
barre-fret-coordinate
barre-start-string-coordinate
barre-end-string-coordinate
; scale-dot-radius)) ; replaced
scale-barre-thickness)) ; added barre-thickness-functionality
Schritt 3: Welche neuen Variable brauchen wir?Nun wissen wir, daß die der Funktion
make-straight-barre-stencil übergebene neue Variable
scale-barre-thickness definieren müssen und daß wir für den
\overrride "von außen" gerne eine neue Variable
barre-thickness hätten, die bei Bedarf analog zu
dot-radius gesetzt weden kann.
Wenn
barre-thickness nicht explizit überschrieben wird, soll sie als Default den Wert von
dot-radius erhalten. Dies kann enteder der explizit übergebene Wert von
dot-radius sein oder wiederum dessen Defaultwert.
Als letztes müssen wir noch dafür sorgen, daß
scale-barre-thickness eine Wertzuweisung entsprechend des ursprünglichen
scale-dot-radius erhält.
Wir haben es also insgesamt mit drei neuen Variablen zu tun:
| Variable | neue Variable | |
Bedeutung | Punkt | Barré | Erläuterung |
Punktradius bzw. Barrédicke | dot-radius | barre-thickness | kann mit \override in den fret-diagram-details überschrieben werden |
Defaultwert | default-dot-radius | default-barre-thickness | Standardverhalten |
intern | scale-dot-radius | scale-barre-thickness | Übergabewert an die make-straight-barre-stencil-Funktion |
barre-thicknessZum Vergleich oben die "Vorbild"-Definition von
dot-radius (völlig analog):
(dot-radius
(assoc-get
'dot-radius details default-dot-radius)) ; needed for draw-dots
; and draw-barre
[...]
(barre-thickness ; added barre-thickness-functionality
(assoc-get ; added barre-thickness-functionality
'barre-thickness details default-barre-thickness)) ; needed for straight draw-barre
default-barre-thicknessAchtung:
default-barre-thickness darf erst
nach der Definiton von dot-radius stehen, weil dieser Wert benötigt wird!
(default-barre-thickness
(assoc-get 'default-barre-thickness details dot-radius)) ; added barre-thickness-functionality
Als Defaultwert von
default-barre-thickness übergeben wir also den nun schon bekannten Wert von
dot-radius - das bedeutet, den eventuell mit
\override überschriebenen Wert von
dot-radius oder eben dessen Defaultwert.
Damit ist sichergestellt, daß sich alles absolut standardkonform verhält, wenn
barre-thickness nicht explizit gesetzt wird.
scale-barre-thicknessAls letzte Variable schließlich muß
scale-barre-thickness noch analog zu
scale-dot-radius gesetzt werden, dann steht unserem alternativen Aufruf von
make-straight-barre-stencil nichts mehr im Wege:
(scale-dot-radius (* size dot-radius))
(scale-barre-thickness (* size barre-thickness)) ; added barre-thickness-functionality
Voilà !

Viele Grüße
Torsten