Autor Thema: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?  (Gelesen 5731 mal)

juppes

  • Member
Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« am: Freitag, 12. Oktober 2012, 17:10 »
hallo zusammen,

hier kommt schon wieder ein Formatierungsproblem. Die Ausgangssituation:

Ich habe eine Partitur geschrieben, die ich nun als "Quelle" für die einzelnen Stimmen benutze. Ich kann sie ja mit \include herausziehen.
Das ergibt aber erst einmal nur Rohmaterial, das dann noch nachbearbeitet werden muß.

Einer der Schritte ist es, passende Blätterstellen zu schaffen. Daraus ergibt sich nun für mich die Notwendigkeit, eine leere Seite in die Stimme einzufügen. Habe in der NR unter Layout eine Variable "blank-page-force" entdeckt, habe aber keine Ahnung, wie ich die dann einsetze. Kann mir jemand weiterhelfen?

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #1 am: Freitag, 12. Oktober 2012, 19:46 »
Auch wenn man im Forum fragt, sucht man manchmal auch noch an anderer Stelle weiter (und derer gibt es ja sehr viele). Und da habe ich eine Lösung gefunden, die auch unter Lilypond 2.14.2, der Version, mit der ich arbeite, noch funktioniert, obwohl der Thread schon etwas angejahrt ist. Ich gebe ihn hier gerne bekannt:

http://lists.gnu.org/archive/html/lilypond-user/2006-07/msg00405.html

Bin sicher, daß noch einmal wer anders diese Sache brauchen kann.

harm6

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #2 am: Samstag, 13. Oktober 2012, 23:09 »
Hallo juppes,

Recht trivial ist die Lösung, falls man die leere Seite nach einem score haben möchte:

\version "2.14.2"

{
        \repeat unfold 2 { c''1 \pageBreak }
        c''1
        \bar "|."
}

% blank page:

\pageBreak

\markup \null

\pageBreak

