Hallo Enternix,
Daher habe ich eine Scheme-Funktion geschrieben, denke aber, dass das bestimmt irgendwie einfacher geht
Die Setzung von Bögen ist eine äußerst komplizierte Angelegenheit, insofern wird es wohl nicht einfacher gehen.
Zu Deiner Funktion:
Die Berechnung der Original-Länge ist nicht ganz korrekt: Du hättest die Differenz und nicht die Summe von slur-end und slur-start benutzen sollen. Dafür gibts dann auch eine vorgefertigte Definition: interval-length.
Der Unterschied ist allerdings so gering, daß er für mich auch bei höchster Vergrößerung nicht wahrnehmbar ist. Ich dachte, ich weise Dich doch mal drauf hin, da es bei anderen Projekten durchaus wichtig werden kann.
Ansonsten macht Deine Funktion genau was sie soll, mehr kann man von einer guten Funktion nicht erwarten!
Anders geht es AFAIK nur mit dem Weg über die 'control-points. Das sehr unhandliche Verfahren mit \override Slur #'control-points = ... wird durch die von ewipond erwähnten Funktionen erheblich erleichtert. Man braucht allerdings eine Liste mit acht Zahlen, dafür sind diese Funktionen dann auch erweiterbar um mit dem Zeilensprung umgehen zu können.
Im angehängten file findest Du zunächst meine Fassung Deiner Funktion. (Die noch nicht erwähnten Änderungen dort sind eher Stilfragen.)
Dann noch mal die Funktionen/Definitionen wie bei ewipond (Wir scheinen eine unterschiedliche Quelle zu benutzen, denn die Benennungen sind leicht unterschiedlich. Zusätzlich ist dieser Abschnitt des files um eine Funktion erweitert um PhrasingSlurs zu bearbeiten. Der Test-Teil ist recht groß, denn ich hab' da ein bißchen rumgespielt

)
Am Schluß noch eine Funktion (extendSlurII), die diese Definitionen benutzt, sich aber nur um die rechts/links-Ausdehnung kümmert. Dadurch gelingt es die benötigten Variablen auf ein Zahlenpaar zu reduzieren. extendSlurII funktioniert nicht beim Zeilensprung ist aber vielleicht eine Alternative zu Deinem extendSlur.
Gruß,
Harm