Hallo
musicmaker,
einige Dinge muss man vielleicht noch mal verdeutlichen, um Lily besser zu verstehen; bei anderen Sachen darf ich dich um etwas mehr Geduld und Experimentierfreude bitten.
(1) Lilypond bzw. die Eingabesyntax ist
keine Programmiersprache! Es ist ähnlich wie HTML oder (La)TeX eine Art Seiten
beschreibungssprache. Deine Gedanken sind grundsätzlich nicht verkehrt, aber das „einfach so“ oder „wie bei einer Programmierung“ funktioniert in Lily nur mittels
Scheme, ansonsten höchstens ansatzweise. TeX-Dokumente werden auch nicht „programmiert“, sondern „beschrieben“. Internetseiten ebenso.
(2) Es ist demzufolge nur verständlich, dass mangels Programmierspracheneigenschaft solche Konstrukte wie z.B. for- bzw. do-while-Schleifen oder if-then-Abfragen im Markup weder vorgesehen noch eingebaut sind. Arrays sind davon auch betroffen. Das Ziel ist ja gerade, die Eingabe möglichst einfach und menschlich verständlich zu halten. Ich finde das persönlich schon sehr gelungen.
(3) Bitte schau dir in Ruhe meinen Beitrag zur book-bookpart-Struktur an, vor allem die ersten Beispielzeilen, die bereits eindeutige Variablenbezeichner verwenden – das hat seinen guten Grund. Auch
ding-dong hilft dir unbeirrt damit weiter!
(4) Zum Ziel führt die strikte Trennung von Musik und Layout. Falls du den entsprechenden Abschnitt in der NR noch nicht gefunden haben solltest:
3.3.2 Different editions from one source. Es steht dir damit völlig frei, dutzende
\score-Blöcke,
\bookpart-Blöcke und sogar ganz andere
\book-Blöcke in einem zentralen Dokument zu definieren. Man sollte sich kurz darauf einlassen und versuchen, es zu verstehen, denn dann erscheint es ganz einfach. Für mich ist es eine sehr mächtige Option, aus einer einzigen „Steuerdatei“ eine Gesamtausgabe nebst zugehöriger Einzelausgaben oder Stimmen zu erstellen. Wenn dann mal eine Korrektur fällig ist, kann ich das in der betreffenden Datei mit der Musik ändern und lasse anschließend die „Oberdatei“ mit den Includes durchlaufen, um den kompletten Satz mit der Korrektur zu erhalten.
(5) Es ist derzeit leider nicht möglich, jeden beliebigen Code als Variable zu definieren (ich kann mir denken, was du meinst). Auch in Lily gibt es vordefinierte Variablen, die nicht ohne weiteres umdefiniert werden können.
\header,
\paper,
\score gehören z.B. dazu (okay – das sind eher Umgebungen, aber vielmehr geht es um darin befindliche Variablen wie
title,
line-width etc.). Seit 2.13.X ist es bspw. möglich, Änderungen durch die
\with-Blöcke als Variablen abzuspeichern; vielleicht wird das irgendwann auch auf andere Umgebungen anwendbar! Zumindest käme es deinen Erwartungen sehr entgegen, oder?
Du musst also erstmal mit dem arbeiten, was Lily anbietet. Die meisten Sachen sind über die Jahre wirklich einfach handhabbar geworden, aber ein „kann-man-nicht-einfach“ ist nicht uneingeschränkt machbar.
Viele Grüße, Robert