On Fri, 20 Mar 2020 at 15:22, David Wright <[email protected]>
wrote:
> On Fri 20 Mar 2020 at 12:50:23 (+0100), Peter Crighton wrote:
>
> > So I need to be flexible with what paper variables I choose for each
> book.
> > I can include just those that I need, but I still need to access a
> > combination of them. That’s why chaining them all together does not work.
> > \paperCategoryOne in one case would need to include \paperSizeOne, but in
> > another case \paperSizeTwo. \paperGlobal needs to be included always,
> which
> > is no problem; I can just include that into all the \paperSize variables,
> > for example.
> >
> > So far, all the \paperX variables are \paper blocks in themselves.
> Ideally,
> > there would be a way to just inject the literal content of a variable
> > inside a paper block, so this would work:
> >
> > someVariable = {
> > indent = 0
> > }
> > \paper {
> > \someVariable
> > }
> >
> > But I don’t know if that’s possible. Maybe all it needs is some other
> > syntax around the content of someVariable, other than curly braces, or it
> > is possible with some Scheme magic, but I’m out of ideas.
>
> To tackle a problem like this, I'd start from the source file
> …/lilypond/usr/share/lilypond/current/ly/paper-defaults-init.ly
> and build a generalised \paper file with all the variables you use
> within it. All the literals (like 0, 10, 30, …) would be in a form
> suitable for substitution by whatever method you choose.
>
> For a shell "here-document", that would be shell variables, like
> $Indent, $Linewidth, etc. If substitution was done with a stream
> editor, or a scripting language like Python, you could choose
> any strings that don't otherwise occur, such as %%%INDENT%%%, etc.
>
> So you perform the substitution by any means you like, producing
> a single, ephemeral paper.ily file which you include in your LP
> source file, compile with LP, and throw away.
>
Sounds like a good approach. I was meaning to brush up on my Python anyway.
> > With categories being different types of scores I want to do for the same
> > song (namely music sheets with all the music, including notes, chords and
> > lyrics; chord sheets with only chord symbols; and lyric sheets with just
> > lyrics and chords).
>
> As you're now running LP with a script, your script(s) could
> automatically build several paper.ly files in turn, and rerun
> LP to produce different formats.
>
> You can extend this in any way you like, dealing with other parts
> of the LP source that might need to be altered. For example, I have
> a script that typesets psalms, and it modifies the source files of
> the Anglican chants (which always contain a \transpose f f line),
> transposing them into mutually compatible keys before compiling them
> into a document for that particular church service.
>
I haven’t run LilyPond with scripts before. If there’s any documentation or
code examples I should look at, I’d appreciate being pointed in the right
direction.
> IOW, use a scripting language to script, and LP to typeset music.
>
Sound advice.
Thanks,
Peter
--
Peter Crighton | Musician & Music Engraver based in Mainz, Germany
http://www.petercrighton.de