Wozu das Ganze?
Harm, du hattest
hier dankenswerterweise dargestellt, wie man ein Inhaltsverzeichnis baut, das die ersten Takte des Stücks zitiert. Und das verwende ich inzwischen in allen meinen Partituren.
Nun habe ich neben den Variablen, die die Noten enthalten, immer eine, die die Taktarten enthält und eine für die Tonartenvorzeichnung, damit ich das bei Bedarf einfach trennen und überschreiben kann. Und da fast alle meine Partituren eine sehr ähnliche Struktur haben und da ich den Variablen immer die gleichen Namen gebe, hab ich schnell gemerkt, dass ich tatsächlich, um eine neue Partitur zu erstellen, kaum mehr tun muss als eine vorhandene zu kopieren und den Namen des eingebundenen Files zu ändern. Aber es gab auch immer noch etwas anderes zu ändern: Die Tonartenvorzeichnung und Taktart in meinem Inhaltsverzeichnis. Ich habe das regelmäßig vergessen. Und so dachte ich, nimmst du statt händischer, ausdrücklicher Angaben, die du dir erstmal umständlich aus einem anderen File zusammensuchen musst, doch einfach die Variablen, die du eh schon pflegst!
Und genau das geht eben nicht, denn die sind zu lang - erstens enthält die Variable mit der Taktart oft für den letzten oder vorletzten Takt noch ein Taktwechsel, damit die letzte Note passt - und selbst wenn nicht, sie enthält auch den Doppelstrich für den Schluss und ist damit immer so lang wie der ganze Satz. Also müsste ich diese Variablen, um sie für das Inhaltsverzeichnis zu nutzen, immer nach dem ersten Takt abschneiden. (Auch die Variablen mit den Noten muss ich natürlich abschneiden - aber das geht problemlos per
\quoteDuring.)
Ich hoffe, das macht verständlich, warum ich dies brauche.
#(car (extract-named-music TIME 'TimeSignatureMusic))
Ja, genau sowas hatte ich gesucht! Erfüllt den Zweck und ist elegant - eben ureigenstes Lisp. Man muss halt erstmal drauf kommen...
Trotzdem zunächst noch eine Verständnisfrage, weil wir uns grade im anderen Thread mit Datentypen beschäftigen. Ich hätte es, wäre es mir eingefallen, mit
#(car TIME) versucht und anschließend mit der Fehlermeldung nichts anzufangen gewusst. Was genau machen die anderen Statements?
Danke.
Und leider gibts noch ein zweites Problem. Denn die Variable mit der Taktart kann natürlich noch einen Auftakt enthalten. Ich habe verschiedene Versuche gemacht, das auch noch zu extrahieren. Hier der Ansatz, der zumindest keine Fehlermeldungen erzeugt (ohne das eigentlich überflüssige
car würde er das). Aber leider erzeugt er auch keinen Auftakt:
\version "2.18.2"
MUSIC = \relative c' {b c d e f g a g a b c r }
TIME = { \time 3/4 \partial 4 s1*99}
\new Staff <<
\clef "violin"
#(car (extract-named-music TIME 'TimeSignatureMusic))
#(car (extract-named-music TWO-TIMEMASTER 'PartialSet))
\MUSIC
>>
Was tun?
--ingmar