Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: chf am Sonntag, 7. April 2013, 12:42

Titel: layout-Probleme
Beitrag von: chf am Sonntag, 7. April 2013, 12:42
Liebe Freunde,

wie kann ich Seitenzahlen verschieben, ohne Ränder zu verändern?
wie kann ich copyright wie üblich auf der ersten Seite haben und tagline auf den weiteren Seiten?

Gruß und Dank
chf
Titel: Re: layout-Probleme
Beitrag von: eluze am Sonntag, 7. April 2013, 13:25
hallo!

Zitat
wie kann ich Seitenzahlen verschieben, ohne Ränder zu verändern?
was meinst du genau? ???

Zitat
wie kann ich copyright wie üblich auf der ersten Seite haben und tagline auf den weiteren Seiten?
so etwa:
  oddFooterMarkup = \markup \column{
    \fill-line {
      \on-the-fly #not-first-page {\null  "* EMV 11001 *" \null}
    }
    \fill-line {
      \on-the-fly #not-first-page {\fromproperty #'header:tagline }
    }
  }

dann muss tagline im \header noch definiert werden, resp. im \paper block nicht auf ##f gesetzt werden

Eluze
Titel: Re: layout-Probleme
Beitrag von: Be-3 am Sonntag, 7. April 2013, 14:10
wie kann ich Seitenzahlen verschieben, ohne Ränder zu verändern?

Hallo Christa,

wohin möchtest Du denn die Seitenzahlen verschieben? Nach oben/unten/außen/innen?
In Deinem Beispiel besteht ja die Kopfzeile aus nichts anderem als den Seitenzahlen.

Nach oben/unten

Über top-margin läßt sich der Abstand der Kopfzeile (d. h. Seitenzahl) von der oberen Blattkante verändern.
top-system-spacing bestimmt den Abstand des obersten Systems zur oberen Blattkante.
top-markup-spacing bestimmt den Abstand des obersten Markups zur oberen Blattkante.

Nach innen/außen

Am Bequemsten ist es wohl, die line-width speziell für die Kopfzeile zu ändern.

        oddHeaderMarkup = \markup \override #'(line-width . 100) \fontsize #2 \fill-line { \null \on-the-fly #not-first-page \fromproperty #'page:page-number-string }       


Ansonsten stehen Dir natürlich wie üblich alle Möglichkeiten offen, die \markup zu bieten hat.

Viele Grüße
Torsten
Titel: Re: layout-Probleme
Beitrag von: chf am Montag, 8. April 2013, 14:54
Ihr Lieben,

danke für Euere Angebote - ich bin damit leider nicht weitergekommen.
top-margin und line-width sind klar, aber mit den spacings stehe ich auf Kriegsfuß.
Die Systeme kann ich immerhin mit \overrideProperty #"Score.NonMusicalPaperColumn" verschieben.

Wenn ich aber unabhängig davon die Seitenzahlen in beliebige Richtung "rangieren" will? Mit den herkömmlichen markup- und translate-Befehlen ruckt (bei mir) nichts. Könnt ihr mir das mal als code vorstellen?

Mit der Fußzeile komme ich auch noch nicht zurecht. Bei mehrseitiger Partitur erscheint das komplette copyright auf der ersten Seite nicht.

Dank und Gruß
Christa


Titel: Re: layout-Probleme
Beitrag von: eluze am Montag, 8. April 2013, 15:36
hallo Christa

sag doch bitte genauer was du willst:

die zahlen nach unten/oben
oder
nach links/ rechts schieben
oder
einmitten!?

gruss
Eluze
Titel: Re: layout-Probleme
Beitrag von: chf am Montag, 8. April 2013, 17:29
Die Zahlen sollen außen stehen.
Ich möchte sie um wenige mm im Ausnahmefall einzeln vor allem nach oben / unten, aber auch rechts / links schieben können, die vorgegebene Einstellung aber nicht aufgeben (wie z. B. \override...  und in Abweichung \once \override)
Es sind ja nicht alle Notenbilder "genormt" ...
Verstehst du?

