Autor Thema: Wie kann man \vspace variabel gestalten?  (Gelesen 2154 mal)

Heinz

  • Member
Wie kann man \vspace variabel gestalten?
« am: Montag, 25. Juli 2011, 16:49 »
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

  • Member
Re: Wie kann man \vspace variabel gestalten?
« Antwort #1 am: Montag, 25. Juli 2011, 18:50 »
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

  • Member
Re: Wie kann man \vspace variabel gestalten?
« Antwort #2 am: Montag, 25. Juli 2011, 21:59 »
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

  • Member
Re: Wie kann man \vspace variabel gestalten?
« Antwort #3 am: Montag, 25. Juli 2011, 22:22 »
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 = #7nicht.

@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

  • Member
Re: Wie kann man \vspace variabel gestalten?
« Antwort #4 am: Montag, 25. Juli 2011, 22:34 »
Kleine Nachfrage:

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

Danke und Gruß,
Heinz.

harm6

  • Member
Re: Wie kann man \vspace variabel gestalten?
« Antwort #5 am: Montag, 25. Juli 2011, 23:06 »
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

  • Member
Re: Wie kann man \vspace variabel gestalten?
« Antwort #6 am: Dienstag, 26. Juli 2011, 05:53 »
Hallo Harm,

vielen Dank, jetzt habe ich es kapiert!

Einen guten Tag wünscht
Heinz.