]> git.newer.systems Git - four-bays.git/commitdiff
init main
authorTucker Johnson <tucker@newer.systems>
Fri, 20 Mar 2026 02:01:59 +0000 (22:01 -0400)
committerTucker Johnson <tucker@newer.systems>
Fri, 20 Mar 2026 02:01:59 +0000 (22:01 -0400)
20 files changed:
.gitignore [new file with mode: 0644]
general/info.ly [new file with mode: 0644]
general/partLayout.ly [new file with mode: 0644]
general/partPaper.ly [new file with mode: 0644]
general/scoreLayout.ly [new file with mode: 0644]
general/scorePaper.ly [new file with mode: 0644]
lib/dynamics.ly [new file with mode: 0644]
lib/formatting.ly [new file with mode: 0644]
lib/load.ly [new file with mode: 0644]
lib/matter.ly [new file with mode: 0644]
lib/notes.ly [new file with mode: 0644]
lib/spanners.ly [new file with mode: 0644]
lib/text.ly [new file with mode: 0644]
manuscripts/cello.ly [new file with mode: 0644]
manuscripts/tempoMap.ly [new file with mode: 0644]
manuscripts/viola.ly [new file with mode: 0644]
manuscripts/violin1.ly [new file with mode: 0644]
manuscripts/violin2.ly [new file with mode: 0644]
parts/parts_string-quartet.ly [new file with mode: 0644]
string-quartet.ly [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..45e83ea
--- /dev/null
@@ -0,0 +1,7 @@
+*.pdf
+*.ps
+*.midi
+*.mid
+*.log
+*~
+.DS_Store
diff --git a/general/info.ly b/general/info.ly
new file mode 100644 (file)
index 0000000..63ea67a
--- /dev/null
@@ -0,0 +1,52 @@
+xtitle =    \markup { Four Bays }
+xsub =      \markup { "points, islands, and coves of the Avalon Peninsula" }
+xcomp =     \markup { Tucker Johnson }
+xinst =     \markup  { string quartet }
+xdur =      \markup { \sans "~7" "minutes" }
+xyear =     \markup { 2026 }
+xcr =       \markup \tiny { Copyright Umbel Press \concat { \sans \xyear "." } All Rights Reserved (ASCAP) }
+
+
+programNotes =
+\markuplist { \justify {
+  \italic "String Quartet"
+} }
+
+performanceNotes =
+\markuplist {
+        \left-column {
+          \override #'(line-width . 100)
+          \line { \hspace #100 }
+          \wordwrap { &sect; \hspace #3.5 \sans \bold \italic "interpreting notations" }
+        }
+        \left-column {
+          \override #'(line-width . 90)
+          \line { \hspace #90 }
+          \justify {
+            \sans \italic 1. \hspace #1 Accidentals carry through each
+            bar &ndash; cautionary accidentals added for clarification.
+          }
+          \override #'(line-width . 90)
+          \justify {
+            \sans \italic 2. \hspace #1 Two fermata notations are used: a
+            \italic short fermata ( \musicglyph "scripts.ushortfermata" ) and a
+            \italic long fermata ( \musicglyph "scripts.ufermata" ).
+          }
+          \override #'(line-width . 90)
+          \justify {
+            \sans \italic 3. \hspace #1 Dotted slurs are used to indicate phrasing that may not be clear through dynamics and other notations.
+          }
+          \override #'(line-width . 90)
+          \justify {
+            \sans \italic 4. \hspace #1 Clusters should contain all of the
+            chromatic notes between the upper and lower limit of the
+            cluster-span.
+          }
+          \override #'(line-width . 90)
+          \justify {
+            \sans \italic 5. \hspace #1 Cadenza notation should be interpreted
+            freely, though music should be continuous between breath marks and
+            rests. Breath marks indicate a short break, while rests are longer.
+          }
+        }
+}
diff --git a/general/partLayout.ly b/general/partLayout.ly
new file mode 100644 (file)
index 0000000..52bf488
--- /dev/null
@@ -0,0 +1,74 @@
+\layout {
+  \context {
+    \Score
+    \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
+    \override InstrumentName.self-alignment-X = 1
+    \override RehearsalMark.break-visibility = #begin-of-line-invisible
+    \override Hairpin.to-barline = ##f
+    \overrideTimeSignatureSettings 4/4 1/4 1,1,1,1 #'()
+    \overrideTimeSignatureSettings 3/4 1/4 1,1,1 #'()
+    \overrideTimeSignatureSettings 5/8 1/8 2,3 #'()
+    \override BarNumber.font-name = "classico"
+    \phrasingSlurDashPattern #0.5 #2.0
+    \override PhrasingSlur.thickness = 0.5
+    \override StaffSymbol.layer = #4
+    \override Stem.layer = #4
+    \override Beam.layer = #4
+    \override Hairpin.layer = #4
+    \override TimeSignature.layer = #2
+    \override Tie.layer = #1
+    \override TupletBracket.layer = #2
+    \override StringNumber.layer = #2
+    \override TextSpanner.layer = #3
+    \override NoteHead.layer = #4
+    \override Accidental.layer = #4
+    \override TimeSignature.whiteout = 2
+    \override Fermata.outside-staff-priority = 200
+    \numericTimeSignature
+    \romanStringNumbers
+    \override TupletNumber.layer = 4
+    \override TupletNumber.font-shape = #'upright
+    rehearsalMarkFormatter = #rounded-measure-number-mark
+    \remove Text_mark_engraver
+    \remove Mark_engraver
+    \remove Metronome_mark_engraver
+    \remove Instrument_name_engraver
+    \override MultiMeasureRest.expand-limit = 1
+    \override RehearsalMark.break-visibility = #(vector #f #t #t)
+    quotedCueEventTypes = #'(note-event rest-event tie-event beam-event tuplet-span-event)
+
+    %\override PaperColumn.show-horizontal-skylines = ##t
+    %\override NonMusicalPaperColumn.show-horizontal-skylines = ##t
+    %\override VerticalAxisGroup.show-vertical-skylines = ##t
+    %\override System.show-vertical-skylines = ##t
+    %\override PaperColumn.show-horizontal-skylines = ##t
+    %\override VerticalAlignment.show-vertical-skylines = ##t
+
+  }
+  \context {
+    \Staff
+    \consists Page_turn_engraver
+    minimumPageTurnLength = #(ly:make-moment 5/2)
+    \consists Metronome_mark_engraver
+    \remove Instrument_name_engraver
+    \consists Text_mark_engraver
+    pedalSustainStyle = #'bracket
+  }
+  \context {
+    \OneStaff
+    \remove Instrument_name_engraver
+    \consists Time_signature_engraver
+    \remove Clef_engraver
+  }
+  \context {
+    \GrandStaff
+    \remove Instrument_name_engraver
+    \override StaffGrouper.staff-staff-spacing = #'(
+                            (basic-distance . 3)
+                            (padding . 2))
+  }
+  \context {
+    \Voice
+    \remove Instrument_name_engraver
+  }
+}
diff --git a/general/partPaper.ly b/general/partPaper.ly
new file mode 100644 (file)
index 0000000..0e6a7ef
--- /dev/null
@@ -0,0 +1,117 @@
+\paper {
+  line-width = 120
+  #(include-special-characters)
+  footnote-separator-markup = \markup { \left-column { \vspace #0.5 \draw-line #'(6 . 0) } }
+  print-page-number = ##f
+  page-breaking = #ly:page-turn-breaking
+  #(set-paper-size "arch a")
+  print-all-headers = ##f
+  top-margin = 0.5\in
+  bottom-margin = 0.5\in
+  left-margin = 0.625\in
+  right-margin = 0.625\in
+  indent = 0.75\in
+  short-indent = 0\cm
+  ragged-last = ##t
+  #(define fonts (set-global-fonts #:music "scorlatti" #:brace "scorlatti" #:roman "Junicode" #:sans "sans"))
+  max-systems-per-page = #8
+  min-systems-per-page = #2
+  markup-system-spacing = #'((basic-distance . 2) (minimum-distance . 1) (padding . 2))
+  system-system-spacing = #'((basic-distance . 5) (minimum-distance . 3) (padding . 8))
+  score-markup-spacing = #'((basic-distance . 4) (minimum-distance . 3) (padding . 4))
+  score-system-spacing = #'((basic-distance . 0) (minimum-distance . 0) (padding . 0))
+  last-bottom-spacing = #'((basic-distance . 4) (minimum-distance . 2) (padding . 5))
+  tocTitleMarkup = \markup {  }
+  tocItemMarkup = \markup \fill-line {
+    \fill-with-pattern #1.5 #CENTER .
+    \line {
+      \fromproperty #'toc:indent \fromproperty #'toc:text
+    }
+    \sans \fromproperty #'toc:page
+  }
+
+  oddHeaderMarkup = \markup {
+    \concat { \if \on-page #3 \oddhead }
+    \concat { \if \on-page #5 \oddhead }
+    \concat { \if \on-page #7 \oddhead }
+    \concat { \if \on-page #9 \oddhead }
+    \concat { \if \on-page #11 \oddhead }
+    \concat { \if \on-page #13 \oddhead }
+    \concat { \if \on-page #15 \oddhead }
+    \concat { \if \on-page #19 \oddhead }
+    \concat { \if \on-page #21 \oddhead }
+    \concat { \if \on-page #23 \oddhead }
+    \concat { \if \on-page #25 \oddhead }
+    \concat { \if \on-page #27 \oddhead }
+    \concat { \if \on-page #29 \oddhead }
+    \concat { \if \on-page #31 \oddhead }
+    \concat { \if \on-page #33 \oddhead }
+    \concat { \if \on-page #35 \oddhead }
+    \concat { \if \on-page #37 \oddhead }
+    \concat { \if \on-page #39 \oddhead }
+
+  }
+  evenHeaderMarkup = \markup {
+    \concat { \if \on-page #2 \evhead }
+    \concat { \if \on-page #4 \evhead }
+    \concat { \if \on-page #6 \evhead }
+    \concat { \if \on-page #8 \evhead }
+    \concat { \if \on-page #10 \evhead }
+    \concat { \if \on-page #12 \evhead }
+    \concat { \if \on-page #14 \evhead }
+    \concat { \if \on-page #16 \evhead }
+    \concat { \if \on-page #18 \evhead }
+    \concat { \if \on-page #20 \evhead }
+    \concat { \if \on-page #22 \evhead }
+    \concat { \if \on-page #24 \evhead }
+    \concat { \if \on-page #26 \evhead }
+    \concat { \if \on-page #28 \evhead }
+    \concat { \if \on-page #30 \evhead }
+    \concat { \if \on-page #32 \evhead }
+    \concat { \if \on-page #34 \evhead }
+    \concat { \if \on-page #36 \evhead }
+    \concat { \if \on-page #38 \evhead }
+  }
+  oddFooterMarkup = \markup {
+    \concat { \if \on-page #1 \fill-line { \null \xcr \null } }
+    \concat { \if \on-page #3 \oddfoot }
+    \concat { \if \on-page #5 \oddfoot }
+    \concat { \if \on-page #7 \oddfoot }
+    \concat { \if \on-page #9 \oddfoot }
+    \concat { \if \on-page #11 \oddfoot }
+    \concat { \if \on-page #13 \oddfoot }
+    \concat { \if \on-page #15 \oddfoot }
+    \concat { \if \on-page #19 \oddfoot }
+    \concat { \if \on-page #21 \oddfoot }
+    \concat { \if \on-page #23 \oddfoot }
+    \concat { \if \on-page #25 \oddfoot }
+    \concat { \if \on-page #27 \fill-line { \null \concat { \char ##x2767 " " \tiny \typewriter \longHash " " \char ##x2619 } \null } }
+    \concat { \if \on-page #29 \oddfoot }
+    \concat { \if \on-page #31 \oddfoot }
+    \concat { \if \on-page #33 \oddfoot }
+    \concat { \if \on-page #35 \oddfoot }
+    \concat { \if \on-page #37 \oddfoot }
+    \concat { \if \on-page #39 \oddfoot }
+  }
+  evenFooterMarkup = \markup {
+    \concat { \if \on-page #2 \evfoot }
+    \concat { \if \on-page #4 \evfoot }
+    \concat { \if \on-page #6 \evfoot }
+    \concat { \if \on-page #8 \evfoot }
+    \concat { \if \on-page #10 \evfoot }
+    \concat { \if \on-page #12 \evfoot }
+    \concat { \if \on-page #14 \evfoot }
+    \concat { \if \on-page #16 \evfoot }
+    \concat { \if \on-page #18 \evfoot }
+    \concat { \if \on-page #20 \evfoot }
+    \concat { \if \on-page #22 \evfoot }
+    \concat { \if \on-page #24 \evfoot }
+    \concat { \if \on-page #26 \evfoot }
+    \concat { \if \on-page #28 \evfoot }
+    \concat { \if \on-page #30 \evfoot }
+    \concat { \if \on-page #32 \evfoot }
+    \concat { \if \on-page #34 \evfoot }
+    \concat { \if \on-page #36 \evfoot }
+    \concat { \if \on-page #38 \evfoot }
+  }
+}
diff --git a/general/scoreLayout.ly b/general/scoreLayout.ly
new file mode 100644 (file)
index 0000000..a7a50b7
--- /dev/null
@@ -0,0 +1,67 @@
+\layout {
+  \context {
+    \Score
+    \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/14)
+    \override InstrumentName.self-alignment-X = 1
+    \override RehearsalMark.break-visibility = #begin-of-line-invisible
+    \override Hairpin.to-barline = ##f
+    \overrideTimeSignatureSettings 4/4 1/4 1,1,1,1 #'()
+    \overrideTimeSignatureSettings 3/4 1/4 1,1,1 #'()
+    \overrideTimeSignatureSettings 5/8 1/8 2,3 #'()
+    \override CenteredBarNumber.font-name = "classico"
+    \phrasingSlurDashPattern #0.5 #2.0
+    \override PhrasingSlur.thickness = 0.5
+    \override StaffSymbol.layer = #4
+    \override Stem.layer = #4
+    \override Beam.layer = #4
+    \override Hairpin.layer = #4
+    \override TimeSignature.layer = #2
+    \override Tie.layer = #1
+    \override TupletBracket.layer = #2
+    \override StringNumber.layer = #2
+    \override TextSpanner.layer = #3
+    \override NoteHead.layer = #4
+    \override Accidental.layer = #4
+    \override TimeSignature.whiteout = 2
+    \override TextScript.padding = 1
+    \override TextScript.layer = #4
+    \override TextScript.whiteout = 2
+    \override Fermata.outside-staff-priority = 200
+    \numericTimeSignature
+    \romanStringNumbers
+    \override TupletNumber.layer = 4
+    \override TupletNumber.font-shape = #'upright
+    centerBarNumbers = ##t
+    barNumberVisibility = #all-bar-numbers-visible
+    rehearsalMarkFormatter = #rounded-measure-number-mark
+    \override RehearsalMark.break-visibility = #(vector #f #t #t)
+    \override SectionLabel.break-visibility = #(vector #f #t #t)
+    \override CenteredBarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print)
+    \override CenteredBarNumberLineSpanner.direction = #DOWN
+    \remove Text_mark_engraver
+    \remove Mark_engraver
+    \remove Metronome_mark_engraver
+
+    %\override PaperColumn.show-horizontal-skylines = ##t
+    %\override NonMusicalPaperColumn.show-horizontal-skylines = ##t
+    %\override VerticalAxisGroup.show-vertical-skylines = ##t
+    %\override System.show-vertical-skylines = ##t
+    %\override PaperColumn.show-horizontal-skylines = ##t
+    %\override VerticalAlignment.show-vertical-skylines = ##t
+
+  }
+  \context {
+    \Staff
+    \consists Metronome_mark_engraver
+    \consists Text_mark_engraver
+    pedalSustainStyle = #'bracket
+  }
+  \context {
+    \OneStaff
+    \consists Instrument_name_engraver
+    \consists Time_signature_engraver
+  }
+  \context {
+    \Voice
+  }
+}
diff --git a/general/scorePaper.ly b/general/scorePaper.ly
new file mode 100644 (file)
index 0000000..b8c5089
--- /dev/null
@@ -0,0 +1,130 @@
+\paper {
+  line-width = 120
+  first-page-number = -1
+  #(include-special-characters)
+  footnote-separator-markup = \markup { \left-column { \vspace #0.5 \draw-line #'(6 . 0) } }
+  print-page-number = ##f
+  #(set-paper-size "arch a")
+  print-all-headers = ##f
+  top-margin = 0.5\in
+  bottom-margin = 0.5\in
+  left-margin = 0.9\in
+  right-margin = 0.9\in
+  ragged-last = ##t
+  indent = 0.75\in
+  short-indent = 0\cm
+  #(define fonts (set-global-fonts #:music "scorlatti" #:brace "scorlatti" #:roman "Junicode" #:sans "sans"))
+  max-systems-per-page = #10
+  system-system-spacing = #'((basic-distance . 10) (minimum-distance . 8) (padding . 12))
+  score-system-spacing = #'((basic-distance . 2) (minimum-distance . 1) (padding . 0))
+  last-bottom-spacing = #'((basic-distance . 5) (minimum-distance . 5) (padding . 0))
+  tocTitleMarkup = \markup {  }
+  tocItemMarkup = \markup \fill-line {
+    \fill-with-pattern #1.5 #CENTER .
+    \line {
+      \fromproperty #'toc:indent \fromproperty #'toc:text
+    }
+    \sans \fromproperty #'toc:page
+  }
+
+  oddHeaderMarkup = \markup {
+    \concat { \if \on-page #5 \oddhead }
+    \concat { \if \on-page #7 \oddhead }
+    \concat { \if \on-page #9 \oddhead }
+    \concat { \if \on-page #11 \oddhead }
+    \concat { \if \on-page #13 \oddhead }
+    \concat { \if \on-page #15 \oddhead }
+    \concat { \if \on-page #17 \oddhead }
+    \concat { \if \on-page #19 \oddhead }
+    \concat { \if \on-page #21 \oddhead }
+    \concat { \if \on-page #23 \oddhead }
+    \concat { \if \on-page #25 \oddhead }
+    \concat { \if \on-page #27 \oddhead }
+    \concat { \if \on-page #29 \oddhead }
+    \concat { \if \on-page #31 \oddhead }
+    \concat { \if \on-page #33 \oddhead }
+    \concat { \if \on-page #35 \oddhead }
+    \concat { \if \on-page #37 \oddhead }
+    \concat { \if \on-page #39 \oddhead }
+    \concat { \if \on-page #41 \oddhead }
+    \concat { \if \on-page #43 \oddhead }
+    \concat { \if \on-page #45 \oddhead }
+    \concat { \if \on-page #47 \oddhead }
+
+  }
+  evenHeaderMarkup = \markup {
+    \concat { \if \on-page #4 \evhead }
+    \concat { \if \on-page #6 \evhead }
+    \concat { \if \on-page #8 \evhead }
+    \concat { \if \on-page #10 \evhead }
+    \concat { \if \on-page #12 \evhead }
+    \concat { \if \on-page #14 \evhead }
+    \concat { \if \on-page #16 \evhead }
+    \concat { \if \on-page #18 \evhead }
+    \concat { \if \on-page #20 \evhead }
+    \concat { \if \on-page #22 \evhead }
+    \concat { \if \on-page #24 \evhead }
+    \concat { \if \on-page #26 \evhead }
+    \concat { \if \on-page #28 \evhead }
+    \concat { \if \on-page #30 \evhead }
+    \concat { \if \on-page #32 \evhead }
+    \concat { \if \on-page #34 \evhead }
+    \concat { \if \on-page #36 \evhead }
+    \concat { \if \on-page #38 \evhead }
+    \concat { \if \on-page #40 \evhead }
+    \concat { \if \on-page #42 \evhead }
+    \concat { \if \on-page #44 \evhead }
+    \concat { \if \on-page #46 \evhead }
+  }
+  oddFooterMarkup = \markup {
+    \concat { \if \on-page #3 \fill-line { \null \xcr \null } }
+    \concat { \if \on-page #5 \oddfoot }
+    \concat { \if \on-page #7 \oddfoot }
+    \concat { \if \on-page #9 \oddfoot }
+    \concat { \if \on-page #11 \oddfoot }
+    \concat { \if \on-page #13 \oddfoot }
+    \concat { \if \on-page #15 \oddfoot }
+    \concat { \if \on-page #17 \oddfoot }
+    \concat { \if \on-page #19 \oddfoot }
+    \concat { \if \on-page #21 \oddfoot }
+    \concat { \if \on-page #23 \oddfoot }
+    \concat { \if \on-page #25 \oddfoot }
+    \concat { \if \on-page #27 \oddfoot }
+    \concat { \if \on-page #29 \oddfoot }
+    \concat { \if \on-page #31 \oddfoot }
+    \concat { \if \on-page #33 \oddfoot }
+    \concat { \if \on-page #35 \oddfoot }
+    \concat { \if \on-page #37 \oddfoot }
+    \concat { \if \on-page #39 \oddfoot }
+    \concat { \if \on-page #41 \oddfoot }
+    \concat { \if \on-page #43 \oddfoot }
+    \concat { \if \on-page #45 \oddfoot }
+    \concat { \if \on-page #47 \oddfoot }
+  }
+  evenFooterMarkup = \markup {
+    \concat { \if \on-page #2 \evfoot }
+    \concat { \if \on-page #4 \evfoot }
+    \concat { \if \on-page #6 \evfoot }
+    \concat { \if \on-page #8 \evfoot }
+    \concat { \if \on-page #10 \evfoot }
+    \concat { \if \on-page #12 \evfoot }
+    \concat { \if \on-page #14 \evfoot }
+    \concat { \if \on-page #16 \evfoot }
+    \concat { \if \on-page #18 \evfoot }
+    \concat { \if \on-page #20 \evfoot }
+    \concat { \if \on-page #22 \evfoot }
+    \concat { \if \on-page #24 \evfoot }
+    \concat { \if \on-page #26 \evfoot }
+    \concat { \if \on-page #28 \evfoot }
+    \concat { \if \on-page #30 \evfoot }
+    \concat { \if \on-page #32 \evfoot }
+    \concat { \if \on-page #34 \evfoot }
+    \concat { \if \on-page #36 \evfoot }
+    \concat { \if \on-page #38 \evfoot }
+    \concat { \if \on-page #40 \evfoot }
+    \concat { \if \on-page #42 \evfoot }
+    \concat { \if \on-page #44 \evfoot }
+    \concat { \if \on-page #46 \evfoot }
+    \concat { \if \on-page #48 \fill-line { \null \concat { \char ##x2767 " " \tiny \typewriter \longHash " " \char ##x2619 } \null } }
+  }
+}
diff --git a/lib/dynamics.ly b/lib/dynamics.ly
new file mode 100644 (file)
index 0000000..c0b8a5c
--- /dev/null
@@ -0,0 +1,54 @@
+ffsempre =
+#(make-dynamic-script
+  (markup
+    #:combine
+    #:transparent "f" "ff"
+    #:combine
+    #:transparent "f"
+    #:normal-text
+    #:italic "sempre" ))
+
+psempre =
+#(make-dynamic-script
+  (markup
+    "p"
+    #:normal-text
+    #:italic "sempre" ))
+
+ppsempre =
+#(make-dynamic-script
+  (markup
+    #:combine
+    #:transparent "f" "pp"
+    #:combine
+    #:transparent "f"
+    #:normal-text #:italic "sempre" ))
+
+ppsubito =
+#(make-dynamic-script
+  (markup
+    #:combine
+    #:transparent "f" "pp"
+    #:combine #:transparent "f"
+    #:normal-text
+    #:italic "subito" ))
+
+psubito =
+#(make-dynamic-script
+  (markup
+    #:combine
+    #:transparent "f" "p"
+    #:combine
+    #:transparent "f"
+    #:normal-text
+    #:italic "subito" ))
+
+niente =
+#(make-dynamic-script
+  (markup
+    (#:normal-text #:abs-fontsize 10 #:bold "n")))
+
+%spacing
+ds = #2.5
+sods = #3.4
+phds = #3.9
diff --git a/lib/formatting.ly b/lib/formatting.ly
new file mode 100644 (file)
index 0000000..67afc50
--- /dev/null
@@ -0,0 +1,91 @@
+pseudoIndents = % inline alternative to a new \score, also with right-indent
+#(define-music-function (name-tweaks left-indent right-indent)
+  ((markup-list? '()) number? number?)
+  (define (warn-stretched p1 p2) (ly:input-warning (*location*) (G_
+    " pseudoIndents ~s ~s is stretching staff; expect distorted layout") p1 p2))
+  (let* (
+    (narrowing (+ left-indent right-indent)) ; of staff implied by args
+
+    (set-staffsymbol! (lambda (staffsymbol-grob) ; change staff to new width
+      (let* (
+        (left-bound (ly:spanner-bound staffsymbol-grob LEFT))
+        (left-moment (ly:grob-property left-bound 'when))
+        (capo? (moment<=? left-moment ZERO-MOMENT)) ; in first system of score
+        (layout (ly:grob-layout staffsymbol-grob))
+        (lw (ly:output-def-lookup layout 'line-width)) ; debugging info
+        (indent (ly:output-def-lookup layout (if capo? 'indent 'short-indent)))
+        (old-stil (ly:staff-symbol::print staffsymbol-grob))
+        (staffsymbol-x-ext (ly:stencil-extent old-stil X))
+        ;; >=2.19.16's first system has old-stil already narrowed [2]
+        ;; compensate for this (ie being not pristine) when calculating
+        ;; - old leftmost-x (its value is needed when setting so-called 'width)
+        ;; - the new width and position (via local variable narrowing_)
+        (ss-t (ly:staff-symbol-line-thickness staffsymbol-grob))
+        (pristine? (<= 0 (car staffsymbol-x-ext) ss-t)) ; would expect half
+        (leftmost-x (+ indent (if pristine? 0 narrowing)))
+        (narrowing_ (if pristine? narrowing 0)) ; uses 0 if already narrowed
+        (old-width (+ (interval-length staffsymbol-x-ext) ss-t))
+        (new-width (- old-width narrowing_))
+        (new-rightmost-x (+ leftmost-x new-width)) ; and set! this immediately
+        (junk (ly:grob-set-property! staffsymbol-grob 'width new-rightmost-x))
+        (in-situ-stil (ly:staff-symbol::print staffsymbol-grob))
+        (new-stil (ly:stencil-translate-axis in-situ-stil narrowing_ X))
+       ;(new-stil (stencil-with-color new-stil red)) ; for when debugging
+        (new-x-ext (ly:stencil-extent new-stil X)))
+      (ly:grob-set-property! staffsymbol-grob 'stencil new-stil)
+      (ly:grob-set-property! staffsymbol-grob 'X-extent new-x-ext)
+      )))
+
+    (set-X-offset! (lambda (margin-grob) ; move grob across to line start
+      (let* (
+        (old (ly:grob-property-data margin-grob 'X-offset))
+        (new (lambda (grob) (+ (if (procedure? old) (old grob) old) narrowing))))
+      (ly:grob-set-property! margin-grob 'X-offset new))))
+
+    (tweak-text! (lambda (i-name-grob mkup) ; tweak both instrumentname texts
+      (if (and (markup? mkup) (not (string=? (markup->string mkup) "*")))
+      (begin
+        (ly:grob-set-property! i-name-grob 'long-text mkup)
+        (ly:grob-set-property! i-name-grob 'text mkup)
+        )))) ; else retain existing text
+
+    (install-narrowing (lambda (leftedge-grob) ; on staves, + adapt left margin
+      (let* (
+        (sys (ly:grob-system leftedge-grob))
+        (all-grobs (ly:grob-array->list (ly:grob-object sys 'all-elements)))
+        (grobs-named (lambda (name)
+          (filter (lambda (x) (eq? name (grob::name x))) all-grobs)))
+        (first-leftedge-grob (list-ref (grobs-named 'LeftEdge) 0))
+        (relsys-x-of (lambda (g) (ly:grob-relative-coordinate g sys X)))
+        (leftedge-x (relsys-x-of first-leftedge-grob))
+        (leftedged? (lambda (g) (= (relsys-x-of g) leftedge-x)))
+        (leftedged-ss (filter leftedged? (grobs-named 'StaffSymbol))))
+      (if (eq? leftedge-grob first-leftedge-grob) ; ignore other leftedges [1]
+       (begin
+         (for-each set-staffsymbol! leftedged-ss)
+         (for-each set-X-offset! (grobs-named 'SystemStartBar))
+         (for-each set-X-offset! (grobs-named 'InstrumentName))
+         (for-each tweak-text! (grobs-named 'InstrumentName) name-tweaks)
+       ))))))
+
+  (if (negative? narrowing) (warn-stretched left-indent right-indent))
+  #{ % and continue anyway
+    % ensure that these overrides are applied only at begin-of-line
+    \break % (but this does not exclude unsupported multiple application)
+    % give the spacing engine notice regarding the loss of width for music
+    \once \override Score.LeftEdge.X-extent = #(cons narrowing narrowing)
+    % discard line start region of staff and reassemble left-margin elements
+    \once \override Score.LeftEdge.after-line-breaking = #install-narrowing
+    % shift the system to partition the narrowing between left and right
+    \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
+    .X-offset #(- right-indent)
+    % prevent a leftmost barnumber entering a stretched staff
+    \once \override Score.BarNumber.horizon-padding = #(max 1 (- 1 narrowing))
+  #}))
+
+pseudoIndent = % for changing just left-indent
+#(define-music-function (name-tweaks left-indent)
+  ((markup-list? '()) number?)
+  #{
+    \pseudoIndents $name-tweaks $left-indent 0
+  #})
diff --git a/lib/load.ly b/lib/load.ly
new file mode 100644 (file)
index 0000000..338be5c
--- /dev/null
@@ -0,0 +1,6 @@
+\include "dynamics.ly"
+\include "formatting.ly"
+\include "notes.ly"
+\include "spanners.ly"
+\include "text.ly"
+\include "matter.ly"
diff --git a/lib/matter.ly b/lib/matter.ly
new file mode 100644 (file)
index 0000000..5f03251
--- /dev/null
@@ -0,0 +1,224 @@
+xumbel =
+\markup {
+  \center-column {
+    \path #0.1
+    #'(
+        (moveto 0 0)
+        (curveto 1 0.3 3.6 3 4.2 1.6)
+        (moveto 0 0)
+        (curveto -1 0.3 -3.6 3 -4.2 1.6)
+        (moveto 0 0)
+        (curveto 0.9 0.3 2.9 3 3.5 1.7)
+        (moveto 0 0)
+        (curveto -0.9 0.3 -2.9 3 -3.5 1.7)
+        (moveto 0 0)
+        (curveto 0.8 0.3 2.2 3 2.8 1.8)
+        (moveto 0 0)
+        (curveto -0.8 0.3 -2.2 3 -2.8 1.8)
+        (moveto 0 0)
+        (curveto 0.6 0.3 1.5 3 2.1 1.9)
+        (moveto 0 0)
+        (curveto -0.6 0.3 -1.5 3 -2.1 1.9)
+        (moveto 0 0)
+        (curveto 0.4 0.3 0.8 3 1.4 2)
+        (moveto 0 0)
+        (curveto -0.4 0.3 -0.8 3 -1.4 2)
+        (moveto 0 0)
+        (curveto 0.2 0.3 0.5 3 0.7 2.1)
+        (moveto 0 0)
+        (curveto -0.2 0.3 -0.5 3 -0.7 2.1)
+        (moveto 0 0)
+        (lineto 0 2.2)
+    )
+    \vspace #-0.035
+    \override #'(height . 0.25) \draw-squiggle-line #1 #'(0 . 5) ##f
+    \vspace #-0.275
+  }
+}
+
+#(define (outside-cover-markuplist bottom-space)
+   #{
+     \markuplist {
+       \fill-line {
+         \line { \null }
+         \center-column { \line { \with-url #"https://newer.systems" \fontsize #1 \hbracket \sans \bold "  https://newer.systems  " } }
+         \line { \null }
+         \line { \null }
+         \line { \null }
+         \line { \null }
+       }
+       \fill-line {
+         \line { \null }
+         \center-column { \line { \null } }
+         \right-column {
+           \vspace #15
+           \line { \fontsize #8 \bold \underline \xtitle }
+           \line { \fontsize #3 \sans \xcomp }
+           \vspace #3
+           \line { \fontsize #2 \sans \concat { \xsub } }
+         }
+       }
+       \vspace #bottom-space
+       \fill-line {
+         \line { \null }
+         \line { \null }
+         \line { \null }
+         \line { \null }
+         \center-column { \xumbel \vspace #0.3 \line { \fontsize #1 \hbracket \sans \bold "  umbel press  " } }
+         \line { \null }
+       }
+     }
+   #})
+
+#(define (inside-cover-markuplist)
+   #{
+      \markuplist {
+        \fill-line {
+          \line { \null }
+          \center-column {
+            \vspace #10
+            \line { \hbracket \fontsize #10 \number \xyear }
+            \vspace #4
+            \line { \xcomp  }
+            \vspace #1
+            \line { \fontsize #5 \bold  \xtitle }
+            \line { \italic \xsub }
+            \vspace #4
+          }
+          \right-column { \line { \null }
+        }
+      }
+    }
+  #})
+
+#(define (info-matter-markuplist)
+  #{
+    \markuplist {
+      \left-column {
+        \line { \bold \xtitle \concat { " [" \sans \xyear "]" } }
+        \line { \xinst " | " \xdur }
+        \line { \xcomp }
+        \vspace #25
+      }
+    }
+  #})
+
+#(define (git-matter-markuplist)
+  #{
+    \markuplist {
+      \right-column {
+        \vspace #-0.5
+        \right-column \fontsize #-1 {
+          \line { \fontsize #-2 \typewriter { \shortHash - \subject } }
+          \vspace #-0.4
+          \line { \fontsize #-2 \typewriter { \commitDate } }
+          \vspace #-0.4
+          \line { \fontsize #-2 \typewriter { \branchName } }
+        }
+        \vspace #2
+      }
+    }
+  #})
+
+#(define (rear-cover-markuplist top-space)
+  #{
+    \markuplist {
+      \fill-line {
+        \center-column {
+          \vspace #top-space
+          \xumbel
+          \vspace #0.3
+          \line { \with-url #"https://www.jwpepper.com/myscore/umbel-press" \fontsize #-3 \hbracket \sans \bold "  https://www.jwpepper.com/myscore/umbel-press  " }
+        }
+      }
+    }
+  #})
+
+#(define (toc-markuplist)
+  #{
+    \markuplist {
+      \left-column {
+        \override #'(line-width . 100)
+        \line { \hspace #100 }
+        \vspace #-1
+        \wordwrap { \char ##x10AF1 \hspace #0.5 \large \bold \sans "contents" }
+      }
+      \vspace #0.5
+      \left-column {
+        \override #'(line-width . 90)
+        \table-of-contents
+      }
+      \vspace #2.5
+    }
+  #})
+
+#(define (program-notes-markuplist notes-markup)
+  #{
+    \markuplist {
+      \left-column {
+        \override #'(line-width . 100)
+        \line { \hspace #100 }
+        \vspace #-1
+        \wordwrap { \char ##x10AF1 \hspace #0.5 \large \bold \sans "program notes" }
+      }
+      \vspace #0.5
+      \left-column {
+        \override #'(line-width . 90)
+        \justify { #notes-markup }
+      }
+      \vspace #2.5
+    }
+  #})
+
+#(define (performance-notes-markuplist notes-markup)
+  #{
+    \markuplist {
+      \left-column {
+        \override #'(line-width . 100)
+        \line { \hspace #100 }
+        \vspace #-1
+        \wordwrap { \char ##x10AF1 \hspace #0.5 \large \bold \sans "performance notes" }
+      }
+      #notes-markup
+    }
+  #})
+
+
+oddhead =
+\markup {
+  \fill-line {
+    \null
+    \center-column { \bold { \xcomp } "  " }
+    \null
+  }
+}
+evhead =
+\markup {
+  \fill-line {
+    \null
+    \center-column { \bold { \xtitle } "  " }
+    \null
+  }
+}
+oddfoot =
+\markup {
+  \fill-line {
+    \null
+    \center-column {
+      " "
+      \concat { \tiny \char ##x1F661 " " \sans \fromproperty #'page:page-number-string " " \tiny \char ##x1F663 }
+    }
+    \null
+  }
+}
+evfoot =
+\markup {
+  \fill-line {
+    \null
+    \center-column {
+      " "
+      \concat { \tiny \char ##x1F661 " " \sans \fromproperty #'page:page-number-string " " \tiny \char ##x1F663 }
+    }
+    \null
+  }
+}
diff --git a/lib/notes.ly b/lib/notes.ly
new file mode 100644 (file)
index 0000000..55a9275
--- /dev/null
@@ -0,0 +1,74 @@
+harm =
+\once \override Staff.NoteHead.style = #'harmonic-mixed
+
+glissandoSkipOn =
+{
+  \override NoteColumn.glissando-skip = ##t
+  \hide NoteHead
+  \override NoteHead.no-ledgers = ##t
+}
+
+glissandoSkipOff =
+{
+  \revert NoteColumn.glissando-skip
+  \undo \hide NoteHead
+  \revert NoteHead.no-ledgers
+}
+
+circle = \tweak NoteHead.stencil
+  #(lambda (grob)
+    (let* ((note (ly:note-head::print grob))
+           (combo-stencil (ly:stencil-add
+               note
+               (circle-stencil note 0.1 0.8))))
+          (ly:make-stencil (ly:stencil-expr combo-stencil)
+            (ly:stencil-extent note X)
+            (ly:stencil-extent note Y))))
+  \etc
+
+#(define (circular-arrow-script grob)
+   (let* ((circle
+           (ly:stencil-circle 0.7 0.12 #f))
+          (arrow
+           (ly:stencil-rotate
+            (ly:make-stencil
+             '((moveto 0 0)
+               (lineto 0.35 0.18)
+               (lineto 0.35 -0.18)
+               (closepath))
+             '(0 . 0) '(0 . 0))
+            (* pi 1.25))))
+     (ly:stencil-add
+      circle
+      (ly:stencil-translate arrow '(0.35 . 0.35)))))
+
+
+#(define (parenthesize-callback callback)
+   (define (parenthesize-stencil grob)
+     (let* ((fn (ly:grob-default-font grob))
+            (pclose (ly:font-get-glyph fn "accidentals.rightparen"))
+            (popen (ly:font-get-glyph fn "accidentals.leftparen"))
+            (subject (callback grob))
+            ;; get position of stem
+            (stem-pos (ly:grob-property grob 'stem-attachment))
+            ;; remember old size
+            (subject-dim-x (ly:stencil-extent subject X))
+            (subject-dim-y (ly:stencil-extent subject Y)))
+
+       ;; add parens
+       (set! subject
+             (ly:stencil-combine-at-edge
+              (ly:stencil-combine-at-edge subject X RIGHT pclose 0)
+              X LEFT popen 0))
+
+       ;; adjust stem position
+       (set! (ly:grob-property grob 'stem-attachment)
+             (cons (- (car stem-pos) 0.43) (cdr stem-pos)))
+
+       ;; adjust size
+       (ly:make-stencil
+        (ly:stencil-expr subject)
+        (interval-widen subject-dim-x 0.5)
+        subject-dim-y)))
+
+   parenthesize-stencil)
diff --git a/lib/spanners.ly b/lib/spanners.ly
new file mode 100644 (file)
index 0000000..dd1af81
--- /dev/null
@@ -0,0 +1,71 @@
+timeSpanner =
+#(define-music-function (left) (string?)
+  #{
+    \once {
+      \override TextSpanner.staff-padding = 2
+      \override TextSpanner.outside-staff-priority = 1000
+      \override TextSpanner.style = #'dashed-line
+      \override TextSpanner.dash-period = 3
+      \override TextSpanner.dash-fraction = 0.25
+      \override TextSpanner.font-size = #1
+      \override TextSpanner.font-shape = #'upright
+      \override TextSpanner.bound-details.left.text = \markup { \magnify #1 \bold \roman $left }
+      \override TextSpanner.bound-details.left-broken.text = ##f
+      \override TextSpanner.bound-details.right-broken.text = ##f
+      \override TextSpanner.bound-details.right.padding = #-1
+    }
+  #})
+
+markSpanner =
+#(define-music-function (left right) (string? string?)
+  #{
+    \once {
+      \override TextSpanner.style = #'dashed-line
+      \override TextSpanner.outside-staff-priority = 550
+      \override TextSpanner.dash-period = 2
+      \override TextSpanner.dash-fraction = 0.5
+      \override TextSpanner.font-size = #0.25
+      \override TextSpanner.bound-details.left.text =
+      \markup { \general-align #Y #0 { $left \hspace #0.25 } }
+      \override TextSpanner.bound-details.right.text =
+      \markup { \general-align #Y #0 { \arrow-head #X #RIGHT ##f $right } }
+      \override TextSpanner.bound-details.left-broken.text = ##f
+      \override TextSpanner.bound-details.right-broken.text = ##f
+      \override TextSpanner.bound-details.right.padding = #1
+    }
+  #})
+
+stringNumberSpanner =
+#(define-music-function (StringNumber) (string?)
+  #{
+    \once {
+      \override TextSpanner.style = #'solid
+      \override TextSpanner.outside-staff-priority = 150
+      \override TextSpanner.font-size = #-3
+      \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
+      \override TextSpanner.bound-details.left.text = \markup { $StringNumber \hspace #0.25 }
+      \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -1) }
+      \override TextSpanner.bound-details.right-broken.text = ##f
+      \override TextSpanner.avoid-slur = #'ignore
+      \override TextSpanner.bound-details.right.padding = #-2
+    }
+  #})
+
+sustainGradual =
+-\tweak edge-height #'(0 . 1)
+-\tweak self-alignment-Y #DOWN
+-\tweak style #'dashed-line
+-\tweak stencil
+#(lambda (grob)
+  (let* (
+      (sten (ly:piano-pedal-bracket::print grob))
+      (xex (ly:stencil-extent sten X))
+      (yex (ly:stencil-extent sten Y))
+      (cresc? (eqv? (ly:grob-property grob 'grow-direction) LEFT)))
+    (ly:line-interface::line grob
+      (car xex) (if cresc? (car yex) (cdr yex))
+      (cdr xex) (if cresc? (cdr yex) (car yex)))))
+\etc
+
+sustainGradualOn = -\sustainGradual \<
+sustainGradualOff = -\sustainGradual \>
diff --git a/lib/text.ly b/lib/text.ly
new file mode 100644 (file)
index 0000000..091ba48
--- /dev/null
@@ -0,0 +1,17 @@
+pizz =      ^\markup { "pizz" }
+arco =      ^\markup { "arco" }
+colLegno =  ^\markup { "col legno" }
+conSord =   ^\markup { "con sord." }
+senSord =   ^\markup { "senza sord." }
+pont =      ^\markup { \italic "sul pont." }
+tasto =     ^\markup { \italic "sul tasto" }
+ord =       ^\markup { \italic "ord." }
+flautando = ^\markup { \italic "flautando" }
+
+#(define (rounded-measure-number-mark mark context)
+  (let ((bar (ly:context-property context 'currentBarNumber)))
+    (markup
+      #:rounded-box
+      #:bold
+      #:sans
+      (number->string bar))))
diff --git a/manuscripts/cello.ly b/manuscripts/cello.ly
new file mode 100644 (file)
index 0000000..6ab7a34
--- /dev/null
@@ -0,0 +1,60 @@
+% root = ../string-quartet.ly
+celloMusic =
+\relative {
+  \set harmonicDots = ##t
+  \tag #'part { \compressEmptyMeasures }
+  \clef bass
+  r8. <c' f\harmonic>16~\ppsempre^\markup { "detached" } <c f\harmonic>8 <c g'\harmonic>8~ <c g'\harmonic>4~ <c g'\harmonic>8 <des aes'\harmonic>8~ |
+  <des aes'\harmonic>2~ <des aes'\harmonic>8 <ees aes\harmonic>4.~ |
+  <ees aes\harmonic>4 r4 r2 |
+  r8. <gis, cis\harmonic>16~ <gis cis\harmonic>2~ <gis cis\harmonic>8.
+  <gis dis'\harmonic>16~ <gis dis'\harmonic>8
+  <a e'\harmonic>8~ <a e'\harmonic>4
+  <b e\harmonic>2~ |
+  <b e\harmonic>2~ <b e\harmonic>4 r4 r4 |
+  \clef tenor
+  r8.
+  <fis' b\harmonic>16~ <fis b\harmonic>4~ <fis b\harmonic>8.
+  <fis cis'\harmonic>16~ <fis cis'\harmonic>4~ <fis cis'\harmonic>16
+  d8.~\flageolet\2
+  <d a'>2.~\flageolet\1 |
+  1 r4 cis4~\mp\> |
+  cis8.\glissando d16~\p\< d2~ d8. a'16~ |
+  a8 bes8~ bes4~ bes8 \clef treble f'8->\mf f4~\> |
+  f2 \clef bass g,,,2~(\open\pp \tuplet 3/2 { g8 fis8 g8 } \tuplet 3/2 { fis8 g8 fis8 } g8 <g fis>8~ |
+  8) r16 \clef tenor
+  g''16~->\mf g4~ g16 fis8.-> gis4~-> |
+  gis4 a2.->\laissezVibrer\pizz |
+  R1*6/4 \clef bass |
+  r8. gis,16~->\arco gis4~ gis8. a16~-> a4~ |
+  a4~ a8. e16~-> e8 f8~-> f4~ |
+  f2.~ f2 |
+  r8. des'16~-> des4~ des16 c8.-> ees4~-> |
+  ees2 d2~-> |
+  d2 r2 |
+  r8. ees,16~-> ees2~ ees8. d16\laissezVibrer\pizz |
+  r4 r16 b8.~->\arco b4~ b16 bes8.~-> |
+  bes2 r4 |
+  r8. <f' bes\harmonic>16~\p <f bes\harmonic>4~ <f bes\harmonic>8. <fis b\harmonic>16~\startTrillSpan^\markup { "trill harmonic" }
+  <fis b\harmonic>8\stopTrillSpan
+  <fis cis'\harmonic>8~ <fis cis'\harmonic>4
+  \after 4. \stopTrillSpan d'4.~\1\harmonic\startTrillSpan d8~\harmonic d4~\harmonic
+  d2\harmonic |
+  r8. <cis, fis\harmonic>16~\mp <cis fis\harmonic>8 d'8~\1\harmonic\startTrillSpan d2~\harmonic |
+  d8\harmonic <gis, cis\harmonic>4.\stopTrillSpan e'2\1\harmonic r8 e8(
+  gis,8.) g16~->\mf\< g4~ g16 d'8.~-> d4~ |
+  d16 ees8.~ ees2~ ees16 bes'8.(->\f |
+  g,8.)
+}
+\addQuote "cello" { \removeWithTag #'score \celloMusic }
+
+celloStaff =
+#(define-music-function (music) (ly:music?)
+  #{ \new Staff = "cello"
+    \with {
+      instrumentName = \markup { "cello " }
+      shortInstrumentName = \markup { "vc " }
+      \override DynamicLineSpanner.staff-padding = \sods
+    }
+    << $music >>
+  #})
diff --git a/manuscripts/tempoMap.ly b/manuscripts/tempoMap.ly
new file mode 100644 (file)
index 0000000..a2dab6e
--- /dev/null
@@ -0,0 +1,27 @@
+% root = ../string-quartet.ly
+tempoMap =
+\new Voice \with {
+  \consists Mark_engraver
+  \remove Clef_engraver
+}
+{
+  \tempo "Lontano" 4=64
+  \time 4/4 s1*5 |
+  \time 5/4 s1*5/4 |
+  \time 4/4 s1*2 |
+  \time 6/4 s1*6/4 |
+  \time 4/4 s1*2 |
+  \time 7/4 s1*7/4 |
+  \time 4/4 s1*2 |
+  \time 6/4 s1*6/4 |
+  \time 4/4 s1*2 |
+  \time 5/4 s1*5/4 |
+  \time 4/4 s1*5 |
+  \time 3/4 s1*3/4 |
+  \time 4/4 s1*2 |
+  \time 2/4 s1*2/4 |
+  \time 4/4 s1 |
+  \time 5/4 s1*5/4 |
+  \time 4/4 s1*3 |
+
+}
diff --git a/manuscripts/viola.ly b/manuscripts/viola.ly
new file mode 100644 (file)
index 0000000..f017a81
--- /dev/null
@@ -0,0 +1,59 @@
+% root = ../string-quartet.ly
+violaMusic =
+\relative {
+  \set harmonicDots = ##t
+  \tag #'part { \compressEmptyMeasures }
+  \clef alto
+  r8. <c' f\harmonic>16~\ppsempre^\markup { "detached" } <c f\harmonic>4~ <c f\harmonic>8. <c g'\harmonic>16~ <c g'\harmonic>4~ |
+  <c g'\harmonic>4~ <c g'\harmonic>8. <des aes'\harmonic>16~ <des aes'\harmonic>4~ <des aes'\harmonic>16 <ees aes\harmonic>8.~ |
+  <ees aes\harmonic>2 r2 |
+  r8. <gis, cis\harmonic>16~ <gis cis\harmonic>8 <gis dis'\harmonic>8~ <gis dis'\harmonic>4~ <gis dis'\harmonic>8 <a e'\harmonic>8~
+  <a e'\harmonic>2~ <a e'\harmonic>8 <b e\harmonic>4.~ |
+  <b e\harmonic>2~ <b e\harmonic>2. |
+  r8.
+  <fis' b\harmonic>16~ <fis b\harmonic>4~ <fis b\harmonic>16
+  <fis cis'\harmonic>8.~ <fis cis'\harmonic>4~ <fis cis'\harmonic>4~ <fis cis'\harmonic>16
+  <g d'\harmonic>8.~ <g d'\harmonic>4~ <g d'\harmonic>16
+  d'8.~\harmonic\1 |
+  d4\harmonic r4 r4 r2. |
+  r8.
+  g,16~\harmonic\2 g4~\harmonic g8.\harmonic
+  a16~\harmonic\2 a4~\harmonic a16\harmonic
+  <ees bes'\harmonic>8.
+  <f bes\harmonic>2. |
+  R1*7/4
+  r8.
+  g16~\mf g8 fis8\pizz\laissezVibrer r2 |
+  r8 gis8~\arco gis4 a2~ |
+  a1. |
+  r8. gis16~-> gis4~ gis16 a8.-> e4~-> |
+  e4 f2.\laissezVibrer\pizz |
+  r2 \tuplet 3/2 { r8 r8 a,8~(\<\arco } \tuplet 3/2 { a8\glissando f4\> } \tuplet 3/2 { f8)\! gis8(\<\glissando e8~\f } |
+  e8.) des16~-> des2~ des8. c16~-> |
+  c4~ c8. ees16~-> ees8 d'8~-> d4~ |
+  d4 r4 r2 |
+  r8. ees16~->\mf ees4~ ees16 c8.-> b4~-> |
+  b2 bes2~-> |
+  bes2. |
+  r8. <bes f'\harmonic>16~\p <bes f'\harmonic>4~ <bes f'\harmonic>8. <b fis'\harmonic>16~ <b fis'\harmonic>8 <cis fis\harmonic>8~\startTrillSpan^\markup { "trill harmonic" }
+  \after 4. \stopTrillSpan <cis fis\harmonic>2 r8 \clef treble a''4.~ |
+  a4 r4 \clef alto |
+  r8. <cis,, fis\harmonic>16~\mp <cis fis\harmonic>4~ <cis fis\harmonic>8. <g c\harmonic>16~\startTrillSpan
+  <g c\harmonic>8 <gis cis\harmonic>8~\stopTrillSpan
+  <gis cis\harmonic>4 d''2~\harmonic\1 d2\harmonic |
+  r8. c,16~\harmonic\3 c2~\harmonic c8.\harmonic g'16~\harmonic\2 |
+  g4~\harmonic g16\harmonic <ees aes\harmonic>8.\startTrillSpan <ees bes'\harmonic>2~\stopTrillSpan |
+  <ees bes'\harmonic>8.
+}
+
+violaStaff =
+#(define-music-function (music) (ly:music?)
+  #{
+    \new Staff = "viola"
+    \with {
+      instrumentName = \markup { "viola " }
+      shortInstrumentName = \markup { "vla " }
+      \override DynamicLineSpanner.staff-padding = \sods
+    }
+    << $music >>
+  #})
diff --git a/manuscripts/violin1.ly b/manuscripts/violin1.ly
new file mode 100644 (file)
index 0000000..737cc15
--- /dev/null
@@ -0,0 +1,62 @@
+% root = ../string-quartet.ly
+violinOneMusic =
+\relative {
+  \set harmonicDots = ##t
+  \tag #'part { \compressEmptyMeasures }
+  \clef treble
+  r8. <c' f\harmonic>16~\pp^\markup { "detached" } <c f\harmonic>4~ <c f\harmonic>4~ <c f\harmonic>8. <c g'\harmonic>16~ | %001-002
+  <c g'\harmonic>8 <des aes'\harmonic>8~ <des aes'\harmonic>4 <ees aes\harmonic>2 |
+  r2 r16 c'8.~(\tasto\< c8\glissando g'8~\mp\> |
+  g8.) gis16~\p gis4~ gis16 dis8.~ dis4~ |
+  dis16 e8. b'2.(~\< |
+  b2 <b fis>2.)\mp |
+  r8.
+  <fis, b\harmonic>16~\ppsempre <fis b\harmonic>2~ <fis b\harmonic>8.
+  <fis cis'\harmonic>16~ <fis cis'\harmonic>8
+  <g d'\harmonic>8~ <g d'\harmonic>4~ <g d'\harmonic>8
+  d'4.~\harmonic\2 |
+  d1.\harmonic |
+  r8.
+  g,16~\harmonic\3 g8\harmonic
+  a8~\harmonic\3 a4\harmonic
+  <ees bes'\harmonic>4~ <ees bes'\harmonic>2
+  <f bes\harmonic>2 |
+  R1*7/4
+  r8.
+  g16~\mf g4~ g8. fis16~ fis4~ |
+  fis4~ fis8. gis16~ gis8 a4.~ |
+  a2. r2.
+  r8. gis16~-> gis8 a8~-> a4~ a8 e8~-> |
+  e4 f2.~-> |
+  f2 r4 r2 |
+  r8. des16~-> des2~ des8. c16\laissezVibrer\pizz |
+  r4 r16 ees8.~->\arco ees4~ ees16 d8.~-> |
+  d1 |
+  r8. ees16~-> ees4 ees8. d16~-> d4~ |
+  d16 b8.~-> b2~ b16 bes8.\laissezVibrer\pizz |
+  R1*3/4 |
+  r8. f''16~\p\arco f8 fis8\laissezVibrer\pizz r2 |
+  r8 cis'4.\arco a2~ |
+  a2 |
+  r8. <cis,, fis\harmonic>16~\mp <cis fis\harmonic>8 a'8~\harmonic\3 a4\harmonic <cis, gis'\harmonic>4~ |
+  <cis gis'\harmonic>4
+  <d a\harmonic>2~\startTrillSpan
+  <d a\harmonic>2\stopTrillSpan
+  r8. <g c\harmonic>16~\mf <g c\harmonic>2~ <g c\harmonic>8. <d g\harmonic>16~\startTrillSpan |
+  <d g\harmonic>4~ <d g\harmonic>8.\stopTrillSpan <ees aes\harmonic>16~ <ees aes\harmonic>4~ <ees aes\harmonic>16 <ees bes'\harmonic>8.~ |
+  8.
+
+}
+\addQuote "violin1" { \removeWithTag #'score \violinOneMusic }
+
+violinOneStaff =
+#(define-music-function (music) (ly:music?)
+  #{
+    \new Staff = "violin1"
+    \with {
+      instrumentName = \markup { "violin I " }
+      shortInstrumentName = \markup { "vl I " }
+      \override DynamicLineSpanner.staff-padding = \sods
+    }
+    << $music >>
+  #})
diff --git a/manuscripts/violin2.ly b/manuscripts/violin2.ly
new file mode 100644 (file)
index 0000000..3e4aed4
--- /dev/null
@@ -0,0 +1,57 @@
+% root = ../string-quartet.ly
+violinTwoMusic =
+\relative {
+  \set harmonicDots = ##t
+  \tag #'part { \compressEmptyMeasures }
+  \clef treble
+  r8. <c' f\harmonic>16~\ppsempre^\markup { "detached" } <c f\harmonic>4~ <c f\harmonic>16 <c g'\harmonic>8.~ <c g'\harmonic>4~ | %001
+  <c g'\harmonic>16 <des aes'\harmonic>8. <ees aes\harmonic>2.~ |
+  <ees aes\harmonic>1 |
+  r8. <gis, cis\harmonic>16~ <gis cis\harmonic>4~ <gis cis\harmonic>8. <gis dis'\harmonic>16~ <gis dis'\harmonic>4~ |
+  <gis dis'\harmonic>4~ <gis dis'\harmonic>8. <a e'\harmonic>16~ <a e'\harmonic>4~ <a e'\harmonic>16 <b e\harmonic>8.~ |
+  <b e\harmonic>4 r4 r2. |
+  r8.
+  <fis' b\harmonic>16~ <fis b\harmonic>8
+  <fis cis'\harmonic>8~ <fis cis'\harmonic>4
+  <g d'\harmonic>4~ <g d'\harmonic>2
+  d'2~\harmonic\2 |
+  d2.\harmonic r4 r2 |
+  r8.
+  g,16~\harmonic\3 g4~\harmonic g16\harmonic
+  a8.~\harmonic\3 a4~\harmonic a4~\harmonic a16\harmonic
+  <ees bes'\harmonic>8.~ <ees bes'\harmonic>4~ <ees bes'\harmonic>16
+  <f bes\harmonic>8. |
+  R1*7/4
+  r8.
+  g16~->\mf g8 fis8~-> fis4~ fis8 gis8~-> |
+  gis4 a2.~-> |
+  a4 r4 r4 r2. |
+  r8. gis16~-> gis8 a8\laissezVibrer\pizz r2 |
+  r8 e8~->\arco e4 f2~-> |
+  f2. r2 |
+  r8. des16~-> des4~ des8. c16~-> c4~ |
+  c16 ees8.~-> ees2~ ees16 d8.\laissezVibrer\pizz
+  R1 |
+  r8. ees16~-> ees2~ ees8. d16~-> |
+  d4~ d8. b16~-> b8 bes8~-> bes4~ |
+  bes8 r8 \tuplet 3/2 { d4(\glissando\> b'8~ } \tuplet 3/2 { b8) bes4~ } |
+  bes8.\glissando f16~\mp f8 fis8~ fis4\glissando cis'4~ |
+  cis4 a2.\harmonic\3 |
+  R1*2/4
+  r8. <cis, fis\harmonic>16~\mp <cis fis\harmonic>4~ <cis fis\harmonic>8. a'16~\harmonic\3 a8\harmonic <gis, cis\harmonic>8~ |
+  <gis cis\harmonic>2 r8 <e' a\harmonic>8~ <e a\harmonic>2
+  r8. <c g'\harmonic>16~\mf <c g'\harmonic>4~ <c g'\harmonic>16 <d g\harmonic>8.~\startTrillSpan <d g\harmonic>4~ |
+  <d g\harmonic>4~ <d g\harmonic>16\stopTrillSpan <ees aes\harmonic>8. <bes ees\harmonic>2~ | <bes ees\harmonic>8.
+}
+
+violinTwoStaff =
+#(define-music-function (music) (ly:music?)
+  #{
+    \new Staff = "violin2"
+    \with {
+      instrumentName = \markup { "violin II " }
+      shortInstrumentName = \markup { "vl II " }
+      \override DynamicLineSpanner.staff-padding = \sods
+    }
+    << $music >>
+  #})
diff --git a/parts/parts_string-quartet.ly b/parts/parts_string-quartet.ly
new file mode 100644 (file)
index 0000000..e3371f8
--- /dev/null
@@ -0,0 +1,84 @@
+\version "2.24.4"
+
+\include "../general/info.ly"
+\include "../lib/load.ly"
+\include "../general/partPaper.ly"
+\include "../general/partLayout.ly"
+
+\include "../manuscripts/tempoMap.ly"
+\include "../manuscripts/violin1.ly"
+\include "../manuscripts/violin2.ly"
+\include "../manuscripts/viola.ly"
+\include "../manuscripts/cello.ly"
+
+#(define output-suffix "violinI")
+\book {
+  \bookpart {
+    \header {
+      title = \markup { \fontsize #1 \xtitle }
+      subtitle = \markup { \medium \italic \xsub }
+      composer = \xcomp
+      poet = \markup { "violin I" }
+      arranger = \markup { \tiny \typewriter { \shortHash - \branchName } }
+    }
+    \score {
+      <<
+        \violinOneStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \violinOneMusic >>
+      >>
+    }
+  }
+}
+
+#(define output-suffix "violinII")
+\book {
+  \bookpart {
+    \header {
+      title = \markup { \fontsize #1 \xtitle }
+      subtitle = \markup { \medium \italic \xsub }
+      composer = \xcomp
+      poet = \markup { "violin II" }
+      arranger = \markup { \tiny \typewriter { \shortHash - \branchName } }
+    }
+    \score {
+      <<
+        \violinTwoStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \violinTwoMusic >>
+      >>
+    }
+  }
+}
+
+#(define output-suffix "viola")
+\book {
+  \bookpart {
+    \header {
+      title = \markup { \fontsize #1 \xtitle }
+      subtitle = \markup { \medium \italic \xsub }
+      composer = \xcomp
+      poet = \markup { "viola" }
+      arranger = \markup { \tiny \typewriter { \shortHash - \branchName } }
+    }
+    \score {
+      <<
+        \violaStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \violaMusic >>
+      >>
+    }
+  }
+}
+
+#(define output-suffix "cello")
+\book {
+  \bookpart {
+    \header {
+      title = \markup { \fontsize #1 \xtitle }
+      subtitle = \markup { \medium \italic \xsub }
+      composer = \xcomp
+      poet = \markup { "cello" }
+      arranger = \markup { \tiny \typewriter { \shortHash - \branchName } }
+    }
+    \score {
+      <<
+        \celloStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \celloMusic >>
+      >>
+    }
+  }
+}
diff --git a/string-quartet.ly b/string-quartet.ly
new file mode 100644 (file)
index 0000000..fc8c296
--- /dev/null
@@ -0,0 +1,65 @@
+\version "2.24.4"
+
+\include "general/info.ly"
+\include "lib/load.ly"
+\include "general/scorePaper.ly"
+\include "general/scoreLayout.ly"
+
+\include "manuscripts/tempoMap.ly"
+\include "manuscripts/violin1.ly"
+\include "manuscripts/violin2.ly"
+\include "manuscripts/viola.ly"
+\include "manuscripts/cello.ly"
+
+\book {
+  \markuplist #(outside-cover-markuplist 26.25)
+  \pageBreak
+  \markup { \vspace #5 }
+  \pageBreak
+  \markuplist #(inside-cover-markuplist)
+  \pageBreak
+  \markuplist { %Front Matter
+    \fill-line {
+      #(info-matter-markuplist)
+      \center-column {
+        \vspace #5
+        #(program-notes-markuplist #{ \programNotes #})
+        #(performance-notes-markuplist #{ \performanceNotes  #})
+        \line { \char ##x2042 }
+      }
+      #(git-matter-markuplist)
+    }
+  }
+  \pageBreak
+  \bookpart {
+    \header {
+      dedication = \markup {
+        \center-column {
+          \small "Commissioned by Karen Ronald"
+          \vspace #-0.4
+          \small "for Margo Johnson on the occasion of her 60th birthday"
+          \vspace #0.4
+        }
+      }
+      title = \markup { \fontsize #1 \xtitle }
+      subtitle = \markup { \medium \italic \xsub }
+      composer = \xcomp
+      poet = \markup { transposed score }
+      arranger = \markup { \tiny \typewriter \shortHash }
+    }
+    \score {
+      <<
+        \new StaffGroup
+        <<
+          \violinOneStaff \removeWithTag #'part { << \tempoMap \killCues \violinOneMusic >> }
+          \violinTwoStaff \removeWithTag #'part { \killCues \violinTwoMusic }
+          \violaStaff \removeWithTag #'part { \killCues \violaMusic }
+          \celloStaff \removeWithTag #'part { \killCues \celloMusic }
+        >>
+      >>
+      %\midi { }
+    }
+  }
+  \pageBreak
+  \markuplist #(rear-cover-markuplist 33)
+}