Freie Positionierung von Titelelementen

Begonnen von William, Mittwoch, 27. November 2019, 14:39

« vorheriges - nächstes »

William

Hallo miteinander,

ich bin relativ neu mit Lilypond und hätte folgende Frage: Wie kann man für bestimmte Titelelemente wie "composer" festlegen, dass sie (vertikal gesehen) nicht so nah am Titel erscheinen sollen?

Malte

Hallo William,

willkommen im Forum! Bitte gib bei Fragen immer deine LilyPond-Version und nach Möglichkeit auch ein kompilierbares Minimal-(Code-)Beispiel an. Zu deiner Frage hilft vielleicht schon ein Blick in den entsprechenden Abschnitt in der Notationsreferenz.

Viele Grüße
Malte

William

Hallo Malte,
vielen Dank für Deine Antwort. Meine Arbeitsumgebung besteht aus Frescobaldi 2.20.0 und LilyPond 2.18.2 auf Mac OSX 10.10.5.
Die Notationsreferenz habe ich schon ausführlich befragt, aber wie einzelne Textfelder aus der Titelumgebung höher oder tiefer zu platzieren sind, konnte ich daraus nicht entnehmen. Wahrscheinlich fehlt mir noch das Verständnis dafür, wie die Befehlsstrukturen funktionieren, vor allem wenn sie komplexer werden. Daher wäre ich für Hilfe von den Profis sehr dankbar.

VG William

Malte

Hallo William,

ein Minimalbeispiel für deine Anfrage könnte so aussehen:\version "2.18.2"

\header {
  title = "Titel"
  composer = "Komponist"
}

{ R1 }

Dann haben Helfer schon alle nötigen Informationen über deinen bisherigen Stand.

