Autor Thema: scoreTitleMarkup fallweise unterdrücken  (Gelesen 2754 mal)

martinmagtenor

  • Member
scoreTitleMarkup fallweise unterdrücken
« am: Samstag, 10. November 2012, 22:26 »
Es geht um die vertikalen Abstände zwischen Score-Blöcken.

Es geht um ein "einfaches" Lilypond-Dokument, nicht book/bookpart. Und ich bin mit Lilypond 2.16.0 (seit heute 2.16.1) unterwegs.

Hat man im paper-Abschnitt die Variable print-all-headers auf wahr gesetzt, dann wird zwischen score-Blöcken immer der zugehörige vertikale Abstand (score-markup-spacing) zugefügt, egal ob was auszugeben ist oder nicht.

In einem mehrsätzigen Vokalwerk gibt es auch ein paar Sätze, die aus mehreren score-Blöcken bestehen. Dann steht über dem ersten score-Block der Titel des Stücks (piece) und danach eben nichts aber der unschön große Zwischenraum.

Auf der Suche nach einer Lösung dafür bin ich nicht weitergekommen.

Hier mein kompilierbarer Beispielcode:

\version "2.16.1"

\include "deutsch.ly"

#(set-global-staff-size 18)

\header {
title = "Stück mit mehreren Sätzen"
composer = "Ein Komponist"
copyright = \markup { "Copyright 19xx &copyright;" }
} % header