{
        \repeat unfold 2 { c'''1 \pageBreak }
        c'''1
        \bar "|."
}

Falls Du eine leere Seite mitten in einem score haben willst, wird es komplizierter.
Der link, den Du entdeckt hast führt zu einem Code, der zwar das damals aktuelle Problem behoben haben mag, er hat aber auch ein paar Schwächen. Insbesondere dann, wenn vor bzw nach dem Seitenumbruch Wechsel des Taktes, der Tonart und/oder des Schlüssels gesetzt werden.

Deshalb habe ich ihn umgeschrieben (siehe unten). Falls es damit noch unentdeckte Probleme gibt, poste sie.

Der Code enthält außerdem ein neu definiertes markup-command,
`page-text´
welches das markup-Argument horizontal auf der Seite zentriert (genau wie \fill-line).
Darüber hinaus wird die Seitenhöhe ausgelesen und das argument um die Hälfte dieser Höhe versetzt.
Feinjustierung (falls gewünscht) ist möglich via:
     \override #'(x-offset . <number>)
und
     \override #'(y-offset . <number>)

Die naheliegendste Verwendung ist natürlich in einem top-level-markup. -> `titlePageMarkup´

\version "2.14.2"
     
#(define-markup-command (page-text layout props arg)(markup-list?)
  #:properties ((line-width #f)
                (x-offset 0)
                (y-offset 0))
  (let* ((paper-height (ly:output-def-lookup layout 'paper-height))
         (paper-wdth (ly:output-def-lookup layout 'paper-width))
         (half-height (/ paper-height 2))
         (line-width (or line-width (ly:output-def-lookup layout 'line-width)))
         (m (interpret-markup layout props  (make-fill-line-markup arg)))
         (y-center (interval-center (ly:stencil-extent m Y))))
  (ly:stencil-translate
    m
    (cons x-offset (- (+ (* -0.95 half-height) y-offset) y-center)))))
 
blankPageMarkup =
\markup {
        \null
        \override #'(x-offset . -10) %% adjusting x/y-offset is possible
        \override #'(y-offset . 30)  %% adjusting x/y-offset is possible
        \page-text {
        "(this page has been left blank to facilitate page turning)"
        }
}

titlePageMarkup =
\markup {
        \page-text {
        \center-column {
                \fontsize #12 "Title"
                \vspace #2
                \fontsize #4 "Subtitle"
                \vspace #35
                \draw-line #'(40 . 0)
                \vspace #2
                " "
        }
        }
}

blankPage = {
        \pageBreak
        \cadenzaOn
        \stopStaff
        \once\override Staff.TimeSignature #'break-visibility = #'#(#t #f #f)
        \set Staff.explicitKeySignatureVisibility = #'#(#t #f #f)
        \set Staff.explicitClefVisibility = #'#(#t #f #f)
        \once \override Score.BarNumber #'transparent = ##t
 
        s1_\blankPageMarkup

        \unset Staff.explicitKeySignatureVisibility
        \unset Staff.explicitClefVisibility
        \once\override Staff.TimeSignature #'break-visibility = #'#(#f #f #t)
        \cadenzaOff
        \bar ""
        \startStaff
        \pageBreak
}

%----- test --------

\titlePageMarkup

\pageBreak

\relative c' {
        \key cis\major
        c1
        \pageBreak
        \key ces\major
        \time 8/8
        \clef alto
        \blankPage
        % If \time changes, this needs to be repeated here:
        \time 8/8
        c1
        \pageBreak
        c
        \break
        \key cis\major
        \clef treble
        \time 2/2
        c
}


HTH,
  Harm

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #3 am: Montag, 15. Oktober 2012, 21:11 »
hallo Harm,

bin gerade unterwegs und sitze an einem Gastcomputer. Ganz herzlichen Dank fuer Dein Codebeispiel. Das werde ich auf jeden Fall ausprobieren. Was ich verwendet habe, funktioniert aber fuer meine Zwecke ausreichend gut, da ich nur eine blaettertechnische Leerseite mitten in einer Stimme zwischen zwei Saetzen erzeugen muss, damit der nachfolgende Satz auf zwei gegenueberliegenden Seiten zu stehen kommt. Ende der Woche probiere ich Deinen Vorschlag und melde mich wieder.

RobUr

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #4 am: Dienstag, 16. Oktober 2012, 12:41 »
Hallo juppes,

ganz nebenbei wäre dies ein klassischer Anwendungsfall für \bookpart! Eine echte leere Seite würde durch folgenden Code erzeugt werden:
\version "2.12.3" % und neuer

\bookpart {
\markup { \null }

\paper {
evenHeaderMarkup = \markup { \null }
oddHeaderMarkup = \markup { \null }
evenFooterMarkup = \markup { \null }
oddFooterMarkup = \markup { \null }
}
}

Gruß, Robert

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #5 am: Donnerstag, 18. Oktober 2012, 23:22 »
kann ich das dann auch mitten in einer Stimme machen?

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #6 am: Samstag, 20. Oktober 2012, 10:56 »
Lieber Harm,

wie angekündigt habe ich nun auch Deinen Leerseitenvorschlag "probegefahren". Ich muß sagen, daß er dem älteren absolut überlegen ist. Der hat nämlich auch noch eine Macke, die erst auf den zweiten Blick auffällt: durch die Befehlsfolge

\startStaff \stopStaff
entstehen nämlich 5 winzige Punkte oben rechts auf der Seite, die zwar kaum wahrnehmbar sind. Hat man sie aber einmal entdeckt, stören sie dennoch, denn sie gehören da nicht hin.

Das Sahnehäubchen obendrauf wäre jetzt nur noch, die Seitenzählung und die Intrumentenangabe für die  Leerseite "abzuschalten", aber das ist vielleicht gar nicht möglich, oder doch?

harm6

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #7 am: Samstag, 20. Oktober 2012, 16:48 »
Hallo juppes,

Zitat von: juppes
wie angekündigt habe ich nun auch Deinen Leerseitenvorschlag "probegefahren". Ich muß sagen, daß er dem älteren absolut überlegen ist. Der hat nämlich auch noch eine Macke, die erst auf den zweiten Blick auffällt

Schön, daß es Dir gefällt.
Ich habe aber mittlerweile doch noch eine Schwäche entdeckt.

Insofern solltest Du folgendes verwenden, falls Du eine leere Seite in einem score haben möchtest:

blankPage = {
        \pageBreak
        \cadenzaOn
        \stopStaff
        \once\override Staff.TimeSignature #'break-visibility = #'#(#t #f #f)
        \set Staff.explicitKeySignatureVisibility = #'#(#t #f #f)
        \once \override Staff.KeySignature #'break-visibility = #'#(#t #f #f)
        \set Staff.explicitClefVisibility = #'#(#t #f #f)
        \once \override Staff.Clef #'break-visibility = #'#(#t #f #f)
        \once \override Score.BarNumber #'transparent = ##t
 
        s1_\blankPageMarkup

        \unset Staff.explicitKeySignatureVisibility
        \unset Staff.explicitClefVisibility
        \once\override Staff.TimeSignature #'break-visibility = #'#(#f #f #t)
        \cadenzaOff
        \bar ""
        \startStaff
        \pageBreak
}

Für eine leere Seite zwischen zwei scores ist Roberts Vorschlag der beste.

Zitat
Das Sahnehäubchen obendrauf wäre jetzt nur noch, die Seitenzählung und die Intrumentenangabe für die  Leerseite "abzuschalten", aber das ist vielleicht gar nicht möglich, oder doch?

Hierzu mehr in Deinem anderen Thread.


Gruß,
  Harm

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #8 am: Samstag, 20. Oktober 2012, 23:52 »
Danke, danke! Morgen probiere ich den auch noch aus. Welche Unzulänglichkeit ist Dir denn noch aufgefallen?

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #9 am: Sonntag, 21. Oktober 2012, 11:42 »
hallo Harm,

ich habe Deine andere verbesserte blankPage-Variable ausprobiert, und natürlich funktioniert sie wunderbar. Aber eines mußt Du mir jetzt doch noch verraten: vielleicht habe ich ja Tomaten auf den Augen.

Was hast Du gegenüber der Fassung davor verändert? Ich habe den Code Zeile für Zeile gelesen, konnte aber keinen Unterschied erkennen.

Danke für "Erleuchtung"

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #10 am: Sonntag, 21. Oktober 2012, 16:40 »
lieber Harm,

und noch eine Rückmeldung: sowohl bei Deiner Lösung als auch bei Roberts Vorschlag, den ich auch einmal ausprobiert habe, wobei ich einen Bookpart mit vielen scores zerlegt habe, gibt es eine Nebenwirkung, die ich nicht verstehe, die aber leider auch unbefriedigend ist. Vielleicht kommt sich da etwas in die Quere? Ich wüßte aber nicht, was das sein könnte.

Die Nebenwirkung (sie ist mir auch erst auf den zweiten Blick aufgefallen) ist folgende: jeweils auf den linken Seiten stehen die Taktzahlen und die Seitenzahlen zu eng beieinander. Ist z.B. auch noch eine Tempobezeichnung dort, rückt das Notensystem nach unten. Das Phänomen stört also nur, wenn nichts dergleichen vorhanden ist. Darum fällt es auch nur auf, wenn man alle Seiten nacheinander anschaut. In Deinem Codebeispiel sehe ich das gleiche: die Notenzeile steht ziemlich dicht an der Seitenzahl.

Und das Interessante ist, daß in der mängelbehafteten älteren Lösung dieser Effekt nicht auftritt. Ich habe keine Erklärung dafür...
Gibt es noch irgendwelche Padding-Einstellungen, an denen man herumschrauben könnte?

Zur Illustration hänge ich zwei Bildschirmfotos an.

harm6

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #11 am: Montag, 22. Oktober 2012, 01:15 »
Hallo juppes,

a)
Zitat
Welche Unzulänglichkeit ist Dir denn noch aufgefallen?

Ich hatte den Code auf alle möglichen Eventualitäten getestet, dabei aber den Fall das nichts besonderes (außer der Leerseite) passiert ausgelassen. Das hatte ich nachgeholt und festgestellt, daß in manchen Situationen doch Notenschlüssel und/oder Vorzeichen geschrieben werden.

b)
Zitat
Was hast Du gegenüber der Fassung davor verändert? Ich habe den Code Zeile für Zeile gelesen, konnte aber keinen Unterschied erkennen.

Mein Code vom 13.10.2012Mein Code vom 21.10.2012
blankPage = {
        \pageBreak
        \cadenzaOn
        \stopStaff
        \once\override Staff.TimeSignature #'break-visibility = #'#(#t #f #f)
        \set Staff.explicitKeySignatureVisibility = #'#(#t #f #f)

        \set Staff.explicitClefVisibility = #'#(#t #f #f)

        \once \override Score.BarNumber #'transparent = ##t
 
        s1_\blankPageMarkup

        \unset Staff.explicitKeySignatureVisibility
        \unset Staff.explicitClefVisibility
        \once\override Staff.TimeSignature #'break-visibility = #'#(#f #f #t)
        \cadenzaOff
        \bar ""
        \startStaff
        \pageBreak
}
blankPage = {
        \pageBreak
        \cadenzaOn
        \stopStaff
        \once\override Staff.TimeSignature #'break-visibility = #'#(#t #f #f)
        \set Staff.explicitKeySignatureVisibility = #'#(#t #f #f)
        \once \override Staff.KeySignature #'break-visibility = #'#(#t #f #f)
        \set Staff.explicitClefVisibility = #'#(#t #f #f)
        \once \override Staff.Clef #'break-visibility = #'#(#t #f #f)
        \once \override Score.BarNumber #'transparent = ##t
 
        s1_\blankPageMarkup

        \unset Staff.explicitKeySignatureVisibility
        \unset Staff.explicitClefVisibility
        \once\override Staff.TimeSignature #'break-visibility = #'#(#f #f #t)
        \cadenzaOff
        \bar ""
        \startStaff
        \pageBreak
}


Klar?

c)
Zitat
Die Nebenwirkung (sie ist mir auch erst auf den zweiten Blick aufgefallen) ist folgende: jeweils auf den linken Seiten stehen die Taktzahlen und die Seitenzahlen zu eng beieinander. Ist z.B. auch noch eine Tempobezeichnung dort, rückt das Notensystem nach unten. Das Phänomen stört also nur, wenn nichts dergleichen vorhanden ist. Darum fällt es auch nur auf, wenn man alle Seiten nacheinander anschaut. In Deinem Codebeispiel sehe ich das gleiche: die Notenzeile steht ziemlich dicht an der Seitenzahl.

Und das Interessante ist, daß in der mängelbehafteten älteren Lösung dieser Effekt nicht auftritt. Ich habe keine Erklärung dafür...
Gibt es noch irgendwelche Padding-Einstellungen, an denen man herumschrauben könnte?

Also ich kann keinen essentiellen Unterschied im spacing ausmachen, egal welchen Code ich für eine leere Seite benutze.
Ich vermute eher es liegt am page-header.

Die page-header werden ja so definiert:

    oddHeaderMarkup = \markup \fill-line { <was-auch-immer> }
(evenHeaderMarkup entsprechend)

Setze doch mal \box zur besseren Visualisierung wie folgt ein:

    oddHeaderMarkup = \markup \box \fill-line { <was-auch-immer> }
Ist die Box, dann unterschiedlich hoch?
Wenn ja, dann hast Du die Ursache, wenn nein, dann mußt Du einen Beispiel-Code posten.

Aber Du könntest in jedem Fall mit ein paar spacing-Variablen rumspielen, vielleicht wird das Problem schon dadurch behoben:

        top-system-spacing #'basic-distance = #4
        top-system-spacing #'minimum-distance = #4
        top-system-spacing #'padding = #4

        top-markup-spacing #'basic-distance = #4
        top-markup-spacing #'minimum-distance = #4
        top-markup-spacing #'padding = #4

        annotate-spacing = ##t
annotate-spacing ist beim debugging manchmal hilfreich.


Siehe auch NR Vertikale \paper-Variablen mit flexiblen Abständen:

Zitat

  top-system-spacing

    der Abstand zwischen dem oberen Rand des bedruckbaren Bereichs (also dem Ende des oberen Rands) und dem ersten System auf der Seite, wenn keine (Titel-)Beschriftung (auf höchster Ebene) dazwischen kommt.

  top-markup-spacing

    der Abstand vom oberen Rand des bedruckbaren Bereichs (also dem Ende des oberen Randes) zur ersten (Titel-)Beschriftung (auf höchster Ebene) auf einer Seite, wenn keine Systemgruppe dazwischen kommt.

HTH,
  Harm
« Letzte Änderung: Montag, 22. Oktober 2012, 01:21 von harm6 »

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #12 am: Montag, 22. Oktober 2012, 09:19 »
hallo Harm,

das mit der Box ist ein tolles Instrument zum Sichtbarmachen! Die page-header sind es. Dann werde ich wohl mal etwas herumspielen müssen. Interessant ist noch, daß das Problem in der gleichen Stimme erst nach der Leerseite auftritt, wenn ich Roberts Leerseite einbaue, und immer, wenn ich Deinen Code verwende. Das scheint etwas mit der Tatsache zu tun zu haben, daß ich im Bookpart nach der Leerseite noch einmal die \paper-Definitionen noch einmal im neuen Bookpart wiederholt habe.

Hier sind die Screenshots:

harm6

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #13 am: Montag, 22. Oktober 2012, 11:55 »
Hallo juppes,

wie man an Deinen PNGs deutlich sieht sind die page-header unterschiedlich hoch. Es scheint, daß manche einzeilig, andere zweizeilig sind, mit Instrument/Seitennummer in verschiedenen Zeilen.
Das würde ich auf jeden Fall vereinheitlichen.
Darüberhinaus mag es trotzdem etwas zu gedrängt aussehen. Insofern solltest Du vielleicht die oben genannten spacing-Variablen einsetzen, allerdings in einem book-paper, also auf top-level-Niveau, nicht in einem bookpart-paper.


HTH,
  Harm

juppes

  • Member
Re: Wie füge ich in einer Instrumentalstimme eine Leerseite ein?
« Antwort #14 am: Montag, 22. Oktober 2012, 14:24 »
Ja, das will ich auch;  so kann man das nicht  lassen. Was mich nur wundert, ist, daß  das irgendwie von selbst passiert zu sein scheint. Ich habe ja nichts anderes gemacht als Deinen Code in meine Datei "eingebaut". Ich werde dann mal ein bißchen herumprobieren. Komme aber wohl erst wieder am Ende der Woche dazu.

Auf jeden Fall Dank für die Schützenhilfe