Я печатал богослужебные песнопения с декламацией нот. Используя lilypond версии 2.18.2, я получаю то, что хочу, но когда я перешел на 2.20.0, в некоторых случаях между слогами слишком много пробелов . Я пытался возиться с несколькими значениями переменных SpacingSpanner, но не могу получить то поведение, которое хочу. Похоже, что-то изменилось по умолчанию или была введена новая функция, но я не смог отследить, где/что это.
Вот MWE кода, который получается по-разному, в зависимости от того, набран ли он с помощью lilypond 2.18.2 или 2.20.0:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.18.2"
\language "english"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\header
{
tagline = ##f
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\layout
{
ragged-right = ##t
\context
{
\Score
\remove "Bar_engraver"
\remove "Bar_number_engraver"
\override SpacingSpanner #'spacing-increment = #2.0
timing = ##f
}
\context
{
\Staff
\remove "Clef_engraver"
\remove "Time_signature_engraver"
\remove "Stem_engraver"
\remove "Beam_engraver"
\hide Flag
\override StaffSymbol.line-count = #2
\override StaffSymbol.line-positions = #'( 0 -2 )
}
\context
{
\Voice
\override Stem #'length = #0
}
\context
{
\Lyrics
\override VerticalAxisGroup.staff-affinity = #UP
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'(
(basic-distance . 0)
(minimum-distance . 0)
(padding . 1)
(stretchability . 0)
)
\override LyricText #'font-size = #0
\override LyricText #'self-alignment-X = #CENTER
\override LyricHyphen #'minimum-distance = #0.0
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% music macros
longnote =
{
\once \override NoteHead #'stencil = #ly:text-interface::print
\once \override NoteHead #'text = #(markup #:concat(
#:musicglyph "noteheads.s2la"
#:hspace -0.5
#:musicglyph "noteheads.s2la"
#:hspace -0.1
#:musicglyph "noteheads.s2la"))
}
divisioMajor =
{
\bar "|"
}
divisioMaxima =
{
\bar "|"
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% lyric macros
recite =
{
\once \override LyricText #'self-alignment-X = #LEFT
}
#(define-markup-command (singer layout props text) (markup?)
(interpret-markup layout props
#{
\markup { \raise #0.5 \fontsize#-1 \italic #text }
#}
)
)
officiant = \markup { \singer "Officiant" }
people = \markup { \singer "People" }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
melodyLine = \transpose c c
{
\relative c'
{
\clef treble
\key f\major
\stemDown
f4^\officiant g
\longnote a16
bf4 g f2*1/2
\divisioMajor
\break
f4^\people g a g f g2*1/2
\divisioMaxima
\break
f4^\officiant g
\longnote a16
bf4 g f2*1/2
\divisioMajor
\break
f4^\people g a g f g2*1/2
\divisioMaxima
\break
f4^\officiant g
\longnote a4
bf4 g f2*1/2
\divisioMajor
\break
f4^\people g a g f g2*1/2
\divisioMaxima
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
verse = \lyricmode
{
That this \recite "evening may be holy, good," and peace -- ful,
We en -- treat you, O God.
That your \recite "holy angels may lead us in paths of peace" and good -- will,
We en -- treat you, O God.
That we \recite "may be pardoned and forgiven for our sins and" of -- fen -- ses,
We en -- treat you, O God.
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paper
{
indent = 0\pt
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\score
{
\new Staff
<<
\new Voice = melody { \melodyLine }
\new Lyrics \lyricsto melody \verse
>>
\layout{}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Вывод с lilypond 2.20.0:
Добро пожаловать в Music.SX! Честно говоря, виновника я так и не нашел. Однако следующий код содержит предложение, как решить проблему.
Я думаю, что возможная причина такого поведения заключается в том, что вы установили длину длинных заметок на 16
(или 4
). Хотя вы установили , похоже timing = #f
, это оказывает некоторое влияние на следующие примечания. Следовательно, я изменил все длинные ноты на \breve
s. Кроме того, я заключил длинные ноты в \cadenzaOff
и \candenzaOn
, что должно было поместить их в два отдельных такта, использующих собственный контекст интервалов. Дабы упростить ввод, я переделал ваш \longnote
макрос в музыкальную функцию.
Одним из недостатков этого подхода является то, что будут появляться тактовые линии. Чтобы решить эту проблему, я сделал тактовые линии скрытыми в макросе \longnote
. Поскольку вы хотите, чтобы тактовые черты не были скрыты в конце строки, я поместил \undo
s в соответствующие макросы \divisioMajor
и .divisioMaxima
Результат не совсем тот, что у вас был с LilyPond 2.18, но я думаю, что он близок.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.20.0"
\language "english"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\header
{
tagline = ##f
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\layout
{
ragged-right = ##t
\context
{
\Score
\remove "Bar_engraver"
\remove "Bar_number_engraver"
\override SpacingSpanner #'spacing-increment = #2.0
timing = ##f
}
\context
{
\Staff
\remove "Clef_engraver"
\remove "Time_signature_engraver"
\remove "Stem_engraver"
\remove "Beam_engraver"
\hide Flag
\override StaffSymbol.line-count = #2
\override StaffSymbol.line-positions = #'( 0 -2 )
}
\context
{
\Voice
\override Stem #'length = #0
}
\context
{
\Lyrics
\override VerticalAxisGroup.staff-affinity = #UP
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'(
(basic-distance . 0)
(minimum-distance . 0)
(padding . 1)
(stretchability . 0)
)
\override LyricText #'font-size = #0
\override LyricText #'self-alignment-X = #CENTER
\override LyricHyphen #'minimum-distance = #0.0
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% music macros
longnote = #(define-music-function (note) (ly:music?)
#{
\hide Staff.BarLine
\cadenzaOff
\once \override NoteHead #'stencil = #ly:text-interface::print
\once \override NoteHead #'text = #(markup #:concat(
#:musicglyph "noteheads.s2la"
#:hspace -0.5
#:musicglyph "noteheads.s2la"
#:hspace -0.1
#:musicglyph "noteheads.s2la"))
#note
\cadenzaOn
#})
divisioMajor =
{
\undo \hide Staff.BarLine
\bar "|"
}
divisioMaxima =
{
\undo \hide Staff.BarLine
\bar "|"
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% lyric macros
recite =
{
\once \override LyricText #'self-alignment-X = #LEFT
}
#(define-markup-command (singer layout props text) (markup?)
(interpret-markup layout props
#{
\markup { \raise #0.5 \fontsize#-1 \italic #text }
#}
)
)
officiant = \markup { \singer "Officiant" }
people = \markup { \singer "People" }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
melodyLine = \transpose c c
{
\relative c'
{
\clef treble
\key f\major
\stemDown
f4^\officiant g
\longnote a\breve
bf4 g f2*1/2
\divisioMajor
\break
f4^\people g a g f g2*1/2
\divisioMaxima
\break
f4^\officiant g
\longnote a\breve
bf4 g f2*1/2
\divisioMajor
\break
f4^\people g a g f g2*1/2
\divisioMaxima
\break
f4^\officiant g
\longnote a\breve
bf4 g f2*1/2
\divisioMajor
\break
f4^\people g a g f g2*1/2
\divisioMaxima
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
verse = \lyricmode
{
That this \recite "evening may be holy, good," and peace -- ful,
We en -- treat you, O God.
That your \recite "holy angels may lead us in paths of peace" and good -- will,
We en -- treat you, O God.
That we \recite "may be pardoned and forgiven for our sins and" of -- fen -- ses,
We en -- treat you, O God.
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paper
{
indent = 0\pt
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\score
{
\new Staff
<<
\new Voice = melody { \melodyLine }
\new Lyrics \lyricsto melody \verse
>>
%\layout{}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Результат:
кснортум