\score {
\new Staff { \relative c' { \repeat unfold 20 d }}
  \header {
    piece = "Eins"
  }
}

\score {
\new Staff { \relative c' { \repeat unfold 20 e }}
  \header {
    piece = "Zwei mit zwei Gruppen"
  }
}

\score {
\new Staff { \relative c' { \repeat unfold 20 f }}
  \header {
    title = ##f
    piece = ##f
  }
}

\score {
\new Staff { \relative c' { \repeat unfold 20 e }}
  \header {
    piece = "Drei"
  }
}

\paper {
  %% Wenn was unklar ist:
  %annotate-spacing = ##t

  % Für &copyright; und solche Sachen ...
  #(include-special-characters)

  %% Mehr vertikaler Zwischenraum zwischen Systemen
  system-system-spacing = #'((padding . 5) (basic-distance . 1.0))

  %% Mehr vertikaler Zwischenraum nach einer Überschrift
  markup-system-spacing = #'((padding . 3) (basic-distance . 1.0))

  %% unterer Rand wird nicht ausgeglichen
  ragged-last-bottom = ##t
  ragged-bottom = ##t

  %% Wir definieren scoreTitleMarkup anders. Nur den Titel des Stückes
  %% zentriert und etwas größer
  scoreTitleMarkup = \markup {
   \column { \vspace #.5
   \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
   \fill-line { \null { \huge \bold \fromproperty #'header:piece } \null }
   } % column
  } % markup


  %% Seitenzahl unten und zentriert
  print-page-number = ##t
  print-first-page-number = ##t
}

Wie könnte man das bewerkstelligen?

Würde mich über jede Anregung freuen

martinmagtenor

ding-dong

  • Member
Re: scoreTitleMarkup fallweise unterdrücken
« Antwort #1 am: Samstag, 10. November 2012, 23:09 »
hallo!

man muss da schon ziemlich genau hinschauen was man will (ich warte schon lange auf eine klare+übersichtliche darstellung)
versuch mal ob mit score-markup-spacing das gesuchte kommt

ding-dong

Be-3

  • Member
Re: scoreTitleMarkup fallweise unterdrücken
« Antwort #2 am: Sonntag, 11. November 2012, 00:07 »
versuch mal ob mit score-markup-spacing das gesuchte kommt

Genau, mit score-markup-spacing kann man Abstände zwischen zwei Partituren einstellen, "wenn keine Titel-Beschriftung dazwischen kommt", soweit die Anleitung.

Die Crux an der Sache ist im voliegenden Fall, daß Deine Definition von scoreTitleMarkup unter anderem die Befehle \vspace ... und \null enthält, so daß aus Lilypond-Sicht dieses Titel-Markup niemals "leer" ist, denn der Wert von piece ist ja nur ein Teil des Ganzen. Deshalb käme score-markup-spacing nie zum Zuge!

Ich habe mal Dein Beispiel so verändert, daß \null wegfällt (wird nicht benötigt) und \vpace ebenfalls - dies müßte dann durch die Spacing-Variablen abgefangen werden.

\version "2.16.1"

\include "deutsch.ly"

#(set-global-staff-size 18)

\header {
title = "Stück mit mehreren Sätzen"
composer = "Ein Komponist"
copyright = \markup { "Copyright 19xx &copyright;" }
} % header


\score {
\new Staff { \relative c' { \repeat unfold 20 d }}
  \header {
    piece = "Eins"
  }
}

\score {
\new Staff { \relative c' { \repeat unfold 20 e }}
  \header {
    piece = "Zwei mit zwei Gruppen"
  }
}

\score {
\new Staff { \relative c' { \repeat unfold 20 f }}
  \header {
    title = ##f
    piece = ##f
  }
}

\score {
\new Staff { \relative c' { \repeat unfold 20 e }}
  \header {
    piece = "Drei"
  }
}

\paper {
  %% Wenn was unklar ist:
  %annotate-spacing = ##t

  % Für &copyright; und solche Sachen ...
  #(include-special-characters)

  %% Mehr vertikaler Zwischenraum zwischen Systemen
  system-system-spacing = #'((padding . 5) (basic-distance . 1.0))

  %% Mehr vertikaler Zwischenraum nach einer Überschrift
  markup-system-spacing = #'((padding . 3) (basic-distance . 1.0))

  %% Wenn kein Titel vorhanden ist:
  score-system-spacing = #'((padding . 3) (basic-distance . 1.0))
 
  %% unterer Rand wird nicht ausgeglichen
  ragged-last-bottom = ##t
  ragged-bottom = ##t

  %% Wir definieren scoreTitleMarkup anders. Nur den Titel des Stückes
  %% zentriert und etwas größer
  scoreTitleMarkup = \markup {
   \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
   \fill-line { \huge \bold \fromproperty #'header:piece }
   } % markup

 %% Seitenzahl unten und zentriert
  print-page-number = ##t
  print-first-page-number = ##t
}

Viele Grüße
Torsten
« Letzte Änderung: Sonntag, 11. November 2012, 00:17 von Be-3 »

martinmagtenor

  • Member
Re: scoreTitleMarkup fallweise unterdrücken
« Antwort #3 am: Sonntag, 11. November 2012, 11:20 »
Hallo Torsten,

vorzüglich! Das war im Grunde genau das, was ich gesucht hatte, ohne es richtig benennen zu können. Dieses scoreMarkupTitle war (typisch für einen Anfänger) durch Abschreiben entstanden und dann sieht man diese überflüssigen Sachen (\null) und Nebeneffekte (\column und \vspace) nicht.

Danke

martinmagtenor

ding-dong

  • Member
Re: scoreTitleMarkup fallweise unterdrücken
« Antwort #4 am: Sonntag, 11. November 2012, 11:41 »
ich habe ein beispiel in dem es sehr wohl (ohne anpassen des scoreTitleMarkup) funktioniert:
\version "2.17.6"
\paper {
  % page-count = #2
  % scoreTitleMarkup = \markup {
    % \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
    % \fill-line { \huge \bold \fromproperty #'header:piece }
  % }
  system-system-spacing = #'( (basic-distance .  3)(padding . 1)(minimum-distance .  3)(stretchability . 999))
  score-markup-spacing  = #'( (basic-distance . 18)(padding . 1)(minimum-distance . 18)(stretchability . 999))
  score-system-spacing  = #'( (basic-distance . 21 )(padding . 1)(minimum-distance . 21 )(stretchability . 999))
  markup-system-spacing = #'( (basic-distance . 18)(padding . 1)(minimum-distance . 18)(stretchability . 999))
}
\header { title = "title"  composer = "composer" }
\score { \new Staff { \relative c' { \repeat unfold 20 d }} \header { piece = "Eins" } }
\score { \new Staff { \relative c' { \repeat unfold 20 e }} \header { piece = "Zwei mit zwei Gruppen" } }
\score { \new Staff { \relative c' { \repeat unfold 20 { f } \break \repeat unfold 20 { f } } } \header { title = ##f piece = ##f } }
\score { \new Staff { \relative c' { \repeat unfold 20 e }} \header { piece = "Drei" } }

\score { \new Staff { \relative c' { \repeat unfold 20 d }} \header { piece = "Eins" } }                             % <----
\score { \new Staff { \relative c' { \repeat unfold 20 e }} \header { piece = "Zwei mit zwei Gruppen" } }            % <----
% \score { \new Staff { \relative c' { \repeat unfold 20 { f } \break \repeat unfold 20 { f } } } \header { title = ##f piece = ##f } }
% \score { \new Staff { \relative c' { \repeat unfold 20 e }} \header { piece = "Drei" } }

allerdings geschehen seltsame dinge, wenn man noch mehr scores anfügt (ich habe die scores einfach wiederholt und sukzessive auskommentiert, s.  % <---- )

probierts selber aus!

abhilfe kann durch die definition des page-count = erfolgen - allerdings kann es nicht die meinung sein, dass man das selber berechnen muss!

(ich benutze übrigens die version 2.17.6

ding-dong