Autor Thema: Elegantere Struktur und Flexibilität  (Gelesen 1371 mal)

infranator

  • Member
Elegantere Struktur und Flexibilität
« am: Donnerstag, 10. April 2014, 12:37 »
Hallo Leute,

wenn ich an Stücken mit vielen Stimmen arbeite, will ich nicht immer die komplette Partitur kompilieren müssen, wenn ich länger an einzelnen Formteilen arbeite. Darum benutze ich in dem Fall folgende Strukturierung:

\version "2.19.0"

%%%%%%%% leer.ly %%%%%%%%%
MusikA = { }
MusikB = { }


%%%%%%%% TeilA.ly %%%%%%%%%

%%{
MusikA = {
  c'4 d' e' f'
  g' a' b' c''
}
%}

%%%%%%%% TeilB.ly %%%%%%%%%

%%{

MusikB = {
  d''4 e'' f'' g''
  a'' b'' c''' d'''
}
%}

%%%%%%%% Partitur.ly %%%%%%%%%%

% \include "leer.ly"
% \include "TeilA.ly"
% \include "TeilB.ly"

\new Staff {
  \MusikA
  \MusikB
}

Um ein kompilierbares Minimalbeispiel posten zu können, habe ich das, was eigentlich in vier Dateien stehen würde zusammengefasst und nur eine Stimme definiert (normalerweise stehen in jeder TeilX.ly Datei alle Instrumente)
Es funktioniert so weit ganz gut so. Es stört mich allerdings, dass ich am Anfang jede Stimme leer definieren muss (leer.ly) um in der Partitur Formteile auskommentieren zu können.
Da gibt es doch bestimmt einen eleganteren weg? Ein paar Sachen habe ich schon probiert, bin aber jedes Mal bereits am Anfang gescheitert:

Eine Scheme-Funktion, die alle Variablen, die in einer Liste stehen leer definiert.
Eine Funktion, die überprüft, ob eine Variable existiert, oder nicht. (geht nicht weil eine unbound-variable immer Syntax error erzeugt)
Eine Funktion, die überprüft, ob eine Datei über \include eingebunden ist, oder nicht.

Vielleicht hat jemand eine Idee, wie man das Problem angehen könnte oder kann mir zumindest einen Stoß in die richtige Richtung geben?
Viele Grüße,
infranator

harm6

  • Member
Re: Elegantere Struktur und Flexibilität
« Antwort #1 am: Sonntag, 13. April 2014, 00:12 »
Hallo,

das einzige was mir dazu einfällt:

xy = \relative c' {
c d e f
}

#(define def
 (if (defined? 'def) def #{ #}))
     
#(define xy
 (if (defined? 'xy) xy #{ #})) 
 
<<
  \new Staff \def
  \new Staff \xy
>>

Vielleicht geht mehr via define-macro, aber meine bisherigen Versuche waren nicht erfolgreich. :(


HTH (a bit),
  Harm