Christa
Titel: Re: layout-Probleme
Beitrag von: Be-3 am Montag, 8. April 2013, 19:03
Hallo Christa,

der Grund, warum wir so genau nach dem "Wohin" fragen, ist die Funktionsweise des vertikalen Spacings bei Lilypond.
Wenn wir mal den top-margin als Abstand zur Blatt-Oberkante ansehen, dann ist die Kopfzeile (und da stehen Deine Seitenzahlen) so ausgerichtet, daß sie mit ihrem oberen bedruckten Rand an diese durch top-margin festgelegte Grenze stößt.

Wenn mir ein plastische Beispiel gestattet ist: Die Seitenzahlen sind wie heliumgefüllte Luftballons: Sie fliegen hoch, bis sie an der Decke hängen. Wenn Du sie mit \lower o. ä. weiter nach unten ziehst, fliegen sie trotzdem wieder hoch unter die Decke. Auch kommt man mit \raise nicht weiter hoch, weil eben diese Decke im Weg ist.

\raise oder \lower beeinflussen die Position nur relativ zu anderen Elementen des Markups, z. B.

"Seite" \raise #5 "1"

bewirkt zwar, daß die "1" fünf Einheiten höher steht als "Seite", insgesamt hängt aber doch der höchste Punkt "an der Decke" fest und kommt nicht höher.

Man kann den Seerosenteich überlisten, wenn man ihm eine andere Größe/Höhe vorgaukelt, als tatsächlich vorhanden ist, aber das ist schon wieder Markup-Bastelei.

Soweit dazu, auch wenn es (noch) nicht direkt Dein Problem löst.
Ich habe da aber schon eine Idee... wenn nicht Harm gleich eine alleskönnende Monsterfunktion präsentiert. ;)

Viele Grüße
Torsten
Titel: Re: layout-Probleme
Beitrag von: chf am Montag, 8. April 2013, 22:16
Entschuldigt bitte - da habe ich wieder mal nicht ganz durchgesehen.
Danke für die Erklärung, Torsten - das hast du schön beschrieben.

Dringlicher ist beinahe die Frage nach dem  copyright... (Ich bin ein Lausknicker, ich weiß.)
Christa
Titel: Re: layout-Probleme
Beitrag von: Be-3 am Montag, 8. April 2013, 22:17
So, nochmal ich,

die Lösung ist soweit fertig.
Ich habe ein kleines Beispiel gebastelt (im Format DIN A6, damit man's besser sieht), bei dem man für bestimmte Seitenzahlen eine beliebige Ausnahme-Verschiebung einstellen kann.
Doch der Reihe nach:

Der Markup-Befehl \place-folio wird in der Kopfzeile vor die Seitenzahl gesetzt. Er definiert eine "Box" mit den Abmessungen der Seitenzahl. Innerhalb dieser Box mit quasi gewaltsam festgesetzten Abmessungen läßt sich die Seitenzahl beliebig nach oben/unten/rechts/links verschieben, ohne, daß es irgendwelche Auswirkungen hätte.
Die Luftballons von oben können jetzt also durch die Decke und Wände geschoben werden. ;)

Im Beispiel habe ich Seite 3 nach außen und oben verschoben, Seite 4 nach innen und unten - zu Demozweckenn sogar so weit, daß sie in die Notenlinie hineinreicht.

Die Kopfzeilen sind absichtlich einfach gestaltet (ohne Ausblenden er ersten Seitenzahl usw.), um nicht vom Wesentlichen abzulenken.

  oddHeaderMarkup = \markup \fill-line { \place-folio \fromproperty #'page:page-number-string \null }
  evenHeaderMarkup = \markup \fill-line { \null \place-folio \fromproperty #'page:page-number-string }

Definieren kann man die Ausnahmen in der Liste folio-offset:

#(define folio-offset '(
    (3 . (-2 . 1))      ; Seite 3 um 2 nach links und 1 nach oben
    (4 . (-3 . -4))    ; Seite 4 um 3 nach links und 4 nach unten
))


