From 75fa64c892fe02d16604cccb9529b2727811e507 Mon Sep 17 00:00:00 2001
From: Graham Percival <graham@percival-music.ca>
Date: Tue, 29 Apr 2008 20:11:28 -0700
Subject: [PATCH] LSR: update.

---
 ...ing-text-indications-to-metronome-marks.ly | 91 +++++++++----------
 ...staff-lines-using-the--whiteout-command.ly |  2 +-
 input/lsr/breaks.snippet-list                 |  1 +
 input/lsr/caesura-railtracks-with-fermata.ly  |  2 +-
 input/lsr/changing--flageolet-mark-size.ly    |  2 +-
 ...polymetric-section-using--compressmusic.ly |  2 +-
 input/lsr/clusters.ly                         |  2 +-
 ...lling-the-placement-of-chord-fingerings.ly |  2 +-
 input/lsr/creating-slurs-across-voices.ly     | 26 ++++++
 input/lsr/demo-midiinstruments.ly             |  2 +-
 input/lsr/editorial-annotations.snippet-list  |  4 +-
 ...ng-native-postscript-in-a--markup-block.ly |  2 +-
 ...l-tuplets-using-only-one--times-command.ly |  2 +-
 input/lsr/expressive-marks.snippet-list       |  6 +-
 ... grid-lines--changing-their-appearance.ly} |  0
 ...zing-rhythms-and-notes-synchronization.ly} |  0
 ...ing-text-indications-in-metronome-marks.ly | 70 ++++++++++++++
 input/lsr/jazz-combo-template.ly              |  2 +-
 input/lsr/keyboards.snippet-list              |  9 ++
 input/lsr/piano-template-simple.ly            |  2 +-
 .../piano-template-with-centered-lyrics.ly    |  2 +-
 .../piano-template-with-melody-and-lyrics.ly  |  2 +-
 input/lsr/removing-the-first-empty-line.ly    | 52 +++++++++++
 input/lsr/rhythms.snippet-list                |  1 +
 .../setting-hairpin-behavior-at-bar-lines.ly  | 19 ++++
 input/lsr/staff-notation.snippet-list         |  3 +-
 input/lsr/text.snippet-list                   | 26 +++---
 input/lsr/tweaks-and-overrides.snippet-list   |  1 +
 input/lsr/unfretted-strings.snippet-list      |  3 +-
 ...template-with-automatic-piano-reduction.ly |  2 +-
 30 files changed, 261 insertions(+), 79 deletions(-)
 create mode 100644 input/lsr/creating-slurs-across-voices.ly
 rename input/lsr/{grid-lines-changing-their-appearance.ly => grid-lines--changing-their-appearance.ly} (100%)
 rename input/lsr/{grid-lines-emphasizing-rhythms-and-notes-synchronization.ly => grid-lines--emphasizing-rhythms-and-notes-synchronization.ly} (100%)
 create mode 100644 input/lsr/integrating-text-indications-in-metronome-marks.ly
 create mode 100644 input/lsr/removing-the-first-empty-line.ly
 create mode 100644 input/lsr/setting-hairpin-behavior-at-bar-lines.ly

diff --git a/input/lsr/adding-text-indications-to-metronome-marks.ly b/input/lsr/adding-text-indications-to-metronome-marks.ly
index 1c39226b6c..817446ecd1 100644
--- a/input/lsr/adding-text-indications-to-metronome-marks.ly
+++ b/input/lsr/adding-text-indications-to-metronome-marks.ly
@@ -1,61 +1,60 @@
 %% Do not edit this file; it is auto-generated from input/new
 %% This file is in the public domain.
