Hallo juppes,
mir ist immer ein wenig unbehaglich, wenn ich in die internen Dateien eingreife. Falls ich, wie hier, nur eine Zeile hinzufüge, die nach einem Update auch noch verloren geht, so befürchte ich, daß ich nach einiger Zeit nicht mehr weiß, was ich getan habe. Anders empfinde ich, wenn ich eine ganze Datei einfüge, denn davon kann ich mir eine Sicherungskopie erstellen und später auch nachvollziehen was ich getan habe.
Insofern habe ich nach einem Weg gesucht, das Ziel eines neuen Papierformats auch mit anderen Mitteln zu erreichen.
Folgendes scheint zu funktionieren. Allerdings ist 2.14.1 erforderlich.
Ich weiß, das Du noch 2.12.2 verwendest, aber sobald Du ein update machst wird es klappen
\version "2.14.1"
#(define paper-aList
'(
("a4" . (cons (* 210 mm) (* 297 mm)))
("henle" . (cons (* 236 mm) (* 309 mm)))
))
#(define (setPaperDimensions m w h)
(let*
((paper-default (eval-carefully
(assoc-get
(ly:get-option 'paper-size)
paper-aList #f #t )
m
(cons w h)))
(scaleable-values `((("left-margin" . ,w) . preserve)
(("right-margin" . ,w) . preserve)
(("inner-margin" . ,w) . preserve)
(("outer-margin" . ,w) . preserve)
(("binding-offset" . ,w) . '())
(("top-margin" . ,h) . '())
(("bottom-margin" . ,h) . '())
(("indent" . ,w) . '())
(("short-indent" . ,w) . '())))
(scaled-values
(map
(lambda (entry)
(let ((entry-symbol
(string->symbol
(string-append (caar entry) "-default")))
(orientation (cdar entry)))
(if paper-default
(cons (if (eq? (cdr entry) 'preserve)
(string-append (caar entry) "-default-scaled")
(caar entry))
(round (* orientation
(/ (eval-carefully entry-symbol m 0)
(if (= orientation w)
(car paper-default)
(cdr paper-default))))))
entry)))
scaleable-values)))
(module-define! m 'paper-width w)
(module-define! m 'paper-height h)
(module-remove! m 'line-width)
(for-each
(lambda (value)
(let ((value-symbol (string->symbol (car value)))
(number (cdr value)))
(module-define! m value-symbol number)))
scaled-values)))
#(define (internalSetPaperSize module name landscape?)
(define (swap x)
(cons (cdr x) (car x)))
(let* ((entry (assoc-get name paper-aList))
(is-paper? (module-defined? module 'is-paper))
(mm (eval 'mm module)))
(cond
((not is-paper?)
(ly:warning (_ "This is not a \\layout {} object, ~S") module))
(entry
(set! entry (eval entry module))
(if landscape?
(set! entry (swap entry)))
(setPaperDimensions module (car entry) (cdr entry))
(module-define! module 'papersizename name)
(module-define! module 'landscape
(if landscape? #t #f)))
(else
(ly:warning (_ "Unknown paper size: ~a") name)))))
#(define (setPaperSize name . rest)
(if (module-defined? (current-module) 'is-paper)
(internalSetPaperSize (current-module) name
(memq 'landscape rest))
(ly:warning (_ "Must use #(setPaperSize .. ) within \\paper { ... }"))))
\paper {
#(setPaperSize "henle")
%#(setPaperSize "henle" 'landscape)
%#(setPaperSize "a4")
%#(setPaperSize "a4" 'landscape)
}
\relative c' {
\override Score.Stem #'details = #'(
(lengths 4.5 3.5 3.5 4.25 5.0 6.0)
;(beamed-lengths 3.26 3.5 3.6)
(beamed-minimum-free-lengths 2 1.5 1.25)
;(beamed-extreme-minimum-free-lengths 2.0 1.25)
;(stem-shorten 1.0 0.5)
)
<e, b' e gis d' e>2.:32 c''4:32
c8:16 d:16 e:32 f:32 g2
g1:32
\repeat tremolo 2 c,16 \repeat tremolo 2 b16 \repeat tremolo 4 a32 \repeat tremolo 4 g f2
c''8:32 b:32 a:32 g:32
\revert Score.Stem #'details
g2
\once\override StemTremolo #'Y-offset = #'-1
g1:32
}
Anmerkungen:
Alle Definitionen entstammen paper.scm und sind lediglich umbenannt, um die default-Abläufe nicht zu stören.
In der paper-aList muß neben dem neuen Format auch "a4" definiert sein, denn es wird immer mal wieder auf das default-Format verwiesen. Zusätzliche Formate könnten natürlich auch integriert werden.
Alle Formate aus paper-aList sind auch in der landscape-Variante möglich.
Diese Definitionen kann man jetzt auch in eine eigene Datei packen und \include ... benutzen.
Anwendung:
Die Angabe des Formats muß in \paper {..} mittels #(setPaperSize "...") erfolgen.
Gruß,
Harm