Wenn die Seitenzahl in der Liste aufgeführt ist, werden die angegebenen x- und y-Verschiebungen angewandt. Wenn nicht, steht die Zahl dort, wo sie "natürlicherweise" sonst auch stünde.

Um den Effekt zu verdeutlichen, markiert ein Kasten die "Original-Position". Der muß natürlich in der endgültigen Anwendung entfernt werden. Die entsprechende Stelle ist im Coding mit dem Kommentar "nur zum Test - dann auskommentieren!" versehen.

Hier ist das komplette Coding dazu:

\version "2.16.2"

#(set-default-paper-size "a6")

% Hier können die Ausnahmen eingetragen werden:
% Format: (<seite> . (<x-offset> <y-offset>)
#(define folio-offset '(
    (3 . (-2 . 1))      ; Seite 3 um 2 nach links und 1 nach oben
    (4 . (-3 . -4))    ; Seite 4 um 3 nach links und 4 nach unten
))

#(define-markup-command (place-folio layout props folio) (markup?)
   (let* ((nn (ly:output-def-lookup layout 'page:page-number-string))
         (pageno (chain-assoc-get 'page:page-number props))
         (offs (assoc-get pageno folio-offset '(0 . 0)))
         (m (interpret-markup layout props  (markup folio)))
         (x-ext (ly:stencil-extent m X))
         (y-ext (ly:stencil-extent m Y)))
   (interpret-markup layout props
     (markup
        #:box   ; nur zum Test - dann auskommentieren!
        #:with-dimensions x-ext y-ext
        #:line (#:translate offs folio)
       ))))

\paper {
  indent = 0
  ragged-right = ##f
  oddHeaderMarkup = \markup \fill-line { \place-folio \fromproperty #'page:page-number-string \null }
  evenHeaderMarkup = \markup \fill-line { \null \place-folio \fromproperty #'page:page-number-string }
  oddFooterMarkup = \markup \column{
    \fill-line {
      \on-the-fly #first-page { \fromproperty #'header:copyright }
    }
    \fill-line {
      \on-the-fly #not-first-page { \fromproperty #'header:tagline  }
    }
  }
}

\header {
  copyright = "Copyright-Text"
  tagline = "Tagline-Text"
}

{ \repeat unfold 10 { s1 \pageBreak } }

Wie würde Harm sagen: HTH :)

Viele Grüße
Torsten

Edit:

Dringlicher ist beinahe die Frage nach dem  copyright... (Ich bin ein Lausknicker, ich weiß.)

Die Sache mit Copyright und Tagline hat Eluze ja schon erklärt. Er hat sich nur einmal vertippt; beim Copyright muß es natürlich heißen: #first-page, nicht #not-first-page, sonst ist es kein Wunder, daß das Copyright auf der ersten Seite nicht kommt...

Ich habe das noch ins Coding mit eingebaut:
oddFooterMarkup enthält jetzt für den Fall #first-page den Inhalt von copyright, für die folgenden Seiten, also #not-first-page, den Inhalt von tagline.
Titel: Re: layout-Probleme
Beitrag von: harm6 am Montag, 8. April 2013, 23:30
Hallo Torsten,

Zitat von: Torsten
Wie würde Harm sagen: HTH

So würde er wohl sagen. :)

Ein paar Anmerkungen zum Code

Zitat von: Torsten
#(define-markup-command (place-folio layout props folio) (markup?)
   (let* (
;; `nn´ wird nicht benutzt. Kann man streichen
         (nn (ly:output-def-lookup layout 'page:page-number-string))
         (pageno (chain-assoc-get 'page:page-number props))
         (offs (assoc-get pageno folio-offset '(0 . 0)))
;; (markup folio) ist m.E. überflüssig. `folio´ reicht
         (m (interpret-markup layout props  (markup folio)))
         (x-ext (ly:stencil-extent m X))
         (y-ext (ly:stencil-extent m Y)))
   (interpret-markup layout props
     (markup
        #:box   ; nur zum Test - dann auskommentieren!
;; Der Trick with-dimensions in dieser Art und Weise zu benutzen ist klasse.
;; Er war mir nicht geläufig und ich habe eine gewisse Zeit gebraucht ihn
;; zu verstehen.
        #:with-dimensions x-ext y-ext
;; \line ist eigentlich auch überflüssig, da der einzige Vorteil \line zu benutzen
;; im Ausschluß von empty-stencil liegt
;; Das wird in der Regel aber auch von \fill-line und/oder \column geleistet bzw von #not-first-page etc
;; Ich würde es aber der Robustheit wegen auch drin lassen.
        #:line (#:translate offs folio)
       ))))

Gruß, :)
  Harm
Titel: Re: layout-Probleme
Beitrag von: Be-3 am Dienstag, 9. April 2013, 00:41
Hallo Harm,

ja, danke für die Hinweise, alles richtig.
Ich hatte nach dem Experimentieren wohl nicht gründlich genug aufgeräumt. :)

Auf den Trick mit with-dimensions bin ich gekommen, weil ich mich an der Arbeitsweise des guten, alten TeX orientiert habe. Da besteht eigentlich alles aus "Boxen", die man stapeln, schachteln, überlappen usw. kann - unter anderem ist es auch sehrl einfach möglich, Text aus Boxen "herausstehen" zu lassen.

Zum Beispiel gibt es in TeX einen Befehl \llap {...}, da ragt alles - ohne Platz zu beanspruchen! - nach links aus der aktuellen Box heraus. Diese Möglichkeiten wollte ich mit dem festen Vorgeben/"Überschreiben" der "Box"-Dimensionen in Kombination mit \translate nachahmen. Hat ja auch geklappt. :D

Viele Grüße
Torsten
Titel: Re: layout-Probleme
Beitrag von: eluze am Dienstag, 9. April 2013, 00:48
danke für die ausführlichen erklärungen und funktionen!

Zitat
Die Sache mit Copyright und Tagline hat Eluze ja schon erklärt. Er hat sich nur einmal vertippt; beim Copyright muß es natürlich heißen: #first-page, nicht #not-first-page, sonst ist es kein Wunder, daß das Copyright auf der ersten Seite nicht kommt...

nein, nicht vertippt, nur vergessen, das kopierte noch anzupassen… (das kommt schon mal vor)
sorry
Titel: Re: layout-Probleme
Beitrag von: Be-3 am Dienstag, 9. April 2013, 00:53
nein, nicht vertippt, nur vergessen, das kopierte noch anzupassen… (das kommt schon mal vor)
sorry

Hallo Eluze,

ist ja nicht schlimm, sowas kommt vor. Ich hatte es nur als Begründung dafür erwähnt, daß das Copyright auf der ersten Seite nicht kommt, weil Christa sich wunderte. :)

Jetzt aber Schluß für heute!
Torsten
Titel: Re: layout-Probleme
Beitrag von: chf am Dienstag, 9. April 2013, 16:28
Liebe Nothelfer,

habt herzlichen Dank!
Mein Verleger sieht meine Entwicklung und meint, wir seien nahe am Idealzustand...
Seine Ausgaben sind aber auch schön - ich konnte mich während der Leipziger Messe wieder davon überzeugen.
Natürlich finde ich meinen Notensatz am schönsten.
Spaß beiseite: interessant ist, dass ich am Ende oft sehe, dass ich gar nicht so weit von der Wahrheit entfernt bin (natürlich nicht bei den Seitenzahlen!)
Eluzes Versehen beim copyright habe ich immerhin auch bemerkt, aber da war noch ein Fehler bei mir, hinter den ich nicht kam.
Es ist gut, dass es euch gibt.

Herzliche Grüße - bis zur nächsten Frage
Christa
Titel: Re: layout-Probleme
Beitrag von: chf am Donnerstag, 30. Mai 2013, 20:34
Liebe Freunde,

auf dieses Problem muss ich noch einmal zurückkommen...
Und da ich nicht weiß, wo ich ansetzen soll, weil ich die Fehlermeldung nicht kapiere, hänge ich die gesamte Datei an.

Ein Problem habe ich auch mit rechts (oddHeader) und links  (evenHeader) Rechts funktioniert...
Vollkommenheit erreicht man halt nicht so leicht.

LilyPond 2.16.1
[SchiefKlarQuinPart  (Kopie).ly] startet (Vorschau-Modus)...
»SchiefKlarQuinPart  (Kopie).ly« wird verarbeitet
Analysieren...
SchiefKlarQuinPart  (Kopie).ly:14:1: Fehler: GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck
#
 (define-markup-command (place-folio layout props folio)
Interpretation der Musik...
Interpretation der Musik...[8][16][24]
Vorverarbeitung der grafischen Elemente...
Interpretation der Musik...
Interpretation der Musik...[8][16][24][32][40][48][56][64]
Vorverarbeitung der grafischen Elemente...
Interpretation der Musik...
Programmierfehler: Impossible or ambiguous (de)crescendo in MIDI.
Fortsetzung, die Daumen drücken
Programmierfehler: Impossible or ambiguous (de)crescendo in MIDI.
Fortsetzung, die Daumen drücken
Programmierfehler: Impossible or ambiguous (de)crescendo in MIDI.
Fortsetzung, die Daumen drücken
Programmierfehler: Impossible or ambiguous (de)crescendo in MIDI.
Fortsetzung, die Daumen drücken
Programmierfehler: Impossible or ambiguous (de)crescendo in MIDI.
Fortsetzung, die Daumen drücken
Interpretation der Musik...[8][16][24][32][40][48][56][64][72][72]
Vorverarbeitung der grafischen Elemente...
MIDI-Ausgabe nach »SchiefKlarQuinPart  (Kopie).midi«...
MIDI-Ausgabe nach »SchiefKlarQuinPart  (Kopie)-1.midi«...
MIDI-Ausgabe nach »SchiefKlarQuinPart  (Kopie)-2.midi«...
Musik wird auf 7 Seiten angepasst...
Systeme erstellen...
Layout nach »SchiefKlarQuinPart  (Kopie).ps« ausgeben...
Konvertierung nach »./SchiefKlarQuinPart  (Kopie).pdf«...
Wrong type (expecting pair): ()
schwerer Fehler: gescheiterte Dateien: "SchiefKlarQuinPart  (Kopie).ly"
LilyPond [SchiefKlarQuinPart  (Kopie).ly] wurde mit dem Return-Code 1 beendet.

Gruß
Christa


Titel: Re: layout-Probleme
Beitrag von: Be-3 am Donnerstag, 30. Mai 2013, 21:28
Hallo Christa,

die von Dir rot markierte Fehlermeldung kommt deshalb, weil der Markup-Befehl place-folio nicht richtig definiert wurde.

Als Variable wird folio übergeben, aber die Typdeklaration fehlt.

  #(define-markup-command (place-folio layout props folio) (markup?)

Abgesehen davon kommt dann aber (nach diversen Variablendeklarationen (der (let*-Teil) nichts mehr - die Markup-Funktion liefert also nichts zurück.
Was aber auch nicht schlimm ist, weil sie nie benutzt wird.

So gesehen könnte man die komplette Befehlsdefinition von place-folio auch ganz weglassen. :)

Und was funktioniert an Deinen oddHeader und evenHeader-Definitionen nicht?
Sie tun genau das, was darinsteht, nämlich die Seitenzahl bei ungeraden Seiten rechts und bei geraden Seiten links zu drucken, mit Ausnahme der ersten Seite - die erhält keine Seitennummer.
Zweimal \null ist überflüssig, schadet aber nicht.
Im Grunde hättest Du auch die Default-Definitionen lassen können - die tun auch nichts anderes.

Viele Grüße
Torsten
Titel: Re: layout-Probleme
Beitrag von: chf am Freitag, 31. Mai 2013, 11:59
Mein Gott, jetzt hat sie's!!!

Lieber Torsten,
jetzt habe ich deinen code mit frischerem Kopf in x Varianten durchgespielt und endlich gemerkt, was wohin muss.
Danke nochmals!

Gruß
Christa