Autor Thema: Variablen in Lilypond  (Gelesen 9028 mal)

Lebostein

  • Member
Variablen in Lilypond
« am: Donnerstag, 7. Februar 2008, 12:20 »
Hallo, ich bins nochmal....

Kann man in Lilypond Variablen festlegen? Zum Beispiel möchte ich eine Variable "titel" ganz oben in der Datei anlegen:

titel = "Alle meine Entchen"

später im Code (bzw. in einer externen Inlude-Datei) soll dann stehen:

\header {
title = \markup { \override #'(font-size . +6) \override #'(font-name . "Book Antiqua") titel }
}

Ziel ist es, alles was Formatierung ist, in eine oder mehrere separate Inlude-Dateien auszulagern. Wenn ich meine gesamte Liedersammlung irgendwann mit einer anderen Titelschriftart will, so brauche ich nur noch die eine Datei anzupassen und kann dann die gesamte Liedersammlung automatisch generieren lassen.

Leider geht das nicht. Hab auch schon mit # herumgespielt... Hat jemand damit Erfahrung? Ich hab zwar folgendes gefunden:
http://lilypond.org/doc/v2.2/Documentation/user/out-www/lilypond/Scheme-tutorial.html aber mit Strings scheint das nicht zu funktionieren....
« Letzte Änderung: Donnerstag, 7. Februar 2008, 14:37 von Lebostein »

etilli33

  • Member
Re: Variablen in Lilypond
« Antwort #1 am: Donnerstag, 7. Februar 2008, 14:34 »
Na klar kann man. Das wird alles abgehandelt in Kapitel 4.2 der Dokumentation zu 2.10. Davon gibt es auch eine deutsche Übersetzung für die Version 2.11. Variablen werden definiert, indem ein Name gegeben wird (keine Zahlen und keine Satzzeichen), dann Gleichheitszeichen, dann Inhalt in geschweiften Klammern:

Variable = {Inhalt}

und benutzt mit Backslash

\Variable


Gruß
Till

Lebostein

  • Member
Re: Variablen in Lilypond
« Antwort #2 am: Donnerstag, 7. Februar 2008, 14:45 »
So einfach ist es leider nicht. Ich möchte einen simplen "String" in einer Variable haben.

meinevar = {"Hallo"}

funktioniert da leider nicht. Was funktioniert, ist einen ganzen Befehl samt Argumente in eine Variable zu packen (wie die Überschrift "Saving typing with identifiers and functions" andeutet):

meinevar = \lyricmode {"Hallo"}
meinevar = \relative c {"Hallo"}
meinevar = \chordmode {"Hallo"}

 ???
« Letzte Änderung: Donnerstag, 7. Februar 2008, 14:49 von Lebostein »

etilli33

  • Member
Re: Variablen in Lilypond
« Antwort #3 am: Donnerstag, 7. Februar 2008, 22:47 »
Ja, ich hatte schon den Verdacht, da wahr wohl was mit \markup, das kann keine Variablen aufnehmen. War zu faul zum prüfen. Mit normalen Noten jedenfalls geht es hervorragend.

Till

Lebostein

  • Member
Re: Variablen in Lilypond
« Antwort #4 am: Freitag, 8. Februar 2008, 11:04 »
Für den Zweck sind wahrscheinlich die markup-commands gut geeignet. Einfache markup-commands funktionieren ohne Probleme:

\version "2.11.38"

#(define-markup-command (aufblasen layout props text) (string?)
(interpret-markup layout props (markup #:huge text)))

#(define-markup-command (drehen layout props text winkel) (string? number?)
(interpret-markup layout props (markup #:rotate winkel text)))

\markup "test"
\markup \aufblasen #"test"
\markup \drehen #"test" #30

jetzt möchte ich aber das \override bzw. im Macro #:override verwenden und weiß nicht, wie die Syntax ist... so fürht es jedenfalls zu einem Fehler:

\version "2.11.38"

#(define-markup-command (titelfont layout props text) (string?)
(interpret-markup layout props (markup #:override (font-name . "Arial") text)))

\markup \titelfont #"test"
« Letzte Änderung: Freitag, 8. Februar 2008, 11:09 von Lebostein »

Lebostein

  • Member
Re: Variablen in Lilypond
« Antwort #5 am: Freitag, 8. Februar 2008, 13:38 »
Hab die Syntax nach vielen rumprobieren rausbekommen. Hab mal die Standard-Formatierung und die Makroformatierung ("Formatvorlagen") gegenübergestellt. Jeweils soll die Schriftart "Comic Sans MS" mit der Schriftgröße 8 verwendet werden. Leider klappt das mit der Schriftart nicht im Makro (bug??)....

\version "2.11.38"

% ------------------------------ WORKS:

\markup {
\override #'(font-name . "Comic Sans MS")
\override #'(font-size . 8)
"All work and no play makes Jack a dull boy"
}

% ------------------------------ DON'T WORK (the size 8 is correct, but font is default still):

#(define-markup-command (titlefont layout props text) (string?)
(interpret-markup layout props (markup
#:override '(font-family . "Comic Sans MS")
#:override '(font-size . 8)
text
)))

\markup \titlefont #"All work and no play makes Jack a dull boy"

% ------------------------------
« Letzte Änderung: Freitag, 8. Februar 2008, 13:48 von Lebostein »

Andre

  • Member
Re: Variablen in Lilypond
« Antwort #6 am: Freitag, 8. Februar 2008, 14:29 »
Ist schon richtig, hast nur das falsche genommen.

Die Font-Family ist Roman, Sans oder Typesetter.

Aber was du willst ist Font-Name:

\version "2.10.33"
\include "deutsch.ly"

#(define-markup-command
(FontArial layout props text) (string?)
(interpret-markup layout props
(markup
#:override '(font-name . "Arial")
#:override '(font-size . 8)
text
)
)
)
#(define-markup-command
(FontComic layout props text) (string?)
(interpret-markup layout props
(markup
#:override '(font-name . "Comic Sans MS")
#:override '(font-size . 8)
text
)
)
)

\relative c' { c^\markup \FontArial #"Hellau" d e f^\markup \FontComic #"Allaf" g a h }

Lebostein

  • Member
Re: Variablen in Lilypond
« Antwort #7 am: Freitag, 8. Februar 2008, 16:27 »
 :D Mein Gott! Manchmal sieht man den Wald vor lauter Bäumen nicht!
Warum mir das nicht aufgefallen ist. Oben verwende ich font-name und unten font-family... Naja vergesst es.

Vielen Dank Andre!

Jetzt hab ich meine Formatierung ausgelagert, so dass ich nur noch an einer Stelle Anpassen muss, damit alle Notenblätter gleich aussehen:

\version "2.11.38"

\include "deutsch.ly"

\include "format.ly"

\header {
title    = \markup \formatTitel #"Das Lied hat keinen Namen"
subtitle = \markup \formatUnter #"Trad. 19. Jh."
tagline  = \markup \formatUnter #"S1, S2, Flöte, Zwischenspiel"
}

mit der Formatdatei:

#(define-markup-command (formatTitel layout props text) (string?)
(interpret-markup layout props
(markup
#:override '(font-name . "Heidelbe-Normal")
#:override '(font-size . 6)
text
)))

#(define-markup-command (formatUnter layout props text) (string?)
(interpret-markup layout props
(markup
#:override '(font-name . "Palatino")
#:override '(font-size . 0)
text
)))
« Letzte Änderung: Freitag, 8. Februar 2008, 16:46 von Lebostein »