lilypond-user
[Top][All Lists]
Advanced

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

Re: Align composer name tag


From: Nicolas Sceaux
Subject: Re: Align composer name tag
Date: Sun, 14 Nov 2004 12:09:53 +0100
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Jefferson dos Santos Felix <address@hidden> writes:

> I try to put the composer's year of birth and death below his name,
> right-aligned, but I can't do it.
> See the attempt below:
>
> \version "2.4.1"
> \header
> {
>       title = "A Title Song"
>       composer = \markup \column <{"Composer Name"}  {\right-align 
> "(1900-1950)"}>
>       poet = "J.S.F."
> }
> \score {c'}
>
> Is anything wrong?
>
> Thaks,

I don't know if this is a good advice as it is a bit extreme, but,
supposing that you can write Scheme code:

You can define your own titling style if you want.
Just write a `my-book-title' function (see `default-book-title' in
scm/titling.scm for inspiration) and register it in the \layout
block. You can do the same for score titling (see
`default-score-title').

\layout {
  ...
  #(define-public book-title my-book-title)
  #(define-public score-title my-score-title)
  ...
}


For instance, the following functions define the titles of an
opera. Note that it uses custom keywords in \header blocks, such as
act, scene, etc. (sorry for the very long lines.)

#(defmacro with-keyword-accessor (scopes . body)
   "Locally define two functions, `get' and `has', for
accessing keyword in `scopes'."
   (let ((gscopes (gensym "scopes")))
     `(let ((,gscopes scopes))
        (define (get sym)
          (let ((x (ly:modules-lookup ,gscopes sym)))
            (if (markup? x) x "")))
        (define (has sym)
          (markup? (ly:modules-lookup ,gscopes sym)))
        ,@body)))
#(defmacro when-keyword (keyword . body)
   (let ((gmarkup (gensym "markup")))
     `(if (has ,keyword)
          (let ((,gmarkup (let ((it (get ,keyword)))
                            ,@body)))
            (list ,gmarkup))
          '())))

#(define-public (opera-book-title layout scopes)
   "Generate book title from header strings.
Keywords are title, subtitle, composer, librettist, edition, opus, date"
   (with-keyword-accessor 
    scopes
    (let ((props (page-properties layout)))
      (interpret-markup 
       layout props
       (markup #:override '(baseline-skip . 4) 
               (make-column-markup (append (when-keyword 'composer
                                                         (markup #:fill-line 
(#:large #:bigger #:bigger #:bigger 
                                                                                
      #:bigger #:bigger #:bigger #:italic it)
                                                                 #:column ("" 
"" "")))
                                           (when-keyword 'title
                                                         (markup #:fill-line 
(#:huge #:bigger #:bigger #:bigger 
                                                                                
     #:bigger #:bigger #:bigger #:bigger #:bigger #:bold it)
                                                                 #:column ("" 
"")))
                                           (when-keyword 'subtitle
                                                         (markup #:fill-line 
(#:large #:bigger #:bigger #:bigger #:bigger #:bigger #:bigger #:bold it)
                                                                 #:column ("" 
"" "")))
                                           (when-keyword 'edition
                                                         (markup #:fill-line 
(#:large #:bigger #:bigger #:left-align it)
                                                                 #:column ("" 
"" "" "")))
                                           ;; TODO: other keywords.
                                           )))))))

#(define-public (opera-score-title layout scopes)
   "Generate score title from header strings.
Keywords are act, scene, scenedescr, piece."
   (with-keyword-accessor 
    scopes
    (let ((props (page-properties layout)))
      (interpret-markup 
       layout props
       (markup #:override '(baseline-skip . 4) 
               (make-column-markup (append (when-keyword 'act
                                                         (markup #:fill-line 
(#:huge #:bigger #:bigger #:bigger #:bigger #:bold it)
                                                                 #:column ("" 
"" "")))
                                           (when-keyword 'scene
                                                         (markup #:fill-line 
(#:large #:bigger it)))
                                           (when-keyword 'scenedescr
                                                         (markup #:fill-line 
(#:left-align it)))
                                           (when-keyword 'piece
                                                         (markup #:column ("" 
#:fill-line (#:large #:bigger it) ""))))))))))

Then it can be used like that:

\layout {
  #(define-public book-title opera-book-title)
  #(define-public score-title opera-score-title)
}

\header {
    title = "GIULIO CESARE"
    subtitle = "in Egitto"
    composer = "George Frideric Haendel"
    edition = \markup \center-align < 
        { From the Deutsche Händelgesellschaft Edition }
        { Edited by }
        { Frideric Chrysander }>
    tagline = "LilyPond, mutopia, public domain, etc."
    copyright = "Public Domain"
}

...

\score {
    \header {
        act="ATTO PRIMO"
        scene="SCENA I."
        scenedescr=\markup \center-align < 
            { Campagna d'Egitto con antico ponte sopra un ramo del Nilo. }
            { \caps {Giulio Cesare} e \caps Curio che passano il ponte con 
seguito. } >
        piece = "CORO."
    }

   ...
}


nicolas





reply via email to

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