Im Prinzip mußt du ,,einfach" bookTitleMarkup neu definieren, und zwar im \papet-Block. Das Original sähe so aus (zu finden in der Datei titling-init.ly deiner LilyPond-Installation):\paper {
  bookTitleMarkup = \markup {
    \override #'(baseline-skip . 3.5)
    \column {
      \fill-line { \fromproperty #'header:dedication }
      \override #'(baseline-skip . 3.5)
      \column {
        \fill-line {
          \huge \larger \larger \bold
          \fromproperty #'header:title
        }
        \fill-line {
          \large \bold
          \fromproperty #'header:subtitle
        }
        \fill-line {
          \smaller \bold
          \fromproperty #'header:subsubtitle
        }
        \fill-line {
          \fromproperty #'header:poet
          { \large \bold \fromproperty #'header:instrument }
          \fromproperty #'header:composer
        }
        \fill-line {
          \fromproperty #'header:meter
          \fromproperty #'header:arranger
        }
      }
    }
  }
}

Um grundsätzlich den Abstand zwischen einzelnen Zeilen (Titel, Untertitel, Unteruntertitel, Dichter/Instrument/Komponist, Tempo/Arrangeur) zu ändern, kannst du den Wert für baseline-skip von 3.5 auf etwas anderes ändern. Willst du nur zwischen Unteruntertitel und Dichter/Instrument/Komponist mehr Platz haben, hilft dir der Befehl \vspace zwischen den entsprechenden \fill-lines:        \fill-line {
          \smaller \bold
          \fromproperty #'header:subsubtitle
        }
        \vspace #5
        \fill-line {
          \fromproperty #'header:poet
          { \large \bold \fromproperty #'header:instrument }
          \fromproperty #'header:composer
        }
       

William

Hallo Malte,

ganz herzlichen Dank für Deine Hilfe! Das war genau wonach ich gesucht habe.

VG William

harm6

Hallo William,

Maltes Lösung ist auf jeden Fall die saubere Lösung.

Aber vielleicht ist nicht hinreichend bekannt, wie frei man dort gestalten kann:

\paper {
  bookTitleMarkup = \markup {
    \box
      \fill-line {
        \fromproperty #'header:my-booktitle
      }
  }
 
  scoreTitleMarkup = \markup {
      \fill-line {
        \fromproperty #'header:foo
        \fromproperty #'header:bar
        \fromproperty #'header:buzz
      }
  }
}


\header {
  my-booktitle = "MY-BOOK-TITLE"
}

\score {
  { R1 }
  \header {
    foo = "MY-FOO-1"
    bar = "MY-BAR-1"
    buzz = "MY-BUZZ-1"
  }
}

\score {
  { R1 }
  \header {
    foo = "MY-FOO-2"
    bar = "MY-BAR-2"
    buzz = "MY-BUZZ-2"
  }
}


Auf der anderen Seite ist mir sowas für Gelegenheitsarbeiten meist zu lästig und ich greife zu quick'n dirty:


\header {
  title = "TITLE"
  composer = \markup \column { \vspace #2 "COMPOSER" \vspace #2 }
}

{ R1 }


Gruß,
  Harm

William

Hallo Harm,

vielen Dank für die Ergänzung. Klingt sehr interessant. Ich werde es mir auf jeden Fall in Ruhe ansehen, jetzt muss ich aber erstmal Bearbeitungen für Weihnachten fertig machen.  ;)

VG William

Enthalpy

Danke für alle Beiträge, sie haben auch mir geholfen. Selber Fall wie William: Die Noten nehmen eine halbe Seite, ich wollte dem Komponist mehr Abstand zum Untertitel und Instrument gönnen.

Aus Malte's Vorschlag ist bei mir das geblieben, nach experimenteller Tüftlerei wovon ich wenig verstehe und noch weniger beherrsche, da ich mit Lilypond erst anfange:

\version "2.20.0"

\header {
  title = "Badinerie"
  subtitle = "from orchestral suite No. 2"
  instrument = "for gaffophone"
  composer = "J. S. Bach (1685 - 1750)"
  opus = "BWV 1067, last movt"
}

\paper {
  bookTitleMarkup = \markup {
    \override #'(baseline-skip . 3.5)
    \column {
      \fill-line { \huge \larger \larger \bold \fromproperty #'header:title }
      \fill-line { \large \bold \fromproperty #'header:subtitle }
      \fill-line { \fromproperty #'header:instrument }
      \vspace #6
      \fill-line { "" "" \fromproperty #'header:composer }
%     \fill-line { "" "" \fromproperty #'header:opus }
%     \vspace #1
} } }

{
  \relative b'{
    c16 d c b c d e c d c b a g a b c d e f e g f e d e f e d c d e f
    g f e d cis e a g f e d c b d g f e d c b a d e d c b a g fis g a b
} }


Jetzt hat zumindest Johann-Sebastian mehr Raum über dem Kopf. Das Aussehen ließe nun schon die Partitur verbreiten.

Schöner wäre doch mit einem Bißchen mehr Abstand zwischen dem Opus und den Noten, und das schaffe ich nicht. Meine Versuche sind die zwei Zeilen mit % da oben:

  • \vspace #1 unter dem composer trennt das Opus vom Komponist, statt von den Noten.
  • Ein zusätzliches \fill-line { ... opus } über dem \vspace #1 fügt dem Opus über der Leerzeile, läßt aber das alte Opus am Platz, so daß es doppelt gedruckt wird.
Bessere Ideen bitte?

Manuela

#8
Zitat von: Enthalpy am Dienstag, 31. März 2020, 01:55
Bessere Ideen bitte?

Ja, schon, \paper Variable z.B.  ;)
Guckst du hier: 4.1.4 Vertikale \paper-Variablen mit flexiblen Abständen

Für dich interessant wäre wohl markup-system-spacing
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

markup-system-spacing hat den default (siehe paper-defaults-init.ly):
  markup-system-spacing = #'((basic-distance . 5)
                             (padding . 0.5)
                             (stretchability . 30))

Es gilt solange wie das entsprechende \paper gilt und regelt den Abstand zwischen jedem toplevel-markup und nachfolgender Musik. Das hat Vor- und Nachteile: Die Abstände werden global eingestellt (sehr schön), aber man kann nicht lokal zu kleineren Abständen zurückkehren.

Um die vertikalen  Abstände bei toplevel-markups einzuregeln verwende ich deshalb häufig \vspace und lasse markup-system-spacing unangetastet.
Aber auch das hat Vor- und Nachteile, denn es wirkt wie ähnlich wie ein lokales hardcoded padding. Wenn ich also doch andere Anstände haben will, muß ich jedes \vspace lokal korrigieren.

In der Regel ist es jedoch am besten erst das ganze Stück einzugeben und am Ende das layout dort zu korrigieren, wo LilyPond's default nicht hinreichend erscheint. Dazu gehören eben die hier in Rede stehenden Abstände (je nach Anforerung lokal oder global), aber auch Zeilen- und Seitenumbruch, Größen, Schriftarten etc etc


Natürlich ist es manchmal nicht so offensichtlich wie diese Abstände anzugehen sind.
Beim Thema Abstand zwischen toplevel-markup und nachfolgender Musik ist die globale Methode schon besprochen (markup-system-spacing), aber wie beschränkt man den Effekt auf opus-Angabe und Musik?
Dazu muß man wissen das die opus-Angabe (genauso wie die piece-Angabe) nicht Teil des book-headers sondern des score-headers sind. Man kann sie zwar in einen globalen \header setzen, aber dann erscheinen sie auch über jedem score.
Deshalb sollte man sie eigentlich auch per score angeben.
Also nicht

\header {
  ...
  opus = ...
}
score1
score2

sondern

\header { <globale Angaben > }
\score { <music> \header { opus = ... } }

Den Abstand zwischen jedem score-header (aber nur dem score-header und nicht anderem toplevel-markup) und der Musik kann man dann (wiederum global) einregeln mit.

\paper {
  scoreTitleMarkup =
    \markup
      \column {
          \scoreTitleMarkup
          \vspace #4
      }
}

Stellt sich natürlich immer noch die Frage wie man den Abstand zwischen opus-Angabe und Musik in verschiedenen scores verschieden einstellen kann.
Da hilft dann in der jeweiligen opus-Angabe einen Abstand individuell einzubauen:

\score {
  <musicI>
  \header {
    opus = \markup \column { opusI \vspace #2 }
  }
}

\score {
  <musicII>
  \header {
    opus = \markup \column { opusI \vspace #3 }
  }
}

HTH,
  Harm

Manuela

Harm, schön wieder von dir zu lesen  :)

Darf ich dich mit einem Scheme-Problem nerven? Die Antwort lautet vermutlich: ... erzeugt eine Liste, und da funktioiniert dies und jenes nicht ...
Leider komme ich nicht selber dahinter.

define-scheme-function endet mit error: bad expression type
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Hallo Manuela,

der Corona-shut-down hat meine tägliche Arbeitszeit leider explodieren lassen...
Als Lehrer an einer Musikschule benutze ich LilyPond momentan exzessiv, anstatt LilyPond-Probleme zu lösen (was mir persönlich viel mehr Spass macht).

Aber ich schau mal...

Gruß,
  Harm

Manuela

Zitat von: harm6 am Dienstag, 31. März 2020, 14:07
Als Lehrer an einer Musikschule benutze ich LilyPond momentan exzessiv, anstatt LilyPond-Probleme zu lösen (was mir persönlich viel mehr Spass macht).

Aber ich schau mal...

Schickst du Notenblätter oder erstellst du Midi-Aufnahmen?

Danke Harm auf jeden Fall...  :)
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Zitat von: Manuela am Dienstag, 31. März 2020, 19:39
Zitat von: harm6 am Dienstag, 31. März 2020, 14:07
Als Lehrer an einer Musikschule benutze ich LilyPond momentan exzessiv, anstatt LilyPond-Probleme zu lösen (was mir persönlich viel mehr Spass macht).

Aber ich schau mal...

Schickst du Notenblätter oder erstellst du Midi-Aufnahmen?

Danke Harm auf jeden Fall...  :)

Im moment ist ja nur Fernunterricht möglich. Folgende Möglichkeiten bestehen
(1) Per mail (pdfs, audios, Übepläne etc)
(2) Telefon
(3) Video Skype, Zoom, whatsapp oder ähnliches

Ich selbst mache (1)
Dem Schüler schicke ich angepasste bzw kommentierte Noten. Midis und play-alongs in verschieden Fassungen bzw tempi.
Dazu Übeanweisungen/Übepläne per mail. Manchmal bekomme ich auch ein audio oder video zum kommentieren zurück.

(2) wäre auch möglich, aber man muß dann trotzdem noch angepaßte pdf-/audio-files schicken, wo nötig. Außerdem sind rhythmische Feinheiten kaum erfass- und besprechbar. Das gilt auch für (3)

(3) Läuft hier ganz schlecht. Es fehlt an der Bandbreite. Auch kommt mir Skype nicht auf den Rechner wg Sicherheitsbedenken.
Auch haben die Kinder häufig keinen Zugang zum Computer, da diese von den Eltern im home-office benutzt werden.
Whatsapp kann ich gar nicht verwenden, mein Handy ist ein Telefon, ohne internet.

Aber eigentlich ist das komplett off-topic...

Gruß,
  Harm

Enthalpy

Die folgende Tüftlerei produziert die gewünschten Abstände für die Badinerie. Sehr unelegant, doch sie genügt für ein Instrument und eine feste Halbseite Musik.

\paper {
  bookTitleMarkup = \markup {
    \override #'(baseline-skip . 3.5)
    \column {
      \fill-line { \huge \larger \larger \bold \fromproperty #'header:title }
      \fill-line { \large \bold \fromproperty #'header:subtitle }
      \fill-line { \fromproperty #'header:instrument }     % <<<<< Eine Zeile fürs Instrument
      \vspace #5                                           % <<<<< Pfui!
      \fill-line { "" "" \fromproperty #'header:composer } % <<<<< Und eine Zeile für den Komponist
      \fill-line { \fromproperty #'header:meter \fromproperty #'header:arranger }
} } }

\book {
  \header {
    title = "Badinerie"
    subtitle = "from orchestral suite No. 2"
    instrument = "For gaffophone"
    composer = "J. S. Bach (1685 - 1750)"
    opus = \markup \column { "BWV 1067, last movt" \vspace #1 } % <<<<< Pfui!
    copyright = "Copyleft"
    tagline = ##f
  }

  % Noten hier
}


Für weitere Werke, wo ich einzelne Stimmen sowie Leiterpartituren brauche, werde ich die schlaueren Methoden schauen.