+ (let*
+ ;; page layout - what to do with (printer specific!) margin settings?
+ ((paper-default (eval-carefully
+ (assoc-get
+ (ly:get-option 'paper-size)
+ paper-alist
+ #f
+ #t)
+ m
+ (cons w h)))
+ ;; Horizontal margins, marked with 'preserve, are stored
+ ;; in renamed variables because they must not be overwritten.
+ ;; Output_def::normalize () needs to know
+ ;; whether the user set the value or not.
+ (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)))
+