-\version "2.11.43"
+\version "2.11.45"
 \header {
-  lsrtags = "expressive-marks,text,tweaks-and-overrides"
+  lsrtags = "expressive-marks,tweaks-and-overrides"
   texidoc = "
 Using Scheme code to override the stencil for @code{MetronomeMark}
 objects, this example allows the creation of metronome marks which include
-text directions.  The function @code{\tempoChangeMarkup} is called with three
-strings: the text label, note duration, and beats per minute.  To print the
-new metronome mark, this is followed by the standard @code{\tempo} command.
+text directions.  The function @code{\movement} is called with three
+arguments: the text label, note duration, and beats per minute.
 "
   doctitle = "Adding text indications to metronome marks"
 } % begin verbatim
 
-% Thanks to Alexander Kobel for this snippet
+#(define-markup-command (mvt layout props arg) (markup?)
+  (interpret-markup layout props
+     (markup #:huge #:bold arg)))
 
-tempoMarkLabelSize = #0
-tempoMarkNoteSize = #-6
+#(define (string->duration duration-string)
+  "Parse the `duration-string', e.g. ''4..'' or ''breve.'', and return a duration object."
+  (let* ((length (string-length duration-string))
+         (dot-index (or (string-index duration-string #\.) length))
+         (len (substring duration-string 0 dot-index))
+         (dots (- length dot-index)))
+   (ly:make-duration (cond ((string=? len "breve") -1)
+                           ((string=? len "longa") -2)
+                           ((string=? len "maxima") -3)
+                           (else (log2 (string->number len))))
+                     dots 1 1)))
 
-#(define (tempoChangeMarkupFactory grob label noteValue tempo)
- (interpret-markup
-  (ly:grob-layout grob)
-  (ly:grob-alist-chain grob (ly:output-def-lookup (ly:grob-layout grob) 'text-font-defaults))
-  (markup
-   #:fontsize tempoMarkLabelSize #:italic #:concat (label (if (string-null? label) "(" " (" ))
-   #:hspace -1
-   #:fontsize tempoMarkNoteSize #:general-align Y DOWN #:note noteValue UP
-   #:fontsize tempoMarkLabelSize #:italic #:concat( "= " tempo ")" )
-  )
- ))
+movement = #(define-music-function (parser location text duration count music)
+                        (string? string? integer? ly:music?)
+   (define (format-movement-markup dur count context)
+     (markup #:mvt text #:hspace 1
+             #:concat ("(" #:general-align Y DOWN #:smaller #:note duration 1)
+             "="
+             #:concat ((number->string count) ")")))
+  #{
+    \set Score.metronomeMarkFormatter = #$format-movement-markup
+    \set Score.tempoWholesPerMinute = #$(ly:moment-mul (ly:make-moment count 1)
+                                         (ly:duration-length
+                                           (string->duration duration)))
+    \set Score.tempoUnitDuration = #$(string->duration duration)
+    \set Score.tempoUnitCount = $count
+    $music
+    \set Score.metronomeMarkFormatter = #format-metronome-markup
+  #})
 
-#(define (tempoChangeStencil label noteValue tempo)
- (lambda (grob)
-  (tempoChangeMarkupFactory grob label noteValue tempo)
- ))
+\layout { ragged-right = ##f }
 
-tempoChangeMarkup = #(define-music-function (parser location label noteValue tempo) (string? string? string?)
-       #{
-         \once \override Score.MetronomeMark #'stencil = #(tempoChangeStencil $label $noteValue $tempo)
-       #})
-
-\relative c' {
-  \time 4/4
-  \clef treble
-  % initialize the override
-  \tempoChangeMarkup #"Moderato" #"4" #"63"
-  % markup is printed
-  \tempo 4 = 63
-  c4 d e f
-  g a b c
-  \time 6/4
-  \mark \default
-  \tempoChangeMarkup #"presto" #"2." #"90"
-  \tempo 2. = 90
-  c2. g \break
-  e \tempoChangeMarkup #"handling collision with RehearsalMark" #"4" #"120" \tempo 4 = 120 c
-  \time 4/4
-  \mark \default
-  c1
+\relative c' { 
+  \time 3/4
+  \movement "Allegro" "2." #92
+  c2 e4
+  g2.
+  \movement "Moderato" "4" #104
+  f4 e d
+  \tempo 4 = 92
+  c2.
 }
diff --git a/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly b/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly
index d438c66003..801371d9eb 100644
--- a/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly
+++ b/input/lsr/blanking-staff-lines-using-the--whiteout-command.ly
@@ -11,7 +11,7 @@ Since staff lines are in a lower layer than most other grobs, this
 white box will not overlap any other grob. 
 
 "
-  doctitle = "Blanking staff lines using the \whiteout command"
+  doctitle = "Blanking staff lines using the \\whiteout command"
 } % begin verbatim
 \relative {
   \override TextScript #'extra-offset = #'(2 . 4)
diff --git a/input/lsr/breaks.snippet-list b/input/lsr/breaks.snippet-list
index 42c01eb15a..3d1579ba3c 100644
--- a/input/lsr/breaks.snippet-list
+++ b/input/lsr/breaks.snippet-list
@@ -1,3 +1,4 @@
 positioning-segno-and-coda-with-line-break.ly
+removing-the-first-empty-line.ly
 beams-across-line-breaks.ly
 adding-an-extra-staff-at-a-line-break.ly
diff --git a/input/lsr/caesura-railtracks-with-fermata.ly b/input/lsr/caesura-railtracks-with-fermata.ly
index 88f92be783..58bde649d2 100644
--- a/input/lsr/caesura-railtracks-with-fermata.ly
+++ b/input/lsr/caesura-railtracks-with-fermata.ly
@@ -12,7 +12,7 @@ snippet should present an optically pleasing combination of railtracks
 and a fermata.
 
 "
-  doctitle = "Caesura \"railtracks\" with fermata"
+  doctitle = "Caesura (\"railtracks\") with fermata"
 } % begin verbatim
 {
   c''2.
diff --git a/input/lsr/changing--flageolet-mark-size.ly b/input/lsr/changing--flageolet-mark-size.ly
index 93a63b36d1..f4035da427 100644
--- a/input/lsr/changing--flageolet-mark-size.ly
+++ b/input/lsr/changing--flageolet-mark-size.ly
@@ -10,7 +10,7 @@ To make the @code{\\flageolet} circle smaller use the following Scheme
 function. 
 
 "
-  doctitle = "Changing \flageolet mark size"
+  doctitle = "Changing \\flageolet mark size"
 } % begin verbatim
 smallFlageolet = #(let ((m (make-music 'ArticulationEvent
                           'articulation-type "flageolet")))
diff --git a/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--compressmusic.ly b/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--compressmusic.ly
index c778433e45..59b362f2ba 100644
--- a/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--compressmusic.ly
+++ b/input/lsr/changing-time-signatures-inside-a-polymetric-section-using--compressmusic.ly
@@ -15,7 +15,7 @@ Therefore, @code{measureLength} has to be set manually, using the
 the second argument of @code{\\compressMusic}. 
 
 "
-  doctitle = "Changing time signatures inside a polymetric section using \compressMusic"
+  doctitle = "Changing time signatures inside a polymetric section using \\compressMusic"
 } % begin verbatim
 \layout {
   \context {
diff --git a/input/lsr/clusters.ly b/input/lsr/clusters.ly
index 2a06f69aae..f124d36374 100644
--- a/input/lsr/clusters.ly
+++ b/input/lsr/clusters.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "simultaneous-notes, chords"
+  lsrtags = "simultaneous-notes, chords, keyboards"
 
   texidoc = "
 Clusters are a device to denote that a complete range of notes is to be
diff --git a/input/lsr/controlling-the-placement-of-chord-fingerings.ly b/input/lsr/controlling-the-placement-of-chord-fingerings.ly
index 077ee0a5c4..51f5899a61 100644
--- a/input/lsr/controlling-the-placement-of-chord-fingerings.ly
+++ b/input/lsr/controlling-the-placement-of-chord-fingerings.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "editorial-annotations, chords"
+  lsrtags = "editorial-annotations, chords, keyboards"
 
   texidoc = "
 The placement of fingering numbers can be controlled precisely.
diff --git a/input/lsr/creating-slurs-across-voices.ly b/input/lsr/creating-slurs-across-voices.ly
new file mode 100644
index 0000000000..9ee396c97f
--- /dev/null
+++ b/input/lsr/creating-slurs-across-voices.ly
@@ -0,0 +1,26 @@
+%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.11.38"
+
+\header {
+  lsrtags = "expressive-marks, keyboards, unfretted-strings"
+
+  texidoc = "
+In some situations, you may want to create slurs between notes from
+different voices.
+
+The solution is to add invisible notes to one of the voices, using
+\\hideNotes.
+
+This example is bar 235 of the Ciaconna from Bach's 2nd Partita for
+solo violin, BWV 1004.
+
+"
+  doctitle = "Creating slurs across voices"
+} % begin verbatim
+\relative
+<<
+  {d16( a') s a s a[ s a] s a[ s a] } \\
+  {\slurUp bes,[ s e]( \hideNotes a) \unHideNotes f[( \hideNotes a) \unHideNotes fis]( \hideNotes a) \unHideNotes g[( \hideNotes a) \unHideNotes gis]( \hideNotes a) }
+>>
+
diff --git a/input/lsr/demo-midiinstruments.ly b/input/lsr/demo-midiinstruments.ly
index c7384495d7..3f07692be3 100644
--- a/input/lsr/demo-midiinstruments.ly
+++ b/input/lsr/demo-midiinstruments.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "vocal-music, unfretted-strings, midi"
+  lsrtags = "vocal-music, keyboards, unfretted-strings, midi"
 
   texidoc = "
 Problem: How to know which @code{midiInstrument} would be best for your
diff --git a/input/lsr/editorial-annotations.snippet-list b/input/lsr/editorial-annotations.snippet-list
index bfee2c190e..de93af3949 100644
--- a/input/lsr/editorial-annotations.snippet-list
+++ b/input/lsr/editorial-annotations.snippet-list
@@ -5,8 +5,8 @@ changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly
 embedding-native-postscript-in-a--markup-block.ly
 default-direction-of-stems-on-the-center-line-of-the-staff.ly
 changing-a-single-notes-size-in-a-chord.ly
-grid-lines-emphasizing-rhythms-and-notes-synchronization.ly
+grid-lines--emphasizing-rhythms-and-notes-synchronization.ly
+grid-lines--changing-their-appearance.ly
 controlling-the-placement-of-chord-fingerings.ly
 allowing-fingerings-to-be-printed-inside-the-staff.ly
 blanking-staff-lines-using-the--whiteout-command.ly
-grid-lines-changing-their-appearance.ly
diff --git a/input/lsr/embedding-native-postscript-in-a--markup-block.ly b/input/lsr/embedding-native-postscript-in-a--markup-block.ly
index baef1614d9..c8cf651fbb 100644
--- a/input/lsr/embedding-native-postscript-in-a--markup-block.ly
+++ b/input/lsr/embedding-native-postscript-in-a--markup-block.ly
@@ -10,7 +10,7 @@ PostScript code can be directly inserted inside a @code{\\markup}
 block. 
 
 "
-  doctitle = "Embedding native PostScript in a \markup block"
+  doctitle = "Embedding native PostScript in a \\markup block"
 } % begin verbatim
 % PostScript is a registred trademark by Adobe Systems Inc.
 
diff --git a/input/lsr/entering-several-tuplets-using-only-one--times-command.ly b/input/lsr/entering-several-tuplets-using-only-one--times-command.ly
index f7ad762465..19437456ae 100644
--- a/input/lsr/entering-several-tuplets-using-only-one--times-command.ly
+++ b/input/lsr/entering-several-tuplets-using-only-one--times-command.ly
@@ -19,7 +19,7 @@ For more information about @code{make-moment}, see \"Time
 administration\". 
 
 "
-  doctitle = "Entering several tuplets using only one \times command"
+  doctitle = "Entering several tuplets using only one \\times command"
 } % begin verbatim
 \relative c' {
   \time 2/4
diff --git a/input/lsr/expressive-marks.snippet-list b/input/lsr/expressive-marks.snippet-list
index ee4a738ab0..bea8cafa9a 100644
--- a/input/lsr/expressive-marks.snippet-list
+++ b/input/lsr/expressive-marks.snippet-list
@@ -1,16 +1,18 @@
 combining-dynamics-with-markup-texts.ly
 creating-text-spanners.ly
 adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rythms..ly
+creating-slurs-across-voices.ly
 changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly
 caesura-railtracks-with-fermata.ly
 printing-metronome-and-rehearsal-marks-below-the-staff.ly
 creating-real-parenthesized-dynamics.ly
+creating-simultaneous-rehearsal-marks.ly
 center-text-below-hairpin-dynamics.ly
 contemporary-glissando.ly
 adding-parentheses-around-an-expressive-mark-or-chordal-note.ly
 adding-text-indications-to-metronome-marks.ly
-line-arrows.ly
+setting-hairpin-behavior-at-bar-lines.ly
 changing--flageolet-mark-size.ly
 piano-template-with-centered-dynamics.ly
-creating-simultaneous-rehearsal-marks.ly
+line-arrows.ly
 broken-crescendo-hairpin.ly
diff --git a/input/lsr/grid-lines-changing-their-appearance.ly b/input/lsr/grid-lines--changing-their-appearance.ly
similarity index 100%
rename from input/lsr/grid-lines-changing-their-appearance.ly
rename to input/lsr/grid-lines--changing-their-appearance.ly
diff --git a/input/lsr/grid-lines-emphasizing-rhythms-and-notes-synchronization.ly b/input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly
similarity index 100%
rename from input/lsr/grid-lines-emphasizing-rhythms-and-notes-synchronization.ly
rename to input/lsr/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly
diff --git a/input/lsr/integrating-text-indications-in-metronome-marks.ly b/input/lsr/integrating-text-indications-in-metronome-marks.ly
new file mode 100644
index 0000000000..4329aeac94
--- /dev/null
+++ b/input/lsr/integrating-text-indications-in-metronome-marks.ly
@@ -0,0 +1,70 @@
+%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.11.38"
+
+\header {
+  lsrtags = "rhythms, text"
+
+  texidoc = "
+This function allows you to change the tempo and specify text
+directions at the same time, using one single command.It takes three
+arguments: the text to be printed (the string has to be introduced with
+a # character), the duration (it has to be specified as a text string,
+between double quotes and with a #), and the metronome tempo (as a
+number). This way, the given tempo will be taken into account in MIDI
+output, but the normal @code{\\tempo} command will remain unaffected. 
+
+"
+  doctitle = "Integrating text indications in metronome marks"
+} % begin verbatim
+#(define ((make-format-movement-markup-function text) duration count context)
+ (markup #:huge #:bold text #:hspace 1
+         "("
+         #:general-align Y DOWN #:smaller
+            #:note-by-number (ly:duration-log duration)
+                             (ly:duration-dot-count duration)
+                             1
+         "="
+         (number->string count)
+         ")"))
+
+
+#(define (string->duration duration-string)
+ "Parse the `duration-string', e.g. ''4..'' or ''breve.'', and return a duration object."
+ (let* ((length (string-length duration-string))
+        (dot-index (or (string-index duration-string #\.) length))
+        (len (substring duration-string 0 dot-index))
+        (dots (- length dot-index)))
+  (ly:make-duration (cond ((string=? len "breve") -1)
+                          ((string=? len "longa") -2)
+                          ((string=? len "maxima") -3)
+                          (else (log2 (string->number len))))
+                    dots 1 1)))
+
+movement =
+#(define-music-function (parser location text duration count music)
+
+                       (string? string? integer? ly:music?)
+ #{
+   \set Score.metronomeMarkFormatter = #(make-format-movement-markup-function $text)
+   \set Score.tempoWholesPerMinute = #$(ly:moment-mul (ly:make-moment count 1)
+                                         (ly:duration-length
+                                           (string->duration duration)))
+   \set Score.tempoUnitDuration = #$(string->duration duration)
+   \set Score.tempoUnitCount = #$count
+   $music
+   \set Score.metronomeMarkFormatter = #format-metronome-markup
+ #})
+
+\layout { ragged-right = ##f }
+
+\relative c' {
+  \time 3/4
+  \movement "Allegro" "2." #96
+  c2 e4
+  g2.
+  \movement "Moderato" "4" #104
+  f4 e d
+  \tempo 4 = 92
+  c2.
+}
diff --git a/input/lsr/jazz-combo-template.ly b/input/lsr/jazz-combo-template.ly
index 334b6b6499..23e688906f 100644
--- a/input/lsr/jazz-combo-template.ly
+++ b/input/lsr/jazz-combo-template.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "percussion, template"
+  lsrtags = "keyboards, percussion, template"
 
   texidoc = "
 This is quite an advanced template, for a jazz ensemble. Note that all
diff --git a/input/lsr/keyboards.snippet-list b/input/lsr/keyboards.snippet-list
index 2da59b2fd4..aac210db57 100644
--- a/input/lsr/keyboards.snippet-list
+++ b/input/lsr/keyboards.snippet-list
@@ -1 +1,10 @@
 piano-template-with-centered-dynamics.ly
+clusters.ly
+creating-slurs-across-voices.ly
+jazz-combo-template.ly
+vocal-ensemble-template-with-automatic-piano-reduction.ly
+piano-template-simple.ly
+controlling-the-placement-of-chord-fingerings.ly
+piano-template-with-melody-and-lyrics.ly
+piano-template-with-centered-lyrics.ly
+demo-midiinstruments.ly
diff --git a/input/lsr/piano-template-simple.ly b/input/lsr/piano-template-simple.ly
index f34bda65ce..0b538ea71b 100644
--- a/input/lsr/piano-template-simple.ly
+++ b/input/lsr/piano-template-simple.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "template"
+  lsrtags = "keyboards, template"
 
   texidoc = "
 Here is a simple piano staff with some notes.
diff --git a/input/lsr/piano-template-with-centered-lyrics.ly b/input/lsr/piano-template-with-centered-lyrics.ly
index 6f4e52f401..512b0c74ff 100644
--- a/input/lsr/piano-template-with-centered-lyrics.ly
+++ b/input/lsr/piano-template-with-centered-lyrics.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "text, template"
+  lsrtags = "text, keyboards, template"
 
   texidoc = "
 Instead of having a full staff for the melody and lyrics, you can place
diff --git a/input/lsr/piano-template-with-melody-and-lyrics.ly b/input/lsr/piano-template-with-melody-and-lyrics.ly
index 32d1b69646..694535d705 100644
--- a/input/lsr/piano-template-with-melody-and-lyrics.ly
+++ b/input/lsr/piano-template-with-melody-and-lyrics.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "vocal-music, template"
+  lsrtags = "vocal-music, keyboards, template"
 
   texidoc = "
 Here is a typical song format: one staff with the melody and lyrics,
diff --git a/input/lsr/removing-the-first-empty-line.ly b/input/lsr/removing-the-first-empty-line.ly
new file mode 100644
index 0000000000..2df9dbbad1
--- /dev/null
+++ b/input/lsr/removing-the-first-empty-line.ly
@@ -0,0 +1,52 @@
+%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.11.38"
+
+\header {
+  lsrtags = "staff-notation, tweaks-and-overrides, breaks"
+
+  texidoc = "
+The first empty staff can also be removed from the score by setting the
+@code{VerticalAxisGroup} property @code{remove-first}. This can be done
+globally inside the @code{\\layout} block, or locally inside the
+specific staff that should be removed.  In the latter case, you have to
+specify the context (@code{Staff} applies only to the current staff) in
+front of the property.
+
+The lower staff of the second staff group is not removed, because the
+setting applies only to the specific staff inside of which it is
+written. 
+
+"
+  doctitle = "Removing the first empty line"
+} % begin verbatim
+\layout {
+  \context { 
+    \RemoveEmptyStaffContext 
+    % To use the setting globally, uncomment the following line:
+    % \override VerticalAxisGroup #'remove-first = ##t
+  }
+}
+\new StaffGroup <<
+  \new Staff \relative c' {
+    e4 f g a \break
+    c1
+  }
+  \new Staff {
+    % To use the setting globally, comment this line,
+    % uncomment the line in the \layout block above
+    \override Staff.VerticalAxisGroup #'remove-first = ##t
+    R1 \break
+    R
+  }
+>>
+\new StaffGroup <<
+  \new Staff \relative c' {
+    e4 f g a \break
+    c1
+  }
+  \new Staff {
+    R1 \break
+    R
+  }
+>>
diff --git a/input/lsr/rhythms.snippet-list b/input/lsr/rhythms.snippet-list
index 4305d06024..8222963f95 100644
--- a/input/lsr/rhythms.snippet-list
+++ b/input/lsr/rhythms.snippet-list
@@ -10,6 +10,7 @@ heavily-customized-polymetric-time-signatures.ly
 positioning-multi--measure-rests.ly
 using-ties-with-arpeggios.ly
 forcing-rehearsal-marks-to-start-from-a-given-letter-or-number.ly
+integrating-text-indications-in-metronome-marks.ly
 compound-time-signatures.ly
 modifying-tuplet-bracket-length.ly
 printing-metronome-and-rehearsal-marks-below-the-staff.ly
diff --git a/input/lsr/setting-hairpin-behavior-at-bar-lines.ly b/input/lsr/setting-hairpin-behavior-at-bar-lines.ly
new file mode 100644
index 0000000000..b26a86270a
--- /dev/null
+++ b/input/lsr/setting-hairpin-behavior-at-bar-lines.ly
@@ -0,0 +1,19 @@
+%% Do not edit this file; it is auto-generated from input/new
+%% This file is in the public domain.
+\version "2.11.46"
+\header {
+  lsrtags = "expressive-marks"
+  texidoc = "If the note which ends a hairpin falls on a downbeat,
+the hairpin stops at the bar line immediately preceding.  This behavior
+can be controlled by overriding the @code{'to-barline} property.
+"
+  doctitle = "Setting hairpin behavior at bar lines"
+}
+
+\relative c'' {
+  e4\< e2.
+  e1\!
+  \override Hairpin #'to-barline = ##f
+  e4\< e2.
+  e1\!
+}
diff --git a/input/lsr/staff-notation.snippet-list b/input/lsr/staff-notation.snippet-list
index 4c4ac2dc4b..6ccdb8a7b7 100644
--- a/input/lsr/staff-notation.snippet-list
+++ b/input/lsr/staff-notation.snippet-list
@@ -1,6 +1,7 @@
 creating-blank-staves.ly
-incipit.ly
+removing-the-first-empty-line.ly
 mensurstriche-layout-bar-lines-between-the-staves.ly
+incipit.ly
 adding-ambitus-per-voice.ly
 changing-the-number-of-lines-in-a-staff.ly
 adding-an-extra-staff-at-a-line-break.ly
diff --git a/input/lsr/text.snippet-list b/input/lsr/text.snippet-list
index 95284862b9..c8f4874b1e 100644
--- a/input/lsr/text.snippet-list
+++ b/input/lsr/text.snippet-list
@@ -1,26 +1,26 @@
-creating-text-spanners.ly
-creating-real-parenthesized-dynamics.ly
 embedding-native-postscript-in-a--markup-block.ly
-center-text-below-hairpin-dynamics.ly
-demonstrating-all-headers.ly
 printing-marks-at-the-end-of-a-line-or-a-score.ly
 changing-the-default-text-font-family.ly
-combining-two-parts-on-the-same-staff.ly
-aligning-and-centering-instrument-names.ly
 outputting-the-version-number.ly
+aligning-and-centering-instrument-names.ly
 formatting-lyrics-syllables.ly
-adding-text-indications-to-metronome-marks.ly
+vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly
+markup-lines.ly
+printing-marks-on-every-staff.ly
+blanking-staff-lines-using-the--whiteout-command.ly
+integrating-text-indications-in-metronome-marks.ly
+adjusting-lyrics-vertical-spacing.ly
+creating-text-spanners.ly
+creating-real-parenthesized-dynamics.ly
+center-text-below-hairpin-dynamics.ly
+demonstrating-all-headers.ly
+combining-two-parts-on-the-same-staff.ly
 how-to-put-ties-between-syllables-in-lyrics.ly
 combining-dynamics-with-markup-texts.ly
-vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly
 aligning-marks-with-various-notation-objects.ly
-markup-lines.ly
 ottava-text.ly
 creating-simultaneous-rehearsal-marks.ly
 three-sided-box.ly
-piano-template-with-centered-lyrics.ly
 utf-8.ly
-blanking-staff-lines-using-the--whiteout-command.ly
-printing-marks-on-every-staff.ly
-adjusting-lyrics-vertical-spacing.ly
+piano-template-with-centered-lyrics.ly
 aligning-lyrics.ly
diff --git a/input/lsr/tweaks-and-overrides.snippet-list b/input/lsr/tweaks-and-overrides.snippet-list
index cb7a4e8390..02fe9d7ade 100644
--- a/input/lsr/tweaks-and-overrides.snippet-list
+++ b/input/lsr/tweaks-and-overrides.snippet-list
@@ -12,6 +12,7 @@ positioning-multi--measure-rests.ly
 changing-the-staff-size.ly
 vertically-aligning-ossias-and-lyrics.ly
 changing-properties-for-individual-grobs.ly
+removing-the-first-empty-line.ly
 mensurstriche-layout-bar-lines-between-the-staves.ly
 printing-metronome-and-rehearsal-marks-below-the-staff.ly
 tweaking-clef-properties.ly
diff --git a/input/lsr/unfretted-strings.snippet-list b/input/lsr/unfretted-strings.snippet-list
index bfcf6a78dc..5ee803315f 100644
--- a/input/lsr/unfretted-strings.snippet-list
+++ b/input/lsr/unfretted-strings.snippet-list
@@ -1,4 +1,5 @@
+string-quartet-template-with-separate-parts.ly
 string-quartet-template-simple.ly
 changing--flageolet-mark-size.ly
-string-quartet-template-with-separate-parts.ly
+creating-slurs-across-voices.ly
 demo-midiinstruments.ly
diff --git a/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly b/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly
index 0b827bbedc..bf4bcd4a49 100644
--- a/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly
+++ b/input/lsr/vocal-ensemble-template-with-automatic-piano-reduction.ly
@@ -3,7 +3,7 @@
 \version "2.11.38"
 
 \header {
-  lsrtags = "vocal-music, template"
+  lsrtags = "vocal-music, keyboards, template"
 
   texidoc = "
 This template adds an automatic piano reduction to the standard SATB
-- 
2.39.5