lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Choose paper size and layout with command line options?


From: M Sun
Subject: Choose paper size and layout with command line options?
Date: Sun, 7 Aug 2022 13:51:41 -0700

Hi all,

I’m writing a sheet targeting two different paper sizes, with some
layout adjustments. My goal is to be able to specify (maybe
indirectly) the paper size in command line, without changing the
lilypond file itself. My initial set up was this:

  \version "2.23.2"
  #(set! paper-alist
    (cons '("kobo" . (cons (* 15.7 cm) (* 20.9 cm))) paper-alist))
  #(set-global-staff-size 18)
  \paper {
    top-margin = 0
    bottom-margin = 0
    left-margin = 5
    right-margin = 0
  }
  #(set-default-paper-size "kobo")
  \score { \new Staff {a b c}}

As you can see this is a cramped layout for a small paper size. Now I
also want a version with a normal layout on us-letter size, so I
removed the set-global-staff-size line, and the paper block, and
changed the paper size to “letter”. The file became this:

  \version "2.23.2"
  #(set! paper-alist
    (cons '("kobo" . (cons (* 15.7 cm) (* 20.9 cm))) paper-alist))
  #(set-default-paper-size "letter")
  \score { \new Staff {a b c}}

These worked. But like I mentioned my goal is to be able to switch
between these two setups in command line, without changing the file.
My idea was to set a variable in the command line using “-e”, and in
the file choose the layout and paper size based on the variable.
Here’s my code:

  \version "2.23.2"

  #(define (configOutput spec)
    (cond
     ((eqv? spec 'letter) (set-default-paper-size "letter"))
     ((eqv? spec 'kobo)
      (set! paper-alist
       (cons '("kobo" . (cons (* 15.7 cm) (* 20.9 cm))) paper-alist))
      (set-global-staff-size 18)
      #{ \paper {
      top-margin = 0
      bottom-margin = 0
      left-margin = 5
      right-margin = 0 }
      #}
      (set-default-paper-size "kobo"))
     (default nil)))

  #(use-modules (guile-user))
  #(configOutput output-spec)

  \score { \new Staff {a b c}}

Then in the shell I ran a command like this:

  lilypond -e "(define-public output-spec 'kobo)" test.ly

This produced the output with the “kobo” paper size. Or I could change
that “kobo” to “letter” and it’d produce with the “letter” paper size.

This *almost* worked, except that the \paper block didn’t take effect.
This is where I’m lost. How should I make this work?

--
MetroWind



reply via email to

[Prev in Thread] Current Thread [Next in Thread]