• 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ü

Multiplikation zweier Werte - zwei Zahlen mutliplizieren

Begonnen von MaestroGlanz, Donnerstag, 21. April 2016, 12:38

Vorheriges Thema - Nächstes Thema

MaestroGlanz

Ich bin ein Lilypond-Neuling und versuche gerade einfach nur zwei Zahlenwerte zu multiplizieren:

systemhoehe = 15pt
customratio = 1.5
seitenhoehe = (systemhoehe * customratio)

\paper{
  %darum gehts:
  paper-height = seitenhoehe

  %Beiwerk:
  indent=0\mm
  oddFooterMarkup=##f
  evenFooterMarkup=##f
  oddHeaderMarkup=##f
  evenHeaderMarkup = ##f
  bookTitleMarkup = ##f
  scoreTitleMarkup = ##f
  print-page-number = ##f
  left-margin = 0
  right-margin = 0
  top-margin = 0
  bottom-margin = 0
 

fugenkomponist

Zitat von: MaestroGlanz am Donnerstag, 21. April 2016, 12:38
systemhoehe = 15pt
Das ist keine gültige Zuweising. Grad keine Zeit, es auszuprobieren, aber 15\pt (mit Backslash) dürfte gehen, zumindest im \paper-Block.
Zitat
seitenhoehe = (systemhoehe * customratio)
Für sowas verwendet LilyPond Scheme; da sähe diese Multiplikation dann folgendermaßen aus:

seitenhoehe = #(* systemhoehe customration)

Bin mir aber nicht sicher, ob das mit Längenangaben wie bei systemhoehe geht oder nur mit ,,einfachen Zahlen". Heute Abend kann ich da nochmal draufschauen und rumprobieren, falls dies noch nicht dein Problem löst.

Ach ja, bitte gib immer deine verwendete LilyPond-Version an.

MaestroGlanz

Er weigert sich das dann bei paper-height zu akzeptieren.
Allgemein scheint die Definition von Längen hier nicht zu stimmen.

Version ist "2.18.2"

Wo kann man denn so etwas nachlesen? Weil in der LilyPond – Notationsreferenz  hab ich nicht viel hilfreiches gefunden.

harm6

ZitatEr weigert sich das dann bei paper-height zu akzeptieren.
Ohne zu wissen was Du gemacht hast kann niemand einen Verbesserungsvorsschlag unterbreiten.

ZitatAllgemein scheint die Definition von Längen hier nicht zu stimmen.
Keine Ahnung wovon Du sprichst.

ZitatWo kann man denn so etwas nachlesen?
Was ist "etwas"?

MaestroGlanz

Sorry für die unklaren Angaben. Hier erst mal mein Code (MnWE):

\paper {
  #(define notengroesse 20)
  #(define verhaeltnis 2)
%  #(define (intToLength a) (a\pt)) %war ein Versuch

 
  %set all margins
  indent=0\mm
  left-margin = 0\mm
  right-margin = 0\mm
  top-margin = -6\pt
  bottom-margin = 0\mm
 
  paper-height = #(* (*notengroesse vehaeltnis) (1\pt))
%  paper-height = #(intToLength (*notengroesse vehaeltnis)) %Alternativvariante
  paper-width = 300\pt
 
  print-page-number = ##f
}

#(set-global-staff-size 20) %da soll später auch die Variable notengroesse rein. Das funktioniert im Übrigen nämlich auch nicht.

\repeat unfold 15 { c'4 c' c' c' }


Das meiste hab ich mir mit viel Mühe ergoogelt, aber ohne große Früchte bisher. Mit "etwas nachlesen" hab ich eine Einführung in die Macroprogrammierung in lilypond gemeint.

fugenkomponist

#5
Ok, das hilft schon mal viel weiter ;) Statt #(define foo bar) kann man auch einfach foo = bar schreiben, zumindest für einfache Zahlen gar kein Problem. Damit ergibt sich einfach
notengroesse = 20
verhaeltnis = 15

pt ist eine Variable (definiert in der Datei ly/paper-defaults-init.ly) , die in LilyPond wie alle anderen Variablen und Funktionen mit Backslash aufgerufen wird. In Scheme brauchst du diesen Backslash nicht; außerdem handelt es sich um eine Zahl (siehe Edit unten), eine Multiplikation ist also tatsächlich möglich. Du kannst also einfach
paper-height = #(* (* notengroesse verhaeltnis) pt)
oder kürzer
paper-height = #(* notengroesse verhaeltnis pt)
schreiben. Die Funktion * (Multiplikation) kann in Scheme beliebig viele Argumente bekommen.
#(set-global-staff-size notengroesse)
funktioniert tatsächlich, aber nur, wenn notengroesse bekannt ist. Du hattest es im \paper-Block definiert, deshalb galt es außerhalb nicht. Abhilfe: Die Definition vor den \paper-Block schreiben.

Insgesamt ergibt sich (mal alles hierfür unwesentliche rausgekürzt):
\version "2.18.2"

notengroesse = 20
verhaeltnis = 15
 
\paper {
  paper-height = #(* notengroesse verhaeltnis pt)
}

#(set-global-staff-size notengroesse)

\repeat unfold 15 { c'4 c' c' c' }


Edit:
Anscheinend wird im \paper-Block in mm gerechnet. \mm hat also den Wert 1, \pt nen entsprechend kleineren. Das kannst du dir auch per
#(begin
  (display mm)
  (newline)
  (display pt))

(im \paper-Block, außerhalb sind die Variablen mm und pt nicht bekannt) anzeigen lassen.


MaestroGlanz

Besten Dank, ab hier müsste ich alleine zum Ziel kommen. Macros in Lilypond sind definitiv schwieriger als in Latex.