Deutsches Lilypond Forum (Archiv)

Allgemein => Hilfe beim Einstieg in Lilypond => Thema gestartet von: Lebostein am Donnerstag, 7. Februar 2008, 12:20

Titel: Variablen in Lilypond
Beitrag von: Lebostein 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 (http://lilypond.org/doc/v2.2/Documentation/user/out-www/lilypond/Scheme-tutorial.html) aber mit Strings scheint das nicht zu funktionieren....
Titel: Re: Variablen in Lilypond
Beitrag von: etilli33 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
Titel: Re: Variablen in Lilypond
Beitrag von: Lebostein 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"}

 ???
Titel: Re: Variablen in Lilypond
Beitrag von: etilli33 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
Titel: Re: Variablen in Lilypond
Beitrag von: Lebostein 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"
Titel: Re: Variablen in Lilypond
Beitrag von: Lebostein 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"

% ------------------------------
Titel: Re: Variablen in Lilypond
Beitrag von: Andre 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 }
Titel: Re: Variablen in Lilypond
Beitrag von: Lebostein 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
)))