Re: Condensing single-bar rests into a multi-measure rest
Am 04.01.2015 um 02:13 schrieb Kieren MacMillan: Hi Urs, I'm not sure about that because that wasn't the problem at hand. My problem was that I have to merge multimeasure rests that were written as e.g. R1*4 {} R1*6 The empty expression is a music function that can return a \break (- no rest merging) or an empty expression. The linked function is able to merge consecutive rests when they are of the same type. As I didn't look too close into the thread you linked I don't know if my problem is related to yours, but I suspect it's rather something different. My problem was \version 2.19.15 \new Staff \with { \compressFullBarRests } { R1*8 } { \repeat unfold 8 {s1} } Keith’s \mergeSkips deals with that, but (if I understand correctly) not your empty-expression problem. My function also merges skips but it fails on the \repeat construct. So R1 R1 s1 s1 gives the attached result, but when you use \repeat multiple empty bars are printed. This is because \repeat unfold is a completely different representation than explicitly repeated music. I think it could be included if that's the issue, but I assume it's over my head so far. Principally it's a quite simple thing (just adding another conditional and taking the expression apart) but I don't have experience with this. See the attached -- now self-contained -- file for some examples. Urs Cheers, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info \version 2.16.0 % Taken from improved version from % http://lilypond.1069038.n5.nabble.com/new-snippet-combine-multimeasure-rests-td144688.html % Improved by Urs Liska to also merge over empty music expressions #(define (add-durations dur1 dur2) (let* ((len1 (ly:duration-length dur1)) (len2 (ly:duration-length dur2)) (mult (ly:moment-div (ly:moment-add len1 len2) len1))) (ly:make-duration (ly:duration-log dur1) (ly:duration-dot-count dur1) (* (ly:duration-scale dur1) (ly:moment-main mult) #(define (combinable-rest? rest) (and (ly:music? rest) (or (eq? 'MultiMeasureRestMusic (ly:music-property rest 'name)) (eq? 'SkipEvent (ly:music-property rest 'name))) (null? (ly:music-property rest 'articulations #(define (combine-rests rest1 rest2) ;; create one rest/skip with the sum of both lengths (make-music (ly:music-property rest1 'name) 'duration (add-durations (ly:music-property rest1 'duration) (ly:music-property rest2 'duration)) 'articulations '())) #(define (consolidator curr rest) ;; determine ir we have consecutive MultimeasureRests or skips (if (and (combinable-rest? curr) (not (null? rest))) ;; - we have a combinable rest left and 'something' right (if (and (combinable-rest? (car rest)) (eq? (ly:music-property curr 'name) (ly:music-property (car rest) 'name))) ;; - we also have a combinable rest right and both are the same type, ;; recurse by first merging rests and then looking for the next item (consolidator (combine-rests curr (car rest)) (cdr rest)) ;; - right is either no combinable rest or one of different type. (if (or (eq? 'BarCheck (ly:music-property (car rest) 'name)) (eq? 'Music (ly:music-property (car rest) 'name))) ;; - right is one of the 'skippable' types, ;; so recurse using left and the next one to the right (consolidator curr (cdr rest)) ;; just return left followed by righ (cons curr rest))) ;; - no combinable rest to the left ; But what happens when rest *is* null? (cons curr rest))) #(define (accumulate-result output input) ;; recurse over the elements of 'music', appending consolidated ;; items (i.e. the item or a merged rest) to 'output' (if (null? input) output (let ((done output) (curr (car input)) (rest (cdr input))) (if (null? rest) (append done (list curr)) (let ((prev (consolidator curr rest))) (accumulate-result (append done (list (car prev))) (cdr prev))) #(define (condense music) ;; recurse over the music list and condense consecutive rests (let* ((output music) (elts (ly:music-property output 'elements)) (elt (ly:music-property output 'element))) (if (pair? elts) (ly:music-set-property! output 'elements (map condense (accumulate-result '() elts (if (ly:music? elt) (ly:music-set-property! output 'element (condense elt))) output)) combineMMRests = #(define-music-function (parser location music) (ly:music?) ;; process the 'music' argument and merge consecutive MultimeasureRests (condense music)) \combineMMRests { \compressFullBarRests c''1 \repeat
Re: Condensing single-bar rests into a multi-measure rest
Am 4. Januar 2015 01:16:23 MEZ, schrieb David Sumbler da...@aeolia.co.uk: From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Condensing single-bar rests into a multi-measure rest Date: Sat, 03 Jan 2015 18:59:17 +0100 Am 03.01.2015 um 18:45 schrieb David Sumbler: From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Condensing single-bar rests into a multi-measure rest Date: Sat, 03 Jan 2015 16:45:27 +0100 Am 03.01.2015 um 16:36 schrieb David Sumbler: I have now finished setting the saxophone quartet, which is the first substantial multi-instrument piece I have attempted with Lilypond. I am very pleased with the result, and I am now at the stage of tweaking the appearance of the output. Searching in the Lilypond documentation, one problem I have not been able to find a solution to is this: in the piece there are a few places where one instrument is silent for several consecutive bars. In the score these obviously appear as single bar rests, but in the relevant instrumental part I should like them to appear as a multi-measure rest. The problem may be that I have used \parallelMusic for the whole score: this seems an obvious way of doing things for a piece such as this with a small number of instruments. It has certainly been far easier to find my way around the file than in my previous Lilypond efforts (e.g. a piece for flute and piano), even though they were a lot shorter than this one. But looking at the documentation, I can only see multi-measure rests appearing if they are entered as multi-measure quantities - e.g. R1*6. If this is true, then the only way I can see to get the result I want, would be to deconstruct my whole file and reassemble it as 4 separate sections, one for each instrument. This in itself will be a tedious chore, but it also means the resulting file(s) will be much less easily navigable when I make further additions and modifications. Is there any way to get the result I want whilst still keeping the \parallelMusic layout? LilyPond by default only interprets single entities as combinable rests (i.e. R1*6), while consecutive rests (e.g. R1 R1) are separated by \compressFullBarRests. I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily I'm not sure if it is really straightforward to use in other contexts but I suspect you should be able to use it. You have to remove the conditional expression in the last function \combineMMRests (because that's project specific), but I expect the file to work smoothly once you've done that. To use it include the file and surround your music by \combineMMRests \yourMusic. HTH Urs Thanks for that. I have tried the file, and although it does not produce any errors, it does not seem to change the output at all. So it may be that I am doing something wrong. Here is what I have done. Firstly, the final function now reads: combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music) music) I'm not entirely sure I have got this right! No, that's not right. The result of a Scheme function is the result of the last expression, and that is music in your case, so you're returning the unaltered music argument. I think (without testing) that combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music)) should be right. Secondly, in the section of my main file which produces a part for a instrument, I have: \score { \combineMMRests { \myMusic } \layout { } } Is this correct? That looks correct, although you don't need the curly braces around \myMusic in this case. However, I don't know if parallelMusic is interfering here additionally. HTH Urs I have now corrected my version of the combineMMRests function, but unfortunately it still leaves my output unaffected. I can see how something like this could work - unfortunately my understanding at this stage of Scheme and Lilypond internals is insufficient for me to see where the problem might be or to write something similar from scratch. I can't see why \parallelMusic should cause a problem: presumably it just returns exactly what the individual parts would produce if they were not interleaved in the parallelMusic structure. David But you do have the \compressFullBarRests somewhere? Urs ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
On Sun, 2015-01-04 at 09:26 +0100, Urs Liska wrote: I have now corrected my version of the combineMMRests function, but unfortunately it still leaves my output unaffected. I can see how something like this could work - unfortunately my understanding at this stage of Scheme and Lilypond internals is insufficient for me to see where the problem might be or to write something similar from scratch. I can't see why \parallelMusic should cause a problem: presumably it just returns exactly what the individual parts would produce if they were not interleaved in the parallelMusic structure. David But you do have the \compressFullBarRests somewhere? Urs Oops! No, I hadn't, and now that I have included it things appear to work perfectly. I'm delighted to see that I can simply include \compressFullBarRests in each individual instrument's Staff without it adversely affecting the output of the score, which obviously needs the rests to be shown individually (unless all instruments are 'tacet' for 2 or more bars). Sincere thanks for all your help. David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Condensing single-bar rests into a multi-measure rest Date: Sat, 03 Jan 2015 16:45:27 +0100 Am 03.01.2015 um 16:36 schrieb David Sumbler: I have now finished setting the saxophone quartet, which is the first substantial multi-instrument piece I have attempted with Lilypond. I am very pleased with the result, and I am now at the stage of tweaking the appearance of the output. Searching in the Lilypond documentation, one problem I have not been able to find a solution to is this: in the piece there are a few places where one instrument is silent for several consecutive bars. In the score these obviously appear as single bar rests, but in the relevant instrumental part I should like them to appear as a multi-measure rest. The problem may be that I have used \parallelMusic for the whole score: this seems an obvious way of doing things for a piece such as this with a small number of instruments. It has certainly been far easier to find my way around the file than in my previous Lilypond efforts (e.g. a piece for flute and piano), even though they were a lot shorter than this one. But looking at the documentation, I can only see multi-measure rests appearing if they are entered as multi-measure quantities - e.g. R1*6. If this is true, then the only way I can see to get the result I want, would be to deconstruct my whole file and reassemble it as 4 separate sections, one for each instrument. This in itself will be a tedious chore, but it also means the resulting file(s) will be much less easily navigable when I make further additions and modifications. Is there any way to get the result I want whilst still keeping the \parallelMusic layout? LilyPond by default only interprets single entities as combinable rests (i.e. R1*6), while consecutive rests (e.g. R1 R1) are separated by \compressFullBarRests. I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily I'm not sure if it is really straightforward to use in other contexts but I suspect you should be able to use it. You have to remove the conditional expression in the last function \combineMMRests (because that's project specific), but I expect the file to work smoothly once you've done that. To use it include the file and surround your music by \combineMMRests \yourMusic. HTH Urs Thanks for that. I have tried the file, and although it does not produce any errors, it does not seem to change the output at all. So it may be that I am doing something wrong. Here is what I have done. Firstly, the final function now reads: combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music) music) I'm not entirely sure I have got this right! Secondly, in the section of my main file which produces a part for a instrument, I have: \score { \combineMMRests { \myMusic } \layout { } } Is this correct? At the top of my file, of course, I have: \include combineMultimeasureRests.ily David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
Am 03.01.2015 um 16:36 schrieb David Sumbler: I have now finished setting the saxophone quartet, which is the first substantial multi-instrument piece I have attempted with Lilypond. I am very pleased with the result, and I am now at the stage of tweaking the appearance of the output. Searching in the Lilypond documentation, one problem I have not been able to find a solution to is this: in the piece there are a few places where one instrument is silent for several consecutive bars. In the score these obviously appear as single bar rests, but in the relevant instrumental part I should like them to appear as a multi-measure rest. The problem may be that I have used \parallelMusic for the whole score: this seems an obvious way of doing things for a piece such as this with a small number of instruments. It has certainly been far easier to find my way around the file than in my previous Lilypond efforts (e.g. a piece for flute and piano), even though they were a lot shorter than this one. But looking at the documentation, I can only see multi-measure rests appearing if they are entered as multi-measure quantities - e.g. R1*6. If this is true, then the only way I can see to get the result I want, would be to deconstruct my whole file and reassemble it as 4 separate sections, one for each instrument. This in itself will be a tedious chore, but it also means the resulting file(s) will be much less easily navigable when I make further additions and modifications. Is there any way to get the result I want whilst still keeping the \parallelMusic layout? LilyPond by default only interprets single entities as combinable rests (i.e. R1*6), while consecutive rests (e.g. R1 R1) are separated by \compressFullBarRests. I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily I'm not sure if it is really straightforward to use in other contexts but I suspect you should be able to use it. You have to remove the conditional expression in the last function \combineMMRests (because that's project specific), but I expect the file to work smoothly once you've done that. To use it include the file and surround your music by \combineMMRests \yourMusic. HTH Urs David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Condensing single-bar rests into a multi-measure rest
I have now finished setting the saxophone quartet, which is the first substantial multi-instrument piece I have attempted with Lilypond. I am very pleased with the result, and I am now at the stage of tweaking the appearance of the output. Searching in the Lilypond documentation, one problem I have not been able to find a solution to is this: in the piece there are a few places where one instrument is silent for several consecutive bars. In the score these obviously appear as single bar rests, but in the relevant instrumental part I should like them to appear as a multi-measure rest. The problem may be that I have used \parallelMusic for the whole score: this seems an obvious way of doing things for a piece such as this with a small number of instruments. It has certainly been far easier to find my way around the file than in my previous Lilypond efforts (e.g. a piece for flute and piano), even though they were a lot shorter than this one. But looking at the documentation, I can only see multi-measure rests appearing if they are entered as multi-measure quantities - e.g. R1*6. If this is true, then the only way I can see to get the result I want, would be to deconstruct my whole file and reassemble it as 4 separate sections, one for each instrument. This in itself will be a tedious chore, but it also means the resulting file(s) will be much less easily navigable when I make further additions and modifications. Is there any way to get the result I want whilst still keeping the \parallelMusic layout? David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
Am 03.01.2015 um 18:45 schrieb David Sumbler: From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Condensing single-bar rests into a multi-measure rest Date: Sat, 03 Jan 2015 16:45:27 +0100 Am 03.01.2015 um 16:36 schrieb David Sumbler: I have now finished setting the saxophone quartet, which is the first substantial multi-instrument piece I have attempted with Lilypond. I am very pleased with the result, and I am now at the stage of tweaking the appearance of the output. Searching in the Lilypond documentation, one problem I have not been able to find a solution to is this: in the piece there are a few places where one instrument is silent for several consecutive bars. In the score these obviously appear as single bar rests, but in the relevant instrumental part I should like them to appear as a multi-measure rest. The problem may be that I have used \parallelMusic for the whole score: this seems an obvious way of doing things for a piece such as this with a small number of instruments. It has certainly been far easier to find my way around the file than in my previous Lilypond efforts (e.g. a piece for flute and piano), even though they were a lot shorter than this one. But looking at the documentation, I can only see multi-measure rests appearing if they are entered as multi-measure quantities - e.g. R1*6. If this is true, then the only way I can see to get the result I want, would be to deconstruct my whole file and reassemble it as 4 separate sections, one for each instrument. This in itself will be a tedious chore, but it also means the resulting file(s) will be much less easily navigable when I make further additions and modifications. Is there any way to get the result I want whilst still keeping the \parallelMusic layout? LilyPond by default only interprets single entities as combinable rests (i.e. R1*6), while consecutive rests (e.g. R1 R1) are separated by \compressFullBarRests. I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily I'm not sure if it is really straightforward to use in other contexts but I suspect you should be able to use it. You have to remove the conditional expression in the last function \combineMMRests (because that's project specific), but I expect the file to work smoothly once you've done that. To use it include the file and surround your music by \combineMMRests \yourMusic. HTH Urs Thanks for that. I have tried the file, and although it does not produce any errors, it does not seem to change the output at all. So it may be that I am doing something wrong. Here is what I have done. Firstly, the final function now reads: combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music) music) I'm not entirely sure I have got this right! No, that's not right. The result of a Scheme function is the result of the last expression, and that is music in your case, so you're returning the unaltered music argument. I think (without testing) that combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music)) should be right. Secondly, in the section of my main file which produces a part for a instrument, I have: \score { \combineMMRests { \myMusic } \layout { } } Is this correct? That looks correct, although you don't need the curly braces around \myMusic in this case. However, I don't know if parallelMusic is interfering here additionally. HTH Urs At the top of my file, of course, I have: \include combineMultimeasureRests.ily David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Condensing single-bar rests into a multi-measure rest Date: Sat, 03 Jan 2015 18:59:17 +0100 Am 03.01.2015 um 18:45 schrieb David Sumbler: From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Condensing single-bar rests into a multi-measure rest Date: Sat, 03 Jan 2015 16:45:27 +0100 Am 03.01.2015 um 16:36 schrieb David Sumbler: I have now finished setting the saxophone quartet, which is the first substantial multi-instrument piece I have attempted with Lilypond. I am very pleased with the result, and I am now at the stage of tweaking the appearance of the output. Searching in the Lilypond documentation, one problem I have not been able to find a solution to is this: in the piece there are a few places where one instrument is silent for several consecutive bars. In the score these obviously appear as single bar rests, but in the relevant instrumental part I should like them to appear as a multi-measure rest. The problem may be that I have used \parallelMusic for the whole score: this seems an obvious way of doing things for a piece such as this with a small number of instruments. It has certainly been far easier to find my way around the file than in my previous Lilypond efforts (e.g. a piece for flute and piano), even though they were a lot shorter than this one. But looking at the documentation, I can only see multi-measure rests appearing if they are entered as multi-measure quantities - e.g. R1*6. If this is true, then the only way I can see to get the result I want, would be to deconstruct my whole file and reassemble it as 4 separate sections, one for each instrument. This in itself will be a tedious chore, but it also means the resulting file(s) will be much less easily navigable when I make further additions and modifications. Is there any way to get the result I want whilst still keeping the \parallelMusic layout? LilyPond by default only interprets single entities as combinable rests (i.e. R1*6), while consecutive rests (e.g. R1 R1) are separated by \compressFullBarRests. I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily I'm not sure if it is really straightforward to use in other contexts but I suspect you should be able to use it. You have to remove the conditional expression in the last function \combineMMRests (because that's project specific), but I expect the file to work smoothly once you've done that. To use it include the file and surround your music by \combineMMRests \yourMusic. HTH Urs Thanks for that. I have tried the file, and although it does not produce any errors, it does not seem to change the output at all. So it may be that I am doing something wrong. Here is what I have done. Firstly, the final function now reads: combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music) music) I'm not entirely sure I have got this right! No, that's not right. The result of a Scheme function is the result of the last expression, and that is music in your case, so you're returning the unaltered music argument. I think (without testing) that combineMMRests = #(define-music-function (parser location music) (ly:music?) (condense music)) should be right. Secondly, in the section of my main file which produces a part for a instrument, I have: \score { \combineMMRests { \myMusic } \layout { } } Is this correct? That looks correct, although you don't need the curly braces around \myMusic in this case. However, I don't know if parallelMusic is interfering here additionally. HTH Urs I have now corrected my version of the combineMMRests function, but unfortunately it still leaves my output unaffected. I can see how something like this could work - unfortunately my understanding at this stage of Scheme and Lilypond internals is insufficient for me to see where the problem might be or to write something similar from scratch. I can't see why \parallelMusic should cause a problem: presumably it just returns exactly what the individual parts would produce if they were not interleaved in the parallelMusic structure. David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
Hi Urs, On Jan 3, 2015, at 10:45 AM, Urs Liska u...@openlilylib.org wrote: I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily Was that inspired by http://lists.gnu.org/archive/html/lilypond-user/2013-12/msg01085.html? If so, does what is the final result? That is to say, is there a single function which one can use to merge skips AND rests? Thanks, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
Am 04.01.2015 um 01:16 schrieb Kieren MacMillan: Hi Urs, On Jan 3, 2015, at 10:45 AM, Urs Liska u...@openlilylib.org wrote: I recently had the same problem and got a file from the list which I tweaked to work well in a quite similar case. You can find the file at https://git.ursliska.de/beautifulscores/das-trunkne-lied/blob/master/library/ly/to-lilylib/combineMultimeasureRests.ily Was that inspired by http://lists.gnu.org/archive/html/lilypond-user/2013-12/msg01085.html? No. I got that from http://lists.gnu.org/archive/html/lilypond-user/2013-04/msg00531.html If so, does what is the final result? That is to say, is there a single function which one can use to merge skips AND rests? I'm not sure about that because that wasn't the problem at hand. My problem was that I have to merge multimeasure rests that were written as e.g. R1*4 {} R1*6 The empty expression is a music function that can return a \break (- no rest merging) or an empty expression. The linked function is able to merge consecutive rests when they are of the same type. As I didn't look too close into the thread you linked I don't know if my problem is related to yours, but I suspect it's rather something different. Best Urs Thanks, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Condensing single-bar rests into a multi-measure rest
Hi Urs, I'm not sure about that because that wasn't the problem at hand. My problem was that I have to merge multimeasure rests that were written as e.g. R1*4 {} R1*6 The empty expression is a music function that can return a \break (- no rest merging) or an empty expression. The linked function is able to merge consecutive rests when they are of the same type. As I didn't look too close into the thread you linked I don't know if my problem is related to yours, but I suspect it's rather something different. My problem was \version 2.19.15 \new Staff \with { \compressFullBarRests } { R1*8 } { \repeat unfold 8 {s1} } Keith’s \mergeSkips deals with that, but (if I understand correctly) not your empty-expression problem. Cheers, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user