• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Variablen in Lilypond

Begonnen von Lebostein, Donnerstag, 7. Februar 2008, 12:20

Vorheriges Thema - Nächstes Thema

Lebostein

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....

etilli33

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

#2
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"}

???

etilli33

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

#4
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"

Lebostein

#5
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"

% ------------------------------

Andre

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

#7
 :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
)))