Autor Thema: Bedingte Verarbeitung/"Präprozessor"?  (Gelesen 2311 mal)

Aardjon

  • Member
Bedingte Verarbeitung/"Präprozessor"?
« am: Montag, 20. Dezember 2010, 23:12 »
Hallo zusammen,

gibt es mit Lilypond eine Möglichkeit, bestimmte Befehle/Zeilen/Wasauchimmer einer .ly-Datei nur unter bestimmten Bedingungen zu verarbeiten? Also z.B. einen eingebauten "if"-Befehl oder eine Art Präprozessor.

Wofür brauche ich das? Beispiel: Ich transkripiere gerade ein älteres Musikstück, dieses ist mit einem Sopranschlüssel notiert. In der modernen Fassung möchte ich stattdessen einen Violinschlüssel setzen. Allerdings möchte ich gern die Möglichkeit haben, bei Bedarf auch die "Originalfassung" neu zu erzeugen ohne die .ly-Datei verändern zu müssen.
In der ly-Datei könnte ich mir das z.B. so (oder so ähnlich) vorstellen:

\relative c'
{
\time 3/8
\key d \major

### if variante_alt ###
\clef soprano
### end if ###

d'8 d d  d a
}


Beim Aufruf möchte ich dann Lilypond nur sagen, ob es die fraglichen Teile beachten soll oder nicht, z.B.
lilypond -Dvariante_alt test.ly
würde dann den Sopranschlüssel setzen, während der normale Aufruf den Violinschlüssel verwendet (alles zwischen "if" und "end if" also einfach ignoriert).

Ich hoffe ich konnte einigermaßen verständlich darlegen, was ich haben möchte ::)
Geht sowas mit Lilypond? Ich war bei meiner Suche bisher leider nicht sehr erfolgreich :/

Danke schonmal und viele Grüße aus dem Erzgebirge,
Aardjon

ding-dong

  • Member
Re:Bedingte Verarbeitung/"Präprozessor"?
« Antwort #1 am: Montag, 20. Dezember 2010, 23:45 »
hallo!

dazu ist der befehl \tag da - wenn du nicht weiterkommst damit (mit der doku) frag nochmals nach!

viel erfolg!

Aardjon

  • Member
Re:Bedingte Verarbeitung/"Präprozessor"?
« Antwort #2 am: Samstag, 25. Dezember 2010, 17:40 »
Hallo nochmal,

danke für den Anstoß - hab mit dem Namen des Befehls jetzt auch die passende Seite in der Doku gefunden :)

Ich hab jetzt hinbekommen dass ich nur einmal dieses \keepWithTag reinschreiben bzw. entfernen muss und dann setzt er alles entsprechend, was auf jeden Fall eine deutliche Erleichterung darstellt. Doch kann ich Lilypond auch im Aufruf direkt ein Tag mitgeben (also ohne dass ich die ly-Datei jedesmal ändern muss)? Dazu kann ich leider nichts in der Doku finden :/

Danke und frohes Fest,
Aardjon

RobUr

  • Member
Re:Bedingte Verarbeitung/"Präprozessor"?
« Antwort #3 am: Sonntag, 26. Dezember 2010, 11:15 »
Hallo Aardjon,

herzlich willkommen im Forum!

Zitat von: Aardjon
Doch kann ich Lilypond auch im Aufruf direkt ein Tag mitgeben (also ohne dass ich die ly-Datei jedesmal ändern muss)?
Nein, das klappt nicht. Ich würde vielleicht von vornherein die Ausgabe in verschiedene Dateien veranlassen:
#(define output-suffix "Sopran")
\book { % "\SopranNoten" wie notiert verarbeiten und als "MeinePartitur-Sopran.pdf" ausgeben
  \score { \removeWithTag #'AltVariante \SopranNoten }
}

#(define output-suffix "Alt")
\book { % "\SopranNoten" incl. "\tag #'AltVariante" verarbeiten und als "MeinePartitur-Alt-1.pdf" ausgeben
  \score { \keepWithTag #'AltVariante \SopranNoten }
}
Leider ergänzt Lily trotz #(define output-suffix "xyz") jedes zusätzliche book mit einer fortlaufenden Nummer :(

Grüße, Robert

ding-dong

  • Member
Re:Bedingte Verarbeitung/"Präprozessor"?
« Antwort #4 am: Sonntag, 26. Dezember 2010, 14:00 »
hallo

die übergabe von eigenen parametern scheint nicht zu klappen - es gibt aber vielleicht eine zwischenlösung, die ich mit folgendem beispiel illustrieren möchte:

Zitat
\include "tags.txt"
music = \relative g' {
  g8. c32 d
  \tag #'variante1 { d8. \trill }
  \tag #'variante2 { \repeat unfold 3 { e32 d } }
  c32 d
}
\score {
  {
    \keepWithTag \xx \music
  }
}
es wird also eine datei eingelesen, in welcher steht, welche variante verwendet werden soll:

xx = #'variante2etwas umständlich vielleicht, aber immerhin…

das funktioniert auch mit dem aufruf lilypond  -dinclude-settings=tags.txt tags.lyhierbei wird das file tags.txt lediglich vorangehängt, ohne dass es im ly-code includiert werden muss.