lilypond-user
[Top][All Lists]
Advanced

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

Re: Lyrics and Punctuations Alignment Issue‏


From: David Nalesnik
Subject: Re: Lyrics and Punctuations Alignment Issue‏
Date: Thu, 2 May 2013 13:22:22 -0500

Hi Jun,


On Wed, May 1, 2013 at 10:28 PM, Jun Wang <address@hidden> wrote:
Hi 
I have a lyrics alignment issue when lyrics contains punctuations.

First Let me take the example from the reference manual,  see the " I am so lonely..." piece below.

\relative c' { \time 3/4 e4 e4. e8 d4 e d c2. }
\addlyrics { "\"I" am so lone -- "ly,\"" said she }

Note because ("I) is treated as a whole syllable, It makes single character (I) not appears in the middle. 
What I want is to make "I" in the middle position under the note. 

Second example, see attached pdf, There are lot of punctuations in the music, the alignment issue becomes very visible.

Is it possible to explicitly define punctuations in the lilypond file?  Or Do I have to tweak each syllable manually?

It's possible to write a Scheme function to accommodate certain characters at the beginning and ending of words.  The following function creates an override of 'X-offset which hopefully gives you what you want.   You can modify the list of punctuation characters recognized by modifying the variables called `punct-R' and `punct-L'.  I added a space character because I notice in your .pdf that you add one before commas, exclamation points, etc.

Anyway, hope this is helpful!

-David


\version "2.16"

#(define (align grob)
  (let* ((stil (ly:grob-property grob 'stencil))
         (stil-X (ly:stencil-extent stil X))
         (text (ly:grob-property grob 'text))
         (punct (char-set #\, #\" #\; #\! #\. #\space))
         ; determine X-extent of text stencil without punctuation at end
         (text-L (string-trim-right text punct))
         (text-L-stil (grob-interpret-markup grob text-L))
         (text-L-stil-X (ly:stencil-extent text-L-stil X))
         (displacement (/ (- (cdr text-L-stil-X) (cdr stil-X)) 2))
         ; determine X-extent of text stencil without punctuation at start
         (text-R (string-trim text punct))
         (text-R-stil (grob-interpret-markup grob text-R))
         (text-R-stil-X (ly:stencil-extent text-R-stil X))
         (displacement (+ displacement
                          (/ (- (cdr stil-X) (cdr text-R-stil-X)) 2))))

     (- (ly:self-alignment-interface::aligned-on-x-parent grob)
        displacement)))

\paper {
  ragged-right = ##f
}

\relative c' {
  \time 3/4 e4 e4. e8
  d4 e d c2.
}

\addlyrics {
  \override LyricText #'X-offset = #align
  "\"\"\"I!!!!!!!!!!!!" ,,,am,,,,,,,,,, !!!!!!!!!!!so
  lone -- "ly!!!!!,\"" said "she!!!!!!!!!!!!!!!\""
}

reply via email to

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