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

Wie kann man \vspace variabel gestalten?

Begonnen von Heinz, Montag, 25. Juli 2011, 16:49

Vorheriges Thema - Nächstes Thema

Heinz

Liebe Lilypond-Cracks!

Der Funktion \vspace, die normalerweise einen eindeutigen, numerischen Wert erwartet, würde ich gerne variabel nutzen, d. h. statt einen festen Wert möchte ich eine Variable zuweisen, die ich an einer anderen Stelle definiere.

Etwa in der Form:

Abstand = 3
\vspace #Abstand

Meine Kenntnisse, die Funktion selbst zu verändern, reichen leider nicht aus.

Zum Hintergrund: ich möchte den Abstand zwischen Toplevel-markups und -scores komfortabler und freier gestalten können.

Weiß jemand Rat?

Vielen Dank für sachdienliche Hinweise :)!

Gruß,
Heinz

trulli

Zitat von: Heinz am Montag, 25. Juli 2011, 16:49
Vielen Dank für sachdienliche Hinweise :)!

Hallo Heinz,

ein Zitat von Eduard Zimmermann... gleich erkannt.  :)

Vielleicht hilft dir das:
Da es hier um die vertikale Ausrichtung von Text geht kannst du am Anfang deines Codes eine grundsätzliche Verschiebung aller Text-Scripts einfügen (dafür natürlich den #-Wert entsprechend anpassen):

\override TextScript #'Y-offset = #7

Grüße von Trulli

harm6

Hallo Heinz,

um Deine Frage im engeren Sinne zu beantworten:

\version "2.14.1"

#(define AbstandI (* 2 2))
% oder
AbstandII = 3

#(define-markup-command (vspace layout props amount)(symbol?)
  (let ((amount (* amount 3.0)))
    (if (> amount 0)
        (ly:make-stencil "" (cons 0 0) (cons 0 amount))
        (ly:make-stencil "" (cons 0 0) (cons amount amount)))))

% Bsp:

\markup {
        \center-column { a \vspace #AbstandI b}
        \hspace #8
        \center-column { c \vspace #AbstandII d}
}


Aber neben trullis Vorschlag, ist die Einstellung im paper-Block eigentlich dafür zuständig:

\version "2.14.1"

\paper {
        markup-system-spacing = #'((basic-distance . 20))
}

\header {
        title = "Abstand"
}

\relative c' {
        a1\break
        b\break
        c
}


Bei größeren Projekten mit einer vielzahl von markups und scores solltest Du Dir überlegen \book und \bookpart zu benutzen.

Gruß,
  Harm

Heinz

Hallo Trulli und harm6,

vielen Dank für die Hinweise! Insbesondere der von harm6 war auch sachdienlich :) Genauso meinte ich es - vielen Dank!
Denn auf toplevel-Ebene geht das mit
\override TextScript #'Y-offset = #7
nicht.

@harm6:
Die Sache mit dem paper-Block ist mir eigentlich klar, nur wollte ich unterschiedliche "Gewichtungen" der Abstände zwischen sowohl markups als auch zwischen score und markup definieren können.
Wenn ich beispielsweise einen kleinen Textblock unter ein Lied hängen möchte (mit z. B. Dichter/Komponist), dann soll dieser Abstand im ganzen Buch immer gleich und ggf. generell veränderbar sein.
Ich kann jetzt also etwa "weiter Abstand", "enger Abstand" oder "mittlerer Abstand" festlegen. Oder so...

Also nochmal: besten Dank!

Liebe Grüße,
Heinz.


Heinz

Kleine Nachfrage:

was bedeutet denn genau
#(define AbstandI (* 2 2))?
Also ich meine: wofür stehen die beiden Zweien?

Danke und Gruß,
Heinz.

harm6

Hallo Heinz,

(* 2 2) ist eine Berechnung in scheme. Die normale mathematische Schreibweise ist: 2 x 2 
Da ich nicht genau wußte, wie Du die Abstände definieren willst, habe ich #(define AbstandI (* 2 2)) als ein mögliches Beispiel genannt.

Es ist dann auch folgendes möglich:

#(define abstandI 1)
#(define abstandII 2)
#(define abstandIII 3)
#(define abstandIV (+ abstandI abstandIII))
#(define abstandV (+ abstandII abstandIII))

oder auch wesentlich komplizierteres Zeug.

Gruß,
  Harm

Heinz

Hallo Harm,

vielen Dank, jetzt habe ich es kapiert!

Einen guten Tag wünscht
Heinz.