Re: (Re-post) Printing page numbers from a given page
On 2021-12-02 4:55 pm, Paolo Prete wrote: I re-post this because I noted later that the answer I obtained does not fit what I asked. I wonder if is there a way to start printing page numbers of a score from a given page. For example: if I want to start printing page numbers from page 3, page numbers 1 and 2, on first and second page, have to be omitted. (note that this is not the property: first-page-number = 3; it is instead somewhat similar to print-first-page-number = ##f, but extended to multiple pages) Customize the header: \version "2.22.0" #(define ((page-number-on-or-after num) layout props arg) (if (< (chain-assoc-get 'page:page-number props -1) num) empty-stencil (interpret-markup layout props arg))) \paper { #(set-paper-size "a7landscape") oddHeaderMarkup = \markup \fontsize #12 \fill-line { \null \on-the-fly #(page-number-on-or-after 3) \fromproperty #'page:page-number-string } evenHeaderMarkup = ##f page-count = #5 } { \repeat unfold 68 { b'4 4 2 } \bar "|." } -- Aaron Hill
Re: multi-line markup inside a single box
On 2021-12-07 1:52 am, Mark Knoop wrote: At 01:40 on 07 Dec 2021, Josiah Boothby wrote: Maybe I'm missing something obvious (it's 1:30 in the morning...it's not unlikely!), but I'm trying to include a small two-line markup inside a single box. The thing that seems obvious is producing two boxed lines, which is not what I'm aiming for and is too visually cluttered for me to accept as a compromise: \markup\right-column\box{ \line{Solos: 1st x tpt} \line{2nd x clr} } Any ideas? You want the box to be around the columns? So: \markup \box \right-column { \line{Solos: 1st x tpt} \line{2nd x clr} } To add to this, markup commands that expect a single markup will work with markup lists, however they will be applied to each individual markup within the list: \displayScheme \markup \box { a b c } \displayScheme \markup { \box a \box b \box c } The above code prints out the following, demonstrating that both are equivalent internally: (markup #:line (#:box "a" #:box "b" #:box "c")) (markup #:line (#:box "a" #:box "b" #:box "c")) To box "a b c" as a unit, you need to use any markup command that operates specifically on a markup list to condense it into a single markup: \markup \box \line { a b c }% for when you want space \markup \box \concat { a b c } % for when you do not want space \markup \box \overlay { a b c } % for when you REALLY do not want space -- Aaron Hill
Re: Altering beamed stem lengths
On 2021-12-11 8:29 pm, Ahanu Banerjee wrote: Hello, I am working with 2 simultaneous voices, and I want to increase the distance between the beamed stems of one voice and the noteheads of the other voice. Is there some way to set a minimum distance between the beams and noteheads, i.e., "padding"? I don't want to manually override Stem.details.beamed-lengths or Beam.positions each time. Here is an example: \version "2.20.0" %normal output% << { g'8 [ s e' s f' s d' ] } \\ { \repeat unfold 4 { s b'8 } } >> %desired output% << { \override Beam.positions = #'(2.2 . 1.8) g'8 [ s e' s f' s d' ] } \\ { \repeat unfold 4 { s b'8 } } >> This seems to get pretty close to what you want: << { g'8 -\tweak details.collision-padding 1 [ s e' s f' s d' ] } \\ { \repeat unfold 4 { s b'8 } } >> -- Aaron Hill
Re: adjusting stem length in metronome mark?
On 2021-12-12 1:53 am, Josiah Boothby wrote: I used to know how to do this, I think, but...how do I adjust the stem length in a metronome mark? Seems like I should be able to do something like \override MetronomeMark.stem-length = xyz but that *specifically* doesn't appear to be available. Something involving .add-stem-length perhaps? Stem length for MetronomeMark is hard-coded. See metronome-markup within translation-functions.scm. Depending on your needs, you could simply provide your own markup rather than use the built-in procedure. \version "2.22.0" { \once \set Score.tempoHideNote = ##t \tempo \markup \concat { \general-align #Y #DOWN \smaller \note { 4 } #0.6 \normal-text " = 60" } 4 = 60 b'2 2 } If you want to avoid duplicating some of the effort, you could do something like this to patch the markup that gets generated normally: \version "2.22.0" metronomeMarkStemLength = #(define-music-function (length) (number?) (define (fixup arg) (cond ((and (pair? arg) (eq? note-by-number-markup (car arg))) (begin (list-set! arg 3 length) arg)) ((list? arg) (map fixup arg)) (else arg))) (define (proc grob grob-origin context) (ly:grob-set-property! grob 'text (fixup (ly:grob-property grob 'text #{ \applyOutput Score.MetronomeMark #proc #}) { \metronomeMarkStemLength #0.6 \tempo 4 = 60 b'2 2 } Alternately, you could replace the built-in code with something that can check a new context property: \version "2.22.0" #(define (custom-metronome-markup text dur len count hide-note) (let* ((note-mark (if (and (not hide-note) (ly:duration? dur)) (make-smaller-markup (make-note-by-number-markup (ly:duration-log dur) (ly:duration-dot-count dur) len)) #f)) (count-markup (cond ((number? count) (if (> count 0) (make-simple-markup (number->string count)) #f)) ((pair? count) ;; Thin Spaces U+2009 & En-dash U+2013 (make-simple-markup (ly:format "~a – ~a" (car count) (cdr count (else #f))) (note-markup (if (and (not hide-note) count-markup) (list (make-general-align-markup Y DOWN note-mark) (make-simple-markup " = ") count-markup) #f)) (text-markup (if (not (null? text)) (make-bold-markup text) #f))) (if text-markup (if (and note-markup (not hide-note)) (make-line-markup (list (make-concat-markup (append (list text-markup (make-simple-markup " (")) note-markup (list (make-simple-markup ")")) (make-line-markup (list text-markup))) (if note-markup (make-line-markup (list (make-concat-markup note-markup))) (make-null-markup) #(set-object-property! 'tempoStemLength 'translation-type? number?) #(define (format-custom-metronome-markup event context) (let ((hide-note (ly:context-property context 'tempoHideNote #f)) (len (ly:context-property context 'tempoStemLength 1)) (text (ly:event-property event 'text)) (dur (ly:event-property event 'tempo-unit)) (count (ly:event-property event 'metronome-count))) (custom-metronome-markup text dur len count hide-note))) \layout { \context { \Score metronomeMarkFormatter = #format-custom-metronome-markup } } { \once \set Score.tempoStemLength = #0.6 \tempo 4 = 60 b'2 2 } -- Aaron Hill
Re: Crescendo after custom dynamic marking
On 2021-12-12 3:19 pm, David Kastrup wrote: and one could instead define it as make-dynamic-script = #(define-event-function (str) (ly:markup?) (make-music 'AbsoluteDynamicEvent 'text str)) Did you mean just markup? or is ly:markup? a special predicate? -- Aaron Hill
Re: Crescendo after custom dynamic marking
On 2021-12-12 3:48 pm, David Kastrup wrote: Aaron Hill writes: On 2021-12-12 3:19 pm, David Kastrup wrote: and one could instead define it as make-dynamic-script = #(define-event-function (str) (ly:markup?) (make-music 'AbsoluteDynamicEvent 'text str)) Did you mean just markup? or is ly:markup? a special predicate? Ouch. Of course the former. Just checking. It would not have surprised me if I had overlooked something in the software. When doing Scheme work especially, I find there is often something Guile provides as a built-in that I wasted time creating myself. -- Aaron Hill
Re: String at the bottom of a cover page without using \markup
On 2021-12-16 3:37 pm, Paolo Prete wrote: Thanks to all the participants to this thread. I'm a bit stuck into this. Unfortunately, if I use the copyright field of \header and I remove the footer from the paper, then the copyright field disappears: That's because the copyright (and tagline) is implemented with the footer markup. See titling-init.ly: oddFooterMarkup = \markup { \column { \fill-line { %% Copyright header field only on first page in each bookpart. \on-the-fly #part-first-page \fromproperty #'header:copyright } \fill-line { %% Tagline header field only on last page in the book. \on-the-fly #last-page \fromproperty #'header:tagline } } } -- Aaron Hill
Re: Tie between words
On 2021-12-17 12:37 am, Adrian Oehm wrote: I’ve tried the code you supplied, but unfortunately I keep getting the following error: "ly-syntax-constructors.scm:56:23: Wrong number of arguments to #" I get this trying to compile both with the code in my document and also trying to compile yours. One important thing I didn’t mention is I’m still using 2.18.2 - I’m not sure if the code is trying to reference things that are in later versions. The define-*-function procedures changed between 2.18 and 2.20. You will need to explicitly name the parser and location arguments if you are running an older version: addTieStart = #(define-music-function (parser location m) (ly:music?) ^^^ -- Aaron Hill
Re: String at the bottom of a cover page without using \markup
On 2021-12-17 4:28 pm, Paolo Prete wrote: The example Aaron showed already added *logic* to the template [...] To be fair, all I showed was the default setting for oddFooterMarkup from titling-init.ly. Nothing added; that is simply how LilyPond works out of the box. Nearly everything, if not actually everything, LilyPond does by default is only a matter of convenience for users, not some sacred declaration of "meet, right, and salutary" structure and practice. There is nothing apart from yourself that stops you from defining your own fields and adjusting the header/footer markups as is needed for you to complete your work. Any system of organization you insist on is just that--yours solely to define, follow, critique, revise, and disregard as appropriate. It might help to reconsider your understanding of header and footer, not as elements of structure, but as tools--specifically tools used when you need content to appear at the top or bottom of one or more pages irrespective of other elements. Your original query was about placing something at the bottom of a page, and the response you have received is to leverage oddFooterMarkup as the most direct and minimally disruptive method. -- Aaron Hill
Re: How to get huge text (ie: "To Coda") above a volta bracket?
On 2021-12-20 3:48 pm, Kenneth Wolcott wrote: Hi; How to get huge text (ie: "To Coda") above a volta bracket? Set outside-staff-priority as needed. The default for VoltaBracketSpanner is 600. \repeat volta 2 { b'4 a' g'2 } \alternative { { a'4 b' a'2 } { fis'1 -\tweak outside-staff-priority #599 ^\markup \bold "Below!" -\tweak outside-staff-priority #601 ^\markup \bold "Above!" } } -- Aaron Hill
Re: global alignment tweak for ChordName
On 2021-12-21 10:30 am, Kieren MacMillan wrote: and am once again in need this ChordName alignment feature. Is anyone out there able to shepherd me through building a callback to make this happen? I've used something like this in the past: \version "2.22.0" music = \chordmode { \override ChordName.X-offset = #(lambda (grob) (let* ((sten (ly:grob-property grob 'stencil)) (xex (ly:stencil-extent sten X)) (width (interval-length xex))) (* -0.5 (max 0 (- width 2) c1 c:7 c:m7 c':m6/ees } << \new ChordNames \music \new Staff \music >> -- Aaron Hill
Re: minimum measure size?
On 2021-12-28 3:18 pm, Tom Sgouros wrote: I was reviewing the settable parameters, but I think maybe I don't understand enough of lilypond's native jargon yet to know what to look for. I found setting for counting measures and grouping measures, but what about measuring measures? What tree should I be barking up here? If your intention is to have to more room for penciling in things, you could look at the section on Horizontal Spacing [1]. There are a few ways in which you can instruct LilyPond to place notes further apart: notes = \relative b' { \time 3/4 b4 a g | a2 g4 | fis8 g a4 b | c2. \bar "|." } { \notes } { \override Score.SpacingSpanner.spacing-increment = #2 \notes } { \override Score.SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/32) \notes } [1]: https://lilypond.org/doc/v2.22/Documentation/notation/horizontal-spacing Another option is to simply set the total number of systems for your score. LilyPond will naturally spread out music if it is constrained to meet a minimum system count: \paper { system-count = 2 } { \notes } -- Aaron Hill
Re: Feedback wanted: syntax highlighting in the LilyPond documentation
On 2022-01-04 4:19 am, J Martin Rushton wrote: Sorry to disagree, but fixed pitch is _so_ much easier to lay out in an editor. Documentation flows nicely with variable pitch and fancy hidden formats, but for code (and Lily's input is a programming language) you just want the plain line-by-line ASCII. It is, as you say, industry standard; and that is for a good reason. As a counterpoint, Knuth's work with literate programming [1] showed it was possible to have typographically beautiful setting of code for use in print. His style largely used proportional fonts though some elements were still rendered in fixed width to provide useful contrast. While Knuth's approach is not perfect for every language, I argue the vast majority of programming books out there really should have followed suit. Editors (the people, not programs) seem to struggle with fixed-width typefaces, and typos were abundant. Going beyond printed documentation, some IDEs like Source Insight enabled and encouraged programmers to use proportional fonts, where horizontal alignment was something handled by the system not the programmer. Though I do concede this was probably a novelty, seeing as these days terminals and editors still rely on fixed pitch. [1]: http://www.literateprogramming.com/knuthweb.pdf -- Aaron Hill
Re: Feedback wanted: syntax highlighting in the LilyPond documentation
On 2022-01-04 7:29 am, Erika Pirnes wrote: Would it be terribly difficult to have a color setting on the documentation page, so that people can choose between black and color? It is fairly straightforward with CSS and a little JavaScript: Dynamic styles body { font-size: 36pt; } .button { background: #999; border-radius: 9pt; cursor: pointer; display: inline-block; padding: 9pt; user-select: none; } .colors > code > .type { color: purple; } .colors > code > .identifier { color: blue; } .colors > code > .keyword { color: brown; } .colors > code > .number { color: darkgoldenrod; } .colors > code > .string { color: green; } .colors > code > .punctuation { color: gray; } function toggleColors() { if (document.body.classList.contains('colors')) { document.body.classList.remove('colors'); } else { document.body.classList.add('colors'); } } Toggle Colors int main() { printfclass="punctuation">("Hello, World!\n"); return 0; } -- Aaron Hill
Re: Feedback wanted: syntax highlighting in the LilyPond documentation
On 2022-01-04 10:04 am, Valentin Petzel wrote: The problem is that we probably want to remember the set color scheme for longer than just the current page, so we'd need something like cookies. Not a problem in the slightest. But not cookies... localStorage [1]. [1]: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage -- Aaron Hill
Re: Feedback wanted: syntax highlighting in the LilyPond documentation
On 2022-01-04 11:32 am, Jean Abou Samra wrote: Forgive my igorance with the inner workings of the Internet: what does this mean in connection with GDPR and all that? Am I right that the fact that the information stored on the user's device serves a purpose essential to satisfying the very request of the user means that it would fall under PECR exceptions to the requirement of a banner asking for explicit consent of the user? Always best to consult a lawyer on legal matters. My layman understanding is that GDPR generally deals with information that passes through servers that might be retained without offering some form of end-user control. Use of localStorage, rather than cookies, should mean no settings ever need to be sent to the server. Users are entirely in control of this local data, although I suppose some browsers make it easier to access than others. For those with privacy or security concerns, the web site source still remains entirely auditable as everything with styling is done local on the browser. And the code in question should be so trivial that there is no need to minify/uglify it, so that preserves readability and hopefully earns some trust that we are not doing anything shady. Other than that, well, there is still JavaScript. That's may not be the thing to be most happy about, but we could check how LibreJS handles that JavaScript, possibly adding stylized license comments, so that it would be no problem to those people refusing non-free JavaScript using LibreJS/IceCat. All in all this approach does look promising to me. I think I am not understanding the concerns around licensing. At the end of the day, if someone does not want to use JavaScript, then the functionality will not work. We should make sure the default behavior of the site is sound for such cases, so no one feels they have to enable JS if they do not wish. That might mean the standard styling needs to be black and white if that creates the least friction for users. -- Aaron Hill
Re: Feedback wanted: syntax highlighting in the LilyPond documentation
On 2022-01-04 1:42 pm, Jean Abou Samra wrote: https://www.gnu.org/philosophy/javascript-trap.en.html [ . . . ] But I'm probably fretting for something that is very easy in the end. The code Lilypond's site would use would be entirely homegrown, licensed under GPL. Not sure there is anything here to worry unless we determine there is an external dependency that is required. If we add a toggle for switching highlighting on and off, then the next question will of course be what the default should be. Without surprise, I would prefer if it were on by default, but I wouldn't mind the other way. And honestly, I like the default being on, simply because it advertises the new feature. If folks load up the docs and see the familiar black and white, they might not know to look for the option to enable highlighting. Perhaps a good strategy would be to initially enable the feature for an entire release cycle. This gets folks using it and providing feedback. Most of the discussion so far has been limited in scope so it is hard to know if the system works well over the entire manual and for day-to-day usage. I would not be surprised if some creative folks on the list end up creating new color schemes to be included as options aside from the default. A dark mode scheme is almost inevitable. Are you sure about that? This is one page that drew my attention: https://law.stackexchange.com/questions/30739/do-the-gdpr-and-cookie-law-regulations-apply-to-localstorage One of the posts a little further down talks about shopping carts. The way I read this is that when a user is performing an action where something being saved is reasonably expected as part of the functionality, there is no need to ask permission. The question we would have is whether selecting a color scheme carries an expectation that it should persist. -- Aaron Hill
Re: Hebrew and Latin fonts
On 2022-01-07 6:13 am, Hilber, Simon wrote: in 2019 I produced a little booklet with Hebrew and German songs - in version 2.18.2. The German text was rendered in a font with serifs, the Hebrew text was in a font without serifs. Now (with a new pc and version 2.20) with the input, text in both languages is produced in a serif font. I would prefer the previous fonts. How is it possible to globally define the fonts for Latin and Hebrew fonts respectively? I know how to change it for a particular text with \override - but I need a solution for the whole document since it is a lot of text. At some point, LilyPond changed the default fonts to the TeX Gyre family (Schola, Heros, and Cursor). You just need to switch the global font back to whatever you liked before, for instance: \paper { #(define fonts (set-global-fonts #:roman "New Century Schoolbook" #:factor (/ staff-height pt 20))) } -- Aaron Hill
Re: Beam slopes
On 2022-01-09 12:30 pm, Виноградов Юрий wrote: Hello. How to make a connecting beam at an angle of 90 degrees in this code Please review this thread [1] from last year, as I think you are looking for the same behavior. [1]: https://lists.gnu.org/archive/html/lilypond-user/2021-05/msg00078.html -- Aaron Hill
Re: alternate notes within a part
On 2022-01-09 2:05 pm, David Zelinsky wrote: Is there a better way to accomplish what I'm trying to do? Or do I really just need to maintain completely separate versions for the two instruments? You can certainly use the tag approach, just keep a few things in mind. Firstly, you should use simultaneous music in places where the tagged parts are in parallel. This should avoid the issues with bar check failures as the music remains valid time-wise without needing to remove tags. Secondly, \relative should be used in a more restrictive scope, not as a top-level tool where changes to pitches often have unexpected side effects, or you run into issues with tagged material. \fixed is certainly an option to consider, although for many melodic phrases \relative is really quite handy. Consider this below: foo = { \relative b' { | b4 a8 g fis2 } << \tag one \relative g' { | g8 a b d e2 } \tag two \relative e' { | e4 d cis2 } >> \relative g' { | g1 \bar "|." } } << \new Staff \with { instrumentName = "both" } \foo \new Staff \with { instrumentName = "one" } \keepWithTag one \foo \new Staff \with { instrumentName = "two" } \keepWithTag two \foo >> -- Aaron Hill
Re: alternate notes within a part
On 2022-01-09 2:50 pm, Valentin Petzel wrote: It depends a bit on how structured your music is. If you’ve got two Voices it is reasonable to give both their own relative clause. If you music does not have a lot of complex structure a top level relative is very much find. Problematic are cases where notes within the music might change, thus affecting stuff after it. This might be the case with tags, but also with cues or scores in footnotes (where also someone might think about adding something, and suddenly the main music body has problems. Having been bitten more times than worth counting, I have almost exclusively moved to using \fixed. The level of consistent and precise control means I can add, change, or remove notes as well as freely copy and paste music around without fear of notes being thrown off into the wrong octave. That said, I think \relative is still useful as a tool for reasonably-scoped melodic phrases where there is much less chance for things to go awry. So, if a song had, say, three main sections, I would probably use one \relative per, decoupling the sections from each other. (Also, there is a good chance each section ends up as its own variable anyway.) Going more granular might make sense if a section was particularly long. At that point, the early and later notes just stop having any practical relationship with one another, so they might be better placed in their own blocks. -- Aaron Hill
Re: How to input a diminished7 (maj7) chord?
On 2022-01-11 12:21 pm, Flaming Hakama by Elaine wrote: % I am not sure why this one does not work -\markup { \super "o7(△7)" } Wrong octave for the C flat. Use . -- Aaron Hill
Re: Ornament question
On 2022-01-14 12:13 am, Jacques Menu wrote: What is the name of the ‘up arc’ ornament on the first note in this score? Then I’ll look it up in the LPNR. I think "scoop" might be the term. Did we ever get a \bendBefore as the logical companion to \bendAfter? -- Aaron Hill
Re: fonts on windows
On 2022-01-15 5:14 pm, Michael Rivers wrote: I'm pretty sure text fonts on Windows are kaput. Some work, some don't. The fonts I'd like to use show up as installed properly in Settings and work in all other apps I've tried, but not Lilypond. I'm on Windows 11, but I've also tried on Windows 10. Are your fonts installed for all users or just your own account? Back in the day, fonts were always stored system-wide in %WinDir%\Fonts. At some point, Microsoft introduced an option for user-specific fonts which are located in %LocalAppData%\Local\Microsoft\Windows\Fonts. Depending on how LilyPond enumerates fonts, it might only be picking up the system-wide ones. -- Aaron Hill
Re: fonts on windows
On 2022-01-15 5:40 pm, Aaron Hill wrote: which are located in %LocalAppData%\Local\Microsoft\Windows\Fonts. No, stupid webmail client. That is not the path I pasted into the message. Where did that extra \Local even come from?! (Roundcube is getting really buggy lately.) %LocalAppData%\Microsoft\Windows\Fonts is the correct path. -- Aaron Hill
Re: fonts on windows
On 2022-01-15 5:43 pm, Michael Rivers wrote: That sounds exactly like the case. Would anyone happen to know how to install the fonts system-wide? It is an option when you right-click to install a font. Look for "Install for all users" which should have the elevation shield next to it. -- Aaron Hill
Re: fonts on windows
On 2022-01-15 5:52 pm, Michael Rivers wrote: Yes, I managed to figure that out. It would be nice if Lilypond could find fonts for the current user too. Definitely. Looks to be an issue with fontconfig [1] and not LilyPond. [1]: https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/144 -- Aaron Hill
Re: Descenders affecting line height calculation for lyrics in columns?
On 2022-01-19 11:41 pm, Bernhard Fisseni wrote: [ . . . ] In the song, there are some lines with descenders (p, g, q going below the baseline). I show the effect here by inserting "q" in the left column. Lilypond seems to calculate the "real" line height of the writing, not some kind of nominal text line height, so that a line with descenders is higher than a line without. [ . . . ] Is this the expected behaviour? No (but kind of yes). Firstly, \column and \line work properly, respecting baseline-skip and word-space: \markup \override #'(baseline-skip . 4) \override #'(word-space . 0.5) \box \line { \box \line \box { \column \box { q q q } \column \box { x x x } \column \box { b b b } } \box \column \box { \line \box { q x b } \line \box { q x b } \line \box { q x b } } } In your code, you have nested \columns within \columns, which does not work the same as a singular \column would. \column attempts to align the contains markups by their respective baselines. The baseline of a \column ends up being the baseline of its first markup. See: \markup \concat { \column { q x b } "q x b" } Your inner \columns involve two lines of text which makes them much taller than the default baseline-skip would permit. \column avoids overlapping ink, so it moves markups further down based on their actual extents. Descenders, then, could definitely result in a taller stencil. There are likely many ways to tackle this. (Other folks on the list might chime in with their preferred method.) The simplest option I see is manually adjusting the baseline-skip between the inner and outer \columns: \markup { \fill-line { \hspace #1 \override #'(baseline-skip . 7) \column { \line { \bold "2." \override #'(baseline-skip . 3) \column { "q This is verse two." "q It has two lines." } } \line { \bold "3." \override #'(baseline-skip . 3) \column { "q This is verse three." "q It has two lines." } } } \hspace #1 \override #'(baseline-skip . 7) \column { \line { \bold "4." \override #'(baseline-skip . 3) \column { "This is verse four." "It has two lines." } } \line { \bold "5." \override #'(baseline-skip . 3) \column { "This is verse five." "It has two lines." } } } \hspace #1 } } The math above is that two lines at baseline-skip of three plus an extra staff space means an effective baseline-skip of seven. Secondly, the stanza commands seem to call for defining a two-argument macro like \columnstanza, but I got lost in the documentation on the different ways and the different types of objects. Perhaps something like this: #(define-markup-command (my-stanza layout props number lines) (markup? markup-list?) (interpret-markup layout props #{ \markup \line { \bold #number \override #'(baseline-skip . 3) \column #lines } #})) \markup { \fill-line { \hspace #1 \override #'(baseline-skip . 7) \column { \my-stanza "2." { "q This is verse two." "q It has two lines." } \my-stanza "3." { "q This is verse three." "q It has two lines." } } \hspace #1 \override #'(baseline-skip . 7) \column { \my-stanza "4." { "This is verse four." "It has two lines." } \my-stanza "5." { "This is verse five." "It has two lines." } } \hspace #1 } } -- Aaron Hill
Re: adjusting double glissandi
On 2022-01-25 11:46 am, Rachel Green wrote: Hi, I’m trying to adjust the glissandi in this excerpt so that the lines are parallel and not too close to each other. I found some settings for adjusting a single glissando, but not for a double glissando. Any ideas? There is prior work on this subject. Harm has provided some code [1] before. [1]: https://lists.gnu.org/archive/html/lilypond-user/2013-08/msg00547.html Here is an adaptation of that logic: glissandoTweak = #(define-music-function (after? tweaks) ((boolean? #t) list?) (define (proc grob) (if after? (ly:spanner::kill-zero-spanned-time grob)) (for-each (lambda (x) (let ((prop (car x)) (value (cdr x))) (if (key-list? prop) (ly:grob-set-nested-property! grob prop value) (ly:grob-set-property! grob prop value (ly:assoc-get (ly:grob-property grob 'glissando-index) tweaks '( (if after? #{ \once \override Glissando.after-line-breaking = #proc #} #{ \once \override Glissando.before-line-breaking = #proc #})) { \glissandoTweak #`((0 . ((color . ,red) (Y-offset . -0.5))) (1 . ((color . ,blue) ((bound-details right arrow) . #t 2\glissando } -- Aaron Hill
Re: Delay for list posts to arrive
On 2022-02-01 2:50 pm, Jean Abou Samra wrote: Lately I've found myself a couple times duplicating answers already provided on this list by others up to almost three hours earlier because I had not received these replies yet. Now the little delay for posts to get in inboxes is a quirk inherent to mailing lists, but three hours seems a bit much. I'm wondering: are others experiencing this as well? Yes. Though it is inconsistent. Check the timestamps in the email headers. This tends to be what I see: - Original sender's mail goes from their server to the eggs.gnu.org (the spam filter, IIUC). - eggs.gnu.org processes the mail and hands it off to lists.gnu.org. - The email goes from "localhost" (?) to lists.gnu.org. [This is where the delay usually happens.] - My mail server gets the email from lists.gnu.org. -- Aaron Hill
Re: associate text to chord
On 2022-02-05 2:49 am, Kevin Barry wrote: Hi Achar, Let me specify : in the following example V7 / IV is not associated with the Eb7 chord but with the note G. Is it possible to pair it with the Eb7 chord ? Thanks We don't have a code example, so it's hard to answer your question. At a guess, it looks like you're attaching markup to the notes and you need to attach it to the space between A flat and G. A quick solution could be to add a spacer rest, e.g.: f_"II" aes2*1/2 s4_"V" g If this is something that happens frequently in your score, I would recommend having a separate voice - with only spacer rests - for your Roman numerals. Another option is to use a dedicated context for analysis. The Lyrics context is a good candidate, as it supports arbitrary markup that can be given rhythm independant of the associated Staff. Consider LSR 710 [1] as a starting point. [1]: https://lsr.di.unimi.it/LSR/Item?id=710 -- Aaron Hill
Bar numbers on lines beginning with a partial measure
I have for quite some time just relied on the default behavior where bar numbers are printed only for the first measure in each line (save the very first measure). This works reasonably well as my musicians are able to locate measures by number fairly quickly. However, there is an issue when I opt to split measures over a line break. (This practice is quite common in hymnals, though I find it equally effective for modern music to avoid having pickup/trailing notes/lyrics straddling a line break.) When the first measure on a line is a partial measure, no bar number is shown. This means some lines in my lead sheets have no bar number for reference. In some cases, I end up with no automatic bar numbers at all. (Some code for context/reference...) midMeasureBreak = { \bar "" \break } forceBarNumber = \once \override Score.BarNumber .break-visibility = #all-visible { R1*4 \break R1*4 r2 r4 \midMeasureBreak r4 R1*4 r2 r4 \midMeasureBreak r4 \forceBarNumber R1*4 \bar "|." } As can be see above, I can manually override the bar number visibility, but it is not very elegant. If I opt to reflow music, I would have to revisit the bar numbers to make sure only the ones I want are there. It would be very nice if LilyPond could treat the first full measure as the effective first measure on the line w.r.t. break visibility settings. Has anyone else encountered this and come up with a solution? If not, I will dig around the existing engraver logic and see about submitting a patch should folks find the updated behavior desirable. -- Aaron Hill
Re: Bar numbers on lines beginning with a partial measure
On 2022-02-06 1:37 am, Jean Abou Samra wrote: Are you aware of the options to print a parenthesized bar number at the start of the line if it's the continuation of a measure? See input/regression/bar-number-visibility-* (sadly missing documentation at the moment). I don't have an opinion on whether that is better practice or not than what you suggest. It is, at any rate, what Gould recommends (Behind Bars p. 490). Thanks, Jean. first-bar-number-invisible-save-broken-bars is one of the undocumented options that seems almost perfect. At first glance, though, the parenthesized numbers stand out too much. Thankfully, the parenthesization logic is within robust-bar-number-function, which is easily adaptable as Scheme code. Some quick testing with the \parenthesize markup command looks better than relying on the glyphs of the number font which are a little too wide. ;; ...preamble from robust-bar-number-function... (let* ((number-and-power (get-number-and-power 0 0)) (begin-measure (= 0 (ly:moment-main-numerator measure-pos))) (text (string-append (number->string barnum) (make-letter "" (car number-and-power) (cdr number-and-power) (if begin-measure text (markup #:override '(line-thickness . 0.05) #:override '(padding . 0.05) #:override '(width . 0.2) #:parenthesize #:smaller text I will have to try this for awhile to see if I like it better than labelling the first full measure. It is interesting that all bar numbers would be consistently aligned on the left margin, so that might prove useful. -- Aaron Hill
Re: associate text with chords
On 2022-02-06 5:08 am, achar wrote: P.S.: I already received answers but, they evaporated before I could read them You can review the archives [1] if you lose track of a message. Although, since your original thread is barely two days old, you should strongly reconsider your service provider if they are purging emails that quickly. [1]: https://lists.gnu.org/archive/html/lilypond-user/2022-02/msg00062.html -- Aaron Hill
Re: Moving a tie horizontally
On 2022-02-07 3:28 pm, Jean Abou Samra wrote: For now, you have to use the \shape command documented at The shape seems fine, just needs to be offset to optically align with the slashed note heads: music = { \time 3/4 2~4~8~8~2~16~8~16~4.~8 } << \new RhythmicStaff { \music } \new RhythmicStaff \with { \improvisationOn \override Tie.extra-offset = #'(-0.4 . -0.6) } { \music } >> NOTE to OP: For a single-line rhythm, consider using RhythmicStaff. -- Aaron Hill
Re: Right justifying text between systems
On 2022-02-07 11:04 pm, Alasdair McAndrew wrote: \markup {\hspace #70 \fontsize #2 {\italic {Au Rondeau puis au premier}}} For right-alignment, you should use \fill-line: \markup \fill-line { \null \italic "Lorem ipsum..." } I could do this by adding the text as a markup to one of the notes in the bottom staff of Rondeau II, but then it's too close to the score block. You could use a RehearsalMark at the very end with appropriate padding: \paper { #(set-paper-size "a5") } Rondeau.I = { R1*13 \bar "||" } Rondeau.II = { R1*13 \bar "||" } Bourree.I = { R1*13 \bar "|." } \score { \header { piece = "Rondeau I" } { \Rondeau.I } } \score { \header { piece = "Rondeau II" } { \Rondeau.II \tweak break-visibility #end-of-line-visible \tweak direction #DOWN \tweak font-size #0 \tweak padding #2 \tweak self-alignment-X #RIGHT \mark \markup \italic "Repeat Rondeau I" } } \score { \header { piece = "Bourree I" } { \Bourree.I } } -- Aaron Hill
Re: Add text to score without affecting spacing
On 2022-02-09 4:12 pm, Valentin Petzel wrote: Hi Kieren, thank you. Yes, currently I am using some tweaked Rehearsal Marks mit 0- dimensions and some tweaks. Just asking if there was a better way. There are a number of grobs that normally have no visual representation. You could attach your content there: \version "2.22.0" overlayText = #(define-music-function (grob-path text) (key-list? markup?) (define (print-with-point-outline grob) (ly:stencil-outline (ly:text-interface::print grob) point-stencil)) (define (proc grob . args) (ly:grob-set-property! grob 'font-size -6) (ly:grob-set-property! grob 'layer 1000) (ly:grob-set-property! grob 'stencil print-with-point-outline) (ly:grob-set-property! grob 'text text)) #{ \applyOutput $grob-path #proc #}) { b'4 \overlayText Score.PaperColumn \markup \general-align #Y #UP "Lorem" 4 \overlayText Score.NoteColumn \markup \vcenter \whiteout \box "Ipsum" 2 } -- Aaron Hill
Re: More about stencil
On 2022-02-13 11:43 am, Rip _Mus wrote: Hello everyone, thanks to your many suggestions, I was able to get a little into the perspective of modifying the stencils. I created a stencil modification that adds a small arrow (sort of a glissando) to the left of the note or accident. However, I cannot understand why the ascending arrows let the stem no longer attached to the notehead. Do you have any ideas? Modifying the NoteHead stencil as you are doing changes its extents, thus affects the attachment point. One option is to add the arrow to the final stencil but preserve the original extents: (ly:stencil-outline (ly:stencil-combine-at-edge arr X RIGHT note 0) note) (The above approach might result in collisions.) Another option would be to utilize Fingering as a host grob, as that already handles alignment with notes whether or not accidentals are present: (Below also I show an alternate method for defining the arrows, so that a shared symbol is simply rotated. Custom extents are specified so that the arrows align as desired.) double-right-arrow = #(ly:stencil-add (make-line-stencil 0.1 -0.9 0.1 -0.1 0.1) (make-line-stencil 0.1 -0.9 -0.1 -0.1 -0.1) (make-line-stencil 0.15 -0.3 0.3 0 0) (make-line-stencil 0.15 -0.3 -0.3 0 0)) glis-su-arrow = #(ly:make-stencil (ly:stencil-expr (ly:stencil-rotate double-right-arrow 45 RIGHT CENTER)) '(-0.7 . -0.2) '(-0.3 . 0.7)) glis-giu-arrow = #(ly:make-stencil (ly:stencil-expr (ly:stencil-rotate double-right-arrow -45 RIGHT CENTER)) '(-0.7 . -0.2) '(-0.7 . 0.3)) glis-giu = #(define-music-function (note) (ly:music?) (ly:music-set-property! note 'articulations (cons (make-music 'FingeringEvent 'digit 1 'tweaks (list (cons (quote stencil) glis-giu-arrow))) (ly:music-property note 'articulations '( #{ \once \set fingeringOrientations = #'(left) #(make-event-chord (list note)) #}) glis-su = #(define-music-function (note) (ly:music?) (ly:music-set-property! note 'articulations (cons (make-music 'FingeringEvent 'digit 1 'tweaks (list (cons (quote stencil) glis-su-arrow))) (ly:music-property note 'articulations '( #{ \once \set fingeringOrientations = #'(left) #(make-event-chord (list note)) #}) \new Staff { \relative c' { \once \override Score.FootnoteItem.annotation-line = ##f \footnote "*" #'(-0.2 . -1) "* glissando at the end of previous note" NoteHead \stemDown \glis-giu f2 \glis-su b | \glis-giu fis4 \glis-su bes2. \glis-giu c32 \glis-su c c c c c c c \glis-giu c \stemUp \glis-giu c } } Since Fingerings must be inside a chord (i.e. <>) construct in order to respect fingeringOrientations, the music functions above have to do some manipulation of the argument. Depending on how you intend on using these arrows in context, it might be worth the time to invent a custom grob instead rather than cannibalize something built-in. -- Aaron Hill
Re: DynamicTextSpanner spacing
On 2022-03-05 3:49 pm, Erika Pirnes wrote: I would like the dotted line of the crescendo to start a bit later and end a bit earlier. It is too close to "cresc.", in my opinion at least. And sometimes too close to the "f" as well. (A tiny detail, for sure, but it looks annoying.) Any ideas? [...] music = \relative c' { \repeat unfold 5{c8 \p \cresc d e f g a b4 c8 \f b c2.} } You will need to play around with the bound-details for the DynamicTextSpanner: \version "2.18.2" \relative c' { %% The space before the left side of the spanner. %% (NOTE: This includes the attached stencil.) %% Default is 0.75; we are adding two units of space. \override DynamicTextSpanner.bound-details.left.padding = #2.75 %% Since we want the space between the stencil and %% line, we need to shift the stencil over a bit. %% Default is (-0.75 . -0.5); we move it left by the %% same increment we applied to the padding above. \override DynamicTextSpanner.bound-details .left.stencil-offset = #'(-2.75 . -0.5) %% The space after the right side of the spanner. %% Default is 0.75; we are adding two units of space. \override DynamicTextSpanner.bound-details.right.padding = #2.75 %% (For debugging only...) %% Highlight the grob in red for better visibility. %% Also make the line solid to show its extents clearly. \override DynamicTextSpanner.color = #red \override DynamicTextSpanner.dash-fraction = #1 \repeat unfold 5{ c8 \p \cresc d e f g a b4 c8 \f b c2. } } -- Aaron Hill
Re: VS: DynamicTextSpanner spacing
On 2022-03-05 5:26 pm, Erika Pirnes wrote: Thank you Aaron, it seems to work! But what does stencil mean exactly? Sorry for the delay. Within the bound-details, the stencil refers to the associated text or graphic that is attached to the left (or right) end of the spanner line. In this case, it would be the text "cresc.". -- Aaron Hill
Should \partial accept music instead of duration?
Here would be a possible refactoring: \version "2.22.0" partial = #(define-music-function (mus) (ly:music?) (_i "Make a partial measure.") (let* ((mom (ly:music-length mus)) (dur (make-duration-of-length mom))) (make-music 'SequentialMusic 'elements (list (context-spec-music (make-music 'PartialSet 'origin (*location*) 'duration dur) 'Timing) mus \fixed c' { \time 3/4 \partial { g8 a4 } | g2. \bar "||" \partial { \grace { g16 } a8 b } | a2. \bar "||" \partial \tuplet 3/2 { g8 fis } | g2. \bar "|." } A convert-ly rule would probably not be possible given the limited power of regular expressions. As such, \partial might need to support both duration and music arguments. Initially I thought this might not be possible, given that a naked duration can be treated as music; but the following does seem to work: \version "2.22.0" #(define (duration-or-music? arg) (or (ly:duration? arg) (ly:music? arg))) partial = #(define-music-function (arg) (duration-or-music?) (_i "Make a partial measure.") (if (ly:duration? arg) (context-spec-music (make-music 'PartialSet 'origin (*location*) 'duration arg) 'Timing) (let* ((mom (ly:music-length arg)) (dur (make-duration-of-length mom))) (make-music 'SequentialMusic 'elements (list (context-spec-music (make-music 'PartialSet 'origin (*location*) 'duration dur) 'Timing) arg) \fixed c' { \time 3/4 \partial 4. g8 a4 %% Original syntax works. | g2. \bar "||" \partial { \grace { g16 } a8 b } | a2. \bar "||" \partial \tuplet 3/2 { g8 fis } | g2. \bar "|." } -- Aaron Hill
Re: Should \partial accept music instead of duration?
On 2022-03-19 5:46 pm, Thomas Morley wrote: Am So., 20. März 2022 um 00:02 Uhr schrieb Aaron Hill : Here would be a possible refactoring: \version "2.22.0" partial = #(define-music-function (mus) (ly:music?) (_i "Make a partial measure.") (let* ((mom (ly:music-length mus)) (dur (make-duration-of-length mom))) (make-music 'SequentialMusic 'elements (list (context-spec-music (make-music 'PartialSet 'origin (*location*) 'duration dur) 'Timing) mus \fixed c' { \time 3/4 \partial { g8 a4 } | g2. \bar "||" \partial { \grace { g16 } a8 b } | a2. \bar "||" \partial \tuplet 3/2 { g8 fis } | g2. \bar "|." } A convert-ly rule would probably not be possible given the limited power of regular expressions. As such, \partial might need to support both duration and music arguments. Initially I thought this might not be possible, given that a naked duration can be treated as music; but the following does seem to work: \version "2.22.0" #(define (duration-or-music? arg) (or (ly:duration? arg) (ly:music? arg))) partial = #(define-music-function (arg) (duration-or-music?) (_i "Make a partial measure.") (if (ly:duration? arg) (context-spec-music (make-music 'PartialSet 'origin (*location*) 'duration arg) 'Timing) (let* ((mom (ly:music-length arg)) (dur (make-duration-of-length mom))) (make-music 'SequentialMusic 'elements (list (context-spec-music (make-music 'PartialSet 'origin (*location*) 'duration dur) 'Timing) arg) \fixed c' { \time 3/4 \partial 4. g8 a4 %% Original syntax works. | g2. \bar "||" \partial { \grace { g16 } a8 b } | a2. \bar "||" \partial \tuplet 3/2 { g8 fis } | g2. \bar "|." } -- Aaron Hill Hi Aaron, I really like it! Always wondered why we need to specify a duration, if it can be taken from the music. I'd suggest to propose it on devel. Preferable the second coding, because we could nicely deprecate the old syntax for some versions. *facepalm* I thought I was sending to devel. Well, folks on user might want to chime in too. -- Aaron Hill
Re: Should \partial accept music instead of duration?
On 2022-03-19 7:53 pm, Dan Eble wrote: On Mar 19, 2022, at 20:53, Aaron Hill wrote: ... A convert-ly rule would probably not be possible given the limited power of regular expressions. As such, \partial might need to support both duration and music arguments. Initially I thought this might not be possible, given that a naked duration can be treated as music; but the following does seem to work: ... I wouldn't want to have to explain to users why these turn out different. \score { \fixed c' { \partial 4. 4. } } \score { \fixed c' { \partial c4. c4. } } Fair point, though the intention here would be that backwards compatibility would only need to exist for a time. A warning could be issued whenever a user applies the older syntax; this would inform the user of the impending breaking change while still allowing existing code to compile. When it is convenient, a future release would only support music as the argument. -- Aaron Hill
Re: Should \partial accept music instead of duration?
On 2022-03-20 1:13 am, Leo Correia de Verdier wrote: Entirely replacing the actual syntax would not be desirable in my opinion. Consider the case when it is used in a “global” part/variable in an orchestral score that usually contains rehearsal marks, tempo, key and time signature changes and such. As I understand it having \partial to accept only music as argument would have to move to each part, which would introduce unnecessary typing and disrupt the logic of the structure. Sure it can be worked around, but I would see it as a step backwards. Or have I misunderstood? All of those things *are* music, as far as LilyPond is concerned. It is just that commands like \tempo have no duration, so the following is nonsensical since the music has zero length: \partial \tempo 4 = 90 Your "global" variable likely uses spacer rests which are providing the length information, so the change to \partial usage ultimately looks like this: \partial 4 s4 => \partial s4 This removes the otherwise redundant specification of the duration. -- Aaron Hill
Re: Should \partial accept music instead of duration?
On 2022-03-20 3:17 am, David Kastrup wrote: Aaron Hill writes: Fair point, though the intention here would be that backwards compatibility would only need to exist for a time. I strongly disagree since \partial with a duration is the natural and proper expression when writing a separate timing track. Natural, I can see. Proper... I would need more information backing that claim. Certainly if there is a technical basis, I would be eager to review it. If sound, then I could retract my proposal and answer the email subject with "no". In my timing/global/structure variables, expressions like \partial 4 s4 are common. Certainly \partial 4 would be most succinct, but it creates no actual duration in sequential music. Naturally, the spacer rest is used so later commands occur when I need them. My proposal leads to \partial s4 as a reasonable construct that avoids redundancy. (See below regarding NullVoice.) A warning could be issued whenever a user applies the older syntax; this would inform the user of the impending breaking change while still allowing existing code to compile. When it is convenient, a future release would only support music as the argument. 4. _is_ valid music. Yes, and it works with the updated \partial function. The only side effect is that it might produce a visible note (of unspecified pitch), because that is what 4. as music means. If used in a NullVoice context, it should work the same as s4. which means we are back to the original syntax. The key difference is that \partial 4. would now have musical length. -- Aaron Hill
Re: partCombine misinterprets Solo
On 2022-03-23 1:52 am, David Santamauro wrote: mm 1- 3 and 3-6 are note-identical. The only difference is the decrescendo in m. 1, terminated in m. 2. I believe the terminating decrescendo in vTwo/m. 2 causes the partCombine code to think there's music in vTwo/m. 2 -- I could be wrong, but the result is wrong nevertheless. The part combiner sometimes needs hints. Consider adding... \once \partCombineSoloI ...at the beginning of the second measure. -- Aaron Hill
Re: Ignore stems
On 2022-03-25 5:11 am, Simon Albrecht wrote: Hello everybody, I want to try having Lyrics placed without regard for any stems in the adjacent staff (and then using whiteout to remedy the clash, of course). The below approach doesn’t work. Why? Can I make it work? You'll typically need to use negative padding to get overlapping ink. \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((minimum-distance . 4.5) (padding . -2)) -- Aaron Hill
Re: Temporary div. multiple staffs
On 2022-04-05 10:20 pm, Evan Driscoll wrote: Another question, one I've struggled with before. The part splits out temporarily into divisi parts on multiple staffs. I always have trouble getting the correct incantations to get the correct result. A naive attempt results in http://lilybin.com/1l8whf/5. This is enough to keep working, but it looks bad -- barlines don't cross between staffs, and there's no grouping a la https://lilypond.org/doc/v2.22/Documentation/69/lily-9c91c2b7.png from the manual. I can get a pair of staffs that are correct on their own by creating a StaffGroup with two new staffs -- http://lilybin.com/1l8whf/9 -- but the original staff continues through. Omitting the explicit \new Staff invocations doesn't help -- http://lilybin.com/1l8whf/11. What's the right way to do this? Unsure there is a definitively "right" way... but here's an option: http://lilybin.com/1l8whf/12 Move the StaffGroup declaration outside the music. Also, you can name contexts so you can reference an existing one to avoid creating new ones (explicitly or implicitly). -- Aaron Hill
Re: how to repeat a scheme function that creates a Score
On 2022-04-05 10:40 pm, Jeff Olson wrote: Question (b): My secondary question is very simple. How do you set the seed for scheme's "random" function (used in my gen-music.ily). I'd like to get the repeatability of a pseudo-random number generator. (set! *random-state* (seed->random-state 42)) Review the Guile documentation [1]: [1]: https://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Random.html#Random -- Aaron Hill
Re: Temporary div. multiple staffs
(Please keep the mailing list on all replies.) On 2022-04-05 11:06 pm, Evan Driscoll wrote: On Wed, Apr 6, 2022 at 12:37 AM Aaron Hill wrote: Unsure there is a definitively "right" way... but here's an option: http://lilybin.com/1l8whf/12 Move the StaffGroup declaration outside the music. Also, you can name contexts so you can reference an existing one to avoid creating new ones (explicitly or implicitly). Perfect, thanks! As a final tweak, in case anyone finds this thread in the future, here's how to omit the time signature on the new staff: http://lilybin.com/1l8whf/15 Though a question -- I discovered that adding *just* the \new StaffGroup on the "outside" made things work -- on the simplified example, that'd be something like http://lilybin.com/1l8whf/16. In other words, that works even without explicitly naming the existing Staff context and referring to it with \context. Is there any difference between these, aside from possible readability arguments? In many cases, you can rely on the implicit handling of contexts. Your example #16 above relies on the implicit continuation of the current context as only the divisi staff is explicitly created, so things do work as expected. But note that this new staff appears below the original one. If you wanted it to be above, consider: http://lilybin.com/1l8whf/17 (I added color just to make it easier to see which context is which.) -- Aaron Hill
Re: how to repeat a scheme function that creates a Score
On 2022-04-05 10:40 pm, Jeff Olson wrote: Question (a): My main question is how to write a scheme function that will invoke my scr function N times, where N could be a number like 1000. #(for-each add-score (map (lambda (x) #{ \scr #}) (iota 5))) Replace 5 with whatever. -- Aaron Hill
Re: Temporary div. multiple staffs
On 2022-04-09 8:45 am, David Zelinsky wrote: A question about Aaron's example: You are referencing an aspect of the original source, not what was being demonstrated in the updated version. What is the purpose of the following line (line 12)? \once \override Staff.TimeSignature #'break-visibility = ##(#f #f #f) The "\omit TimeSignature" on line 7 seems to do the trick, and in fact as far as I can tell the above \override has no effect, even when the \omit TimeSignaure is removed. You are correct that the \omit alone is sufficient. I am unsure why the original had the break-visibility override. That aside, it would probably be best to use \once \omit to limit the scope of the command's effect. -- Aaron Hill
Re: Generate music with scheme
On 2022-04-11 9:10 am, Henrik Frisk wrote: \version "2.22.2" { $(make-sequential-music (map (lambda (x) (make-sequential-music (list (make-music 'NoteEvent 'pitch (ly:make-pitch 0 x) 'duration (ly:make-duration 2)) (make-music 'MarkEvent 'label (markup #:line (#:override (cons (quote font-size) -3) "10")) (list 1 2 3 4))) } Thanks Jean, It was the (make-sequential-music) after the lambda expression that I had missed, without it it doesn't help to combine the two music events in one list. You could also use append-map which will concatenate the lists without the inner call to make-sequential-music: { $(make-sequential-music (append-map (lambda (x) (list #{ $(ly:make-pitch 0 x) 4 #} #{ \mark \markup \override #'(font-size . -3) 10 #} )) (iota 4 1))) } In fact, using list-splicing, you can eliminate the outer call to make-sequential-music as well: { $@(append-map (lambda (x) (list #{ $(ly:make-pitch 0 x) 4 #} #{ \mark \markup \override #'(font-size . -3) 10 #} )) (iota 4 1)) } Also note the above use of #{ #} to escape music syntax within scheme, which can often be more abbreviated. -- Aaron Hill
Re: Question on multiple markups
On 2022-04-12 12:25 pm, Evan Driscoll wrote: http://lilybin.com/vhf35h/5 for example. I have a note that has two text decorations on it, c^"pizz"_"marc", as well as a dynamic \f. By default everything gets stacked (http://lilybin.com/vhf35h/6), but that gets really busy -- there's actually a tempo marking and rehearsal mark at that place as well. (I also left off \italic on the marc. but it's in my real version.) I can move the TextScript object*s* with *\once \override TextScript.extra-offset = #'(2.1 . 1.7)*, but that moves both. I'd like to get the 'marc' side by side with the \f obviously without moving the arco instruction. I suspect this has to do with \tweak in there somehow but I can't figure out the right incantation. You need to use the post-event form for \tweak. Consider: marc = -\markup \italic "marc." \relative c' { c4 -\tweak extra-offset #'(2.1 . 1.7) _\marc ^"arco" \f c c c } \relative c' { c4 -\tweak X-offset #2 _\marc ^"arco" \f c c c } NOTE: I think the X-offset tweak looks a little cleaner. -- Aaron Hill
Re: ottava spanner terminates at the end of the note, not the end of the bar
On 2022-05-13 8:28 pm, Kenneth Wolcott wrote: The ottava spanner terminates at the end of the note, not at the end of the bar. How to change this? Screenshots attached. Consider the following: \version "2.22.0" \relative c'' { % Be careful not to stop the ottava too soon. \ottava 1 c4 e g f8 d | c2. \ottava 0 r4 % This encompasses the rest as well but is still a little too short. \ottava 1 c4 e g f8 d | c2. r4 \ottava 0 c8 d b c~ c2 % This would be nice... % \override Staff.OttavaBracket.to-barline = ##t % ...but it would appear OttavaBracket is not a % line-spanner-interface, where to-barline lives. % A manual adjustment is possible: \once \offset shorten-pair #'(0 . -1) Staff.OttavaBracket \ottava 1 c4 e g f8 d | c2. r4 \ottava 0 c8 d b c~ c2 \bar "|." } Assuming you only have a few of these you need to manage, the manual offset might be sufficient to let you move onto other things in your score. But you will need to review these if you make any changes that affect the measure length. An automated approach might be possible, but really I think OttavaBracket should support to-barline. Something to submit to the bug mailing list I guess. Was almost about to hit send, but then I thought... what if you hid the OttavaBracket but used a TextSpanner in its place? \relative c'' { \once \hide Staff.OttavaBracket \ottava 1 c4 -\tweak to-barline ##t -\tweak dash-fraction #0.3 -\tweak dash-period #1 -\tweak bound-details.left.text \markup \vcenter \bold 8 -\tweak bound-details.right.stencil #(make-line-stencil 0.1 0 0 0 -0.8) \startTextSpan e g f8 d | c2. r4 \ottava 0 c8\stopTextSpan d b c~ c2 } Hmm... maybe not. That is a lot of tweaks, and I do not think I matched the original OttavaBracket well enough. -- Aaron Hill
Re: Offset ClefTransposition number
On 2022-05-17 7:05 am, Dimitris Marinakis wrote: Is it possible to offset the little number that indicates the clef transposition? I searched the Clef internals but couldn't find anything relevant. It is called the ClefModifier. It would be useful to know what terms you used to search so we can improve the ability to find the grob for others in the future. { \override Staff.ClefModifier.color = #red \override Staff.ClefModifier.padding = #1 \clef "treble_8" b4 \clef "treble^8" b''4 \clef "bass_8" d,4 \clef "bass^8" d'4 } -- Aaron Hill
Re: Left-hand end of tuplet bracket sometimes wrong
On 2022-06-03 10:10 am, Paul Hodges wrote: I find that even using shorten-pair (with a negative first value) fails to do this as I expected. So now I don't know any way to print the bracket with the preferred layout... You would want to adjust the X-positions, so that the TupletNumber is centered properly. See the difference: \version "2.22.0" { \offset shorten-pair #'(-1 . 0) \tuplet 3/2 \relative { f'4 g a } \offset X-positions #'(-1 . 0) \tuplet 3/2 \relative { f'4 g a } } Since an offset of one staff space is only approximate, you would need to consult the bounds of the NoteColumns directly: { \override TupletBracket.X-positions = #(lambda (grob) ;; NOTE: The logic here does not fully replace ;; ly:tuplet-bracket::calc-x-positions (let* ((nc (ly:grob-object grob 'note-columns)) (xref (ly:grob-common-refpoint-of-array grob nc X)) (lb (ly:spanner-bound grob LEFT)) (lbex (ly:generic-bound-extent lb xref)) (lbrc (ly:grob-relative-coordinate lb xref X)) (rb (ly:spanner-bound grob RIGHT)) (rbex (ly:generic-bound-extent rb xref))) (cons (- (car lbex) lbrc) (- (cdr rbex) lbrc \tuplet 3/2 \relative c' { 4 g } \tuplet 3/2 \relative c'' { 4 d } } Tuplet_Bracket::calc_x_positions relies on Item::get_x_bound_item, which includes the logic to prefer using the Stem of a NoteColumn as the bound item if the direction matches. The code above simply ignores that behavior and computes X-positions purely based on the extents of the NoteColumns. Mind you, Tuplet_Bracket::calc_x_positions does more work to account for properties like connect-to-neighbor, break-overshoot, and full-length-to-extent, so this is not a true replacement/fix. -- Aaron Hill
Re: color individual characters
On 2022-06-05 1:13 pm, Лысов Дмитрий wrote: Hi. How to color individual characters in the UNICODE encoding text? The examples did not come through for me--perhaps an encoding issue between our mail clients, or my mail server is just being overly paranoid about attachments that could contain executable code. -- Here is an example of applying unique colorization to a character and a combining character: \version "2.22.0" \markup { \concat { jalape \with-color #blue n \with-color #red \char ##x0303 o } } The above usage pattern does break up the input into separate pieces. As such, Pango observes the 'n' distinctly from the combining tilde, effectively preventing it from converting to the pre-composed glyph 'ñ'. (In the case above, we would not want the pre-composed glyph anyway because we desire independent coloring.) Fonts with more advanced replacement rules for handling complex scripts and ligatures will not work, as Pango needs to see the whole input to apply the proper logic. And at that point, \with-color is only left with the option to apply color to the entire resulting stencil. -- Aaron Hill
Re: Unconventional score and unwanted stray staff lines
On 2019-05-18 10:46 pm, David Bellows wrote: Maybe use bar checks? Given that a lot of the music isn't generated to fit any particular time signature (ie, the bar lines are often there just to break things up to ease reading), I would get tons of bar check errors. Plus, keeping track of when bars should be inserted in my software seems like it would be a huge chore. Is this something you think would solve the problem? I would have thought it fairly trivial* to keep track of bar lines. You need only add up the durations of the notes you have emitted and, when the running count equals a whole measure, you know there is spot for a bar check. Of course, you might have notes that overlap the bar line, and perhaps you are leveraging LilyPond's ability to automatically split notes. In this case, you would see that the durations exceed a whole measure by some fraction. For the purposes of inserting bar checks, you would skip it since the next note does not start the measure. (* Let's assume that 1/128 notes are the shortest duration your program generates. Then each instance of that duration could simply add one to a counter. 1/64 notes add two; 1/32 add four; etc. Depending on how many 1/128 notes make up the desired length of a measure, you subtract that amount from the running total when it is equal or greater. And anytime the counter is zero, you emit a bar check before the next note. Of course the amounts to add get a little more interesting with tuplets and unusually scaled durations. A more general-purpose rational representation could be useful.) I have not checked exactly, but perhaps your final measures on each line are not precisely aligned to a whole measure. You can of course say \bar "|." early, but maybe you need to use \partial on the final measure as well. Granted, this would require that your software cache notes before writing them so you can tell if you are going to have a short measure. One thing to consider: if your music is really fluid, perhaps writing things with \cadenzaOn makes sense. Here there are no measures, and you can emit bar lines whenever you see fit. (In fact, you *have* to emit bar lines if you want the music to be able to break across a lines.) But I am unsure if this is strictly speaking necessary to get your setup working. \stopStaff should be helpful to ensure that the StaffSymbol does not run past a point; but maybe you need to play around with break-alignment to resolve the issue of those pesky extra clefs showing up. Then again, it is entirely possible that your intentionally misaligned systems are just running afoul of some limitation of LilyPond. I certainly have never tried pushing this aspect of the software. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: [Lilypond] How to add chorus to multi-verse lead sheet for guitar?
On 2019-05-21 8:48 pm, John Helly wrote: Mahalo. Definite maybe. I found a reference to using multiple voices in the learning manual that might be a more general solution but don't understand it yet. One thing multiple voices would let you do is separate the melody between the verse and chorus so you may associate the lyrics independently. Consider: \version "2.19.82" Song.Voice.Verse = \fixed c' { f4 f g g | a2 c' } Song.Voice.Chorus = \fixed c' { bes4 a g bes | a1 } Song.Lyrics.VerseI = \lyricmode { Lyr -- ics for the | first verse. } Song.Lyrics.VerseII = \lyricmode { Sec -- ond verse has | these words. } Song.Lyrics.VerseIII = \lyricmode { Syl -- la -- bles on | verse three. } Song.Lyrics.Chorus = \lyricmode { Cho -- rus text goes | here. } << \new Staff { \key f \major \new Voice = "verse" { \Song.Voice.Verse \bar "||" } \new Voice = "chorus" { \Song.Voice.Chorus \bar ":|." } } \new Lyrics \lyricsto "verse" { \Song.Lyrics.VerseI } \new Lyrics << \lyricsto "verse" { \Song.Lyrics.VerseII } \lyricsto "chorus" { \Song.Lyrics.Chorus } >> \new Lyrics \lyricsto "verse" { \Song.Lyrics.VerseIII } >> Note that I have, like Karlin recommended, put the lyrics for the chorus in the same Lyrics context as those for the second verse. If you have an odd number of verses, you typically will include the chorus with the middle one so you automatically get the correct vertical alignment. However, if the chorus text only ever appears on its own line (as it would if you add a \break after \bar "||"), then it should not matter which Lyrics context the words are in. In fact, you could add a new one just for the chorus. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: bar number alignment
On 2019-05-25 2:58 pm, Pierre Perol-Schneider wrote: Hi, On the french list a user would like to get bar numbers -- every 3 bars -- center aligned exept when systems start. Is there a way, such as \alterBroken for spanners, that could help ? Snippet (with \alterBroken just as an example): \version "2.21.0" { \override Score.BarNumber.break-visibility = ##(#t #t #t) \set Score.barNumberVisibility = #(every-nth-bar-number-visible 3) \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) \override Score.BarNumber.self-alignment-X = 0 %% wanted: %\alterBroken self-alignment-X #(list 0 1) Score.BarNumber \set Score.currentBarNumber = \repeat unfold 50 c'1 } Would something like this help? \override Score.BarNumber.self-alignment-X = #(lambda (grob) (- (ly:item-break-dir grob))) %%%% -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: staff-space as a variable
On 2019-05-25 7:34 pm, Edward Neeman wrote: Thanks Xavier, that is a much neater option than going with ballpark figures as I did in my example. Though since I have two different staff sizes in two different output files, it still means I have to do something like this: \tag #’clarinet { \override TupletBracket.padding = #(* (magstep -4) 1.1) } \tag #’piano { \override TupletBracket.padding = #1.1 } and set the appropriate keep-with-tag in the separate \score blocks. Does the following help? \version "2.19.82" scaleByStaffSpace = #(define-scheme-function (value) (number?) (lambda (grob) (* value (ly:staff-symbol-staff-space grob \layout { \context { \Staff \override TupletBracket.padding = \scaleByStaffSpace #1.1 } } music = \fixed c' { d4 \tuplet 3/2 { g8 a b } fis2 } #(define phi (/ (+ (sqrt 5) 1) 2)) \new Staff \with { \magnifyStaff $(/ phi) } \music \new Staff \music \new Staff \with { \magnifyStaff $phi } \music -- Aaron Hill___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Stacking two text lines
On 2019-05-25 9:52 pm, Mike Dean wrote: Hi group: I am extracting a solo line from Gavotte II (Cello Sonata #6, J.S. Bach) and at the end of Gavotte II are these instructions: 2nd time poco rall. Gavotte I D.C. I am struggling with how to attach that to the final measure (and a half): a, a\p-. b-. cs-. | d2 \markup is quite powerful in LilyPond; and you can use it just about anywhere. But more important to your scenario, you can use it for TextScripts and RehearsalMarks. See the following: \version "2.19.82" someText = \markup \abs-fontsize #8 \override #'(baseline-skip . 1.5) \right-column { A BB CCC } \fixed c' { | c'4 \tuplet 3/2 { b8 a g } e2^\markup \someText | f4 \tuplet 3/2 { g8 a b } c'2 \once \override Score.RehearsalMark.self-alignment-X = #RIGHT \mark \markup \someText } -- Aaron Hill___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
DNS issues with LSR
Hi folks, Who is the contact point for the LSR, more specifically the individual responsible for their DNS? There has been a long-standing issue with their name servers that prevent services like CloudFlare from reliably resolving records. But now things are worse, and it seems that lsr.dsi.unimi.it is no longer a valid domain. It used to be a CNAME to the A record sliver.docenti.di.unimi.it. CloudFlare and Quad9 both fail resolving either the CNAME or A records. Google can resolve just the A record, which currently reports as 159.149.136.4. Using that IP address directly, I can access the LSR; so it seems the web server itself is up and responsive. But these DNS issues need to be looked at. On a semi-related note, would it be possible to get a mirror of the LSR hosted somewhere like GitHub? Or does such a mirror already exist where one could `git clone` a local copy of the LSR? -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: DNS issues with LSR
On 2019-06-07 2:54 am, Aaron Hill wrote: Hi folks, Who is the contact point for the LSR, more specifically the individual responsible for their DNS? There has been a long-standing issue with their name servers that prevent services like CloudFlare from reliably resolving records. This is still relevant, as the name servers at unimi.it are still broken w.r.t. to requests from CloudFlare. But now things are worse, and it seems that lsr.dsi.unimi.it is no longer a valid domain. *smacks forehead* That's what I get for clicking links in old emails on this mailing list and not noticing a one-letter change in the domain name over time. Ignore this part of the query. The current domain name is lsr.di.unimi.it. On a semi-related note, would it be possible to get a mirror of the LSR hosted somewhere like GitHub? Or does such a mirror already exist where one could `git clone` a local copy of the LSR? Still a valid question. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Tempo markings & partcombine
On 2019-06-10 5:28 am, Michael Seifert wrote: What I’d like is for the tempo markings to show up (at most) once per staff in the score, even on combined staves; but the tempo markings should show up in each individual part when it’s produced. Right now, partcombine leads to both of the “rit.” markings being printed on the combined staff, despite the fact that only one of them is necessary. I could remove the “rit.” marking from the one of the sets of “part notes", but then it won’t show up in when I produce the individual part. Surely I can’t be the first person to run into this problem; what’s the best practice for this sort of situation? Not sure if this is "best" practice, but you could always separate the markup from the notes: \version "2.19.82" partInotes = { c'1 c'1 } partIInotes = { e'1 c'1 } partMarkup = { s1-"rit." s1-"a tempo" } \score { \new Staff << \partcombine \partInotes \partIInotes \partMarkup >> } \score { \new Staff << \partInotes \partMarkup >> } \score { \new Staff << \partIInotes \partMarkup >> } There might be some gotchas with the above approach, so perhaps the better solution would be to use edition-engraver [1]. [1]: https://github.com/openlilylib/edition-engraver -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Leadsheet - trying to fill page without leaving empty space
On 2019-06-10 9:12 am, Michael Hendry wrote: I can usually get a reasonable result by tweaking global-staff-size, but here’s an example of the bottom of a page with [ . . . ] Am I tweaking the wrong parameter? Is there a more elegant way of ensuring that a leadsheet fits in one page? \paper { page-count = #1 } Whether LilyPond will be happy about that is another thing entirely. Setting and/or adjusting the global staff size is unlikely to be the correct thing since that scales everything. What you probably want is tighter spacing rather than physically smaller elements. This falls to using the flexible vertical spacing features of LilyPond: \paper { system-system-spacing = #'( (basic-distance . 15) (minimum-distance . 10) (padding . 1) (stretchability . 2)) ragged-bottom = ##f last-bottom-spacing = #'( (basic-distance . 0) (minimum-distance . 0) (padding . 0) (stretchability . 1)) } (NOTE: The values above are just examples, nothing magical nor implying best practice.) One could probably write a dissertation on LilyPond's vertical spacing algorithm and the resulting head-scratching. Here is a quick breakdown: basic-distance is what LilyPond will try to honor absent of other constraints. Specifying a smaller value for minimum-distance will give LilyPond permission to compress the spacing. padding lets you specify that the "ink" between two systems must be separated by a suitable amount. Finally, stretchability is a unitless number that controls where LilyPond is permitted to *add* space such as when ragged-bottom is false. It should be noted that annotate-spacing is a useful tool to determine where space is allocated. The whitespace you see between the last system and the footer might not be useable space, as far as LilyPond is concerned. If it has been instructed to keep a minimum amount of space, that is probably why it opted to overflow to a second page. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: glissando over break
On 2019-06-10 11:04 am, Paul Scott wrote: Can LilyPond make a glissando across a line break? [ . . . ] Is there an equivalent of \override Beam.breakable = ##t for glissandos ? \override Glissando.breakable = ##t Glissando [1] supports unbreakable-spanner-interface [2] which has the breakable property. [1]: http://lilypond.org/doc/v2.19/Documentation/internals/glissando [2]: http://lilypond.org/doc/v2.19/Documentation/internals/unbreakable_002dspanner_002dinterface -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: metric
On 2019-06-13 5:43 pm, Freeman Gilmore wrote: Abraham: At this point it is just a curiosity. I want to compare it to the Bravura metric, i.e. where is a not head place in reference to the staff, what is the line spacing of the staff, etc. I still do not have a clue were to find the LilyPond font files. I have searched the LilyPond file for Emmentaler Feta metafont. https://github.com/lilypond/lilypond/tree/master/mf - or - https://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=tree;f=mf -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: How to get more measures on one line?
On 2019-06-15 2:20 pm, Mia Heaton wrote: So i'm trying to write out some music, and everything is spaced way too far apart, each line is being occupied by a single measure and I'm not sure how to condense it more to fit multiple measures on a line. I'm using Frescobaldi to write Lilypond, and I used the built in score wizard to create the document I'm working in. I haven't changed any other settings, only things there are what the wizard did for me and the music I inputted. Anybody know how to fix this? I'm definitely not smart when it comes to the technical aspects of Lilypond so simple explanations are appreciated. Without a minimal working example [1], it will be difficult to provide any specific advice. Try looking at the documentation regarding horizontal spacing [2] in the event that note spacing is what is preventing LilyPond from fitting multiple measures on a line. But if your music is dense enough, you may need to adjust the line width on the page and/or the global staff size to be able to fit more content. [1]: http://lilypond.org/tiny-examples.html [2]: http://lilypond.org/doc/v2.19/Documentation/notation/changing-horizontal-spacing -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Group notes with different fonts
On 2019-06-18 8:21 pm, Francesco Petrogalli wrote: Hi, Is there a way to print the following bar: ``` r2 4 ``` so that the lower notes are printed in \tiny fonts, and the upper ones are printed with \normalfont? I tried the the approches below but none off them works: ``` r2 <\tiny g \normalsize c>4 | r2 \new Voice << {\tiny a4 g} {\normalsize d' c} >> | ``` Does \tweaking font-size work for you? \version "2.19.82" \fixed c' { r2 4 } -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Volta font
On 2019-06-20 9:29 am, Thomas Morley wrote: Am Do., 20. Juni 2019 um 18:21 Uhr schrieb Leah Velleman : Is it possible to change the font used for volta numbers? In the list archives I've seen options for customizing the volta text, some of which could be used with \text or \markup to change the font in addition. But I don't want to have to manually specify text and markup commands every time I have a repeat. I want \alternative blocks to generate volta numbers automatically, as they do by default. I just want to specify once and for all what font all of those autogenerated numbers should appear in -- the same way I can, for instance, issue a single command to set a font for all lyrics. Is this possible? Thanks, Leah { \override Score.VoltaBracket.font-name = "Purisa" \repeat volta 3 { R1 } \alternative { R R R } } HTH, Harm Note that if you want to set font-family rather than font-name, you will need to change font-encoding: \version "2.19.82" { \override Score.VoltaBracket.font-encoding = #'latin1 \override Score.VoltaBracket.font-family = #'sans \repeat volta 3 { b'1 } \alternative { { b'1 } { b'1 } } } -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Minor variations on a re-used section
On 2019-06-22 1:46 pm, Evan Driscoll wrote: Is there a way to define a variable "locally"? Not with the "foo = bar" syntax. But you can do this: \version "2.19.82" outside = { 8 8 4 } { $(define inside #{ { 2 } #}) \outside \inside } { \outside \inside } -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Minor variations on a re-used section
On 2019-06-22 1:46 pm, Evan Driscoll wrote: Originally I was going to say that would work well in many cases if I have a music variable, but I don't know how to use them in the context of \repeat unfold, which I very much prefer when applicable(*). But I realized that I could write something that helps here. Any thoughts on the following? Am I missing something that means I don't have to do this? \version "2.19.80" fancy_repeat_unfold = #(define-music-function (parser location rep_spec notes) (integer? ly:music?) #{ \removeWithTag #'last_rep $notes \removeWithTag #'(first_rep last_rep) \repeat unfold #(- rep_spec 2) $notes \removeWithTag #'first_rep $notes #}) \relative c' { \fancy_repeat_unfold 3 { c1 d-\tag #'first_rep \ff e-\tag #'last_rep \p f } } I would opt for a design like this which is more flexible w.r.t. the naming and number of tags to be used: \version "2.19.82" #(define (multipleWithTagHelper proc) (define (symbol-list-list? x) (and (list? x) (every symbol-list? x))) (define-music-function (tags music) (symbol-list-list? ly:music?) #{ $@(map (lambda (x) #{ $proc $x $music #}) tags) #} )) multipleKeepWithTag = #(multipleWithTagHelper keepWithTag) multipleRemoveWithTag = #(multipleWithTagHelper removeWithTag) { \multipleKeepWithTag #'((a) (a b) (b)) { \tag #'a a'4 \tag #'b b'4 c''4 } \multipleRemoveWithTag #'((a) (a b) (b)) { \tag #'a a'4 \tag #'b b'4 c''4 } } -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Error message
On 2019-06-22 10:38 pm, Craig Dabelstein wrote: Can anyone tell me what this error message means when trying to compile a file? Drawing systems... /home/gub/NewGub/gub/target/darwin-x86/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.20/flower/include/drul-array.hh:35 <0>: failed assertion `d == 1 || d == -1' It means that some code has attempted to access a Drul_array with an invalid direction. Now seeing as Drul_arrays are so ubiquitous in the code base, it is impossible to determine which one is throwing the error without a more complete stack trace. Do you have a MWE for this error? Failing that, can you run LilyPond under gdb and share more details? -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Error message
On 2019-06-23 11:15 pm, Craig Dabelstein wrote: Thanks for the help everyone. I narrowed down the guilty bars. Here's a MWE, however, it doesn't reproduce the error in this MWE. When these two bars are replaced with s1.*2 the files produce no error. I really don't know where to go from here. Any advice? Well, just because you can comment out some music and have things work does not mean the commented out music is "guilty" per se. Context often matters, so it is wise to only point fingers when you can isolate a section of music and have it reproduce an error standing alone. In your case, you have found two bars that work just fine by themselves. If there is any error with your input, it is certainly not there. You will need to slowly add in the outer context until the problem appears. Out of curiosity, if you \omit TupletBracket in your project, does the failing assertion reproduce? -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Error message
On 2019-06-24 3:18 am, Craig Dabelstein wrote: Hi Aaron, Omitting the tuplet bracket doesn't help. I'm really at a loss at what to do now. Since your isolated measures involved tuplets, I had wondered if perhaps the issue came from the brackets. Maybe try \omit TupletNumber, both with and without \omit TupletBracket. If the issue is with the engraver, you may want to instead try adding this to your project: \layout { \context { \Voice \remove "Tuplet_engraver" } } However, I am probably completely off base on where the fault lies. You could try working through the other engravers one at a time similar to [1]. The hope is that you might be able to better narrow down the project into a MWE that does reproduce the error by getting rid of elements that have no effect. [1]: http://lsr.di.unimi.it/LSR/Item?id=280 While getting a repro is important, we should also be looking at ways to unblock your work. I would suggest dividing your project in sections, so that you can compile them independently without triggering the error. It does mean needing to manually stitch together multiple outputs into a single file, but at least you could continue to work on your score while the underlying bug is being investigated. To the list at large: Any folks here with expertise in running LilyPond under a debugger on a Mac? At this point, Craig is likely going to have to get us a stack trace since only he is able to reproduce the error without sharing the whole project. Since my knowledge on that platform is extremely limited, I cannot shepherd any further. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Error message
On 2019-06-25 4:46 am, David Kastrup wrote: Craig Dabelstein writes: And the guilty line is ... \consists "Melody_engraver" %\override Stem.neutral-direction = #'() Commenting out the \override Stem.neutral-direction line fixed the problem. More likely than not half of a red herring: garbage protection problems are quite elusive to track down. This propably changes the actions the Melody_engraver takes. Unless I am completely lost myself, this is not the trampoline problem from before, though I suspect the appearance of "Melody_engraver" has confused things. Here is the proper repro MWE: \version "2.19.82" { \override Stem.neutral-direction = #'() \tuplet 3/2 { r4 b' c'' } } This is bad input because neutral-direction must be strictly UP or DOWN (or rather it can be a procedure that ultimately evaluates to 1 or -1). From what I can see, the point of the property is to determine what happens to a note on the middle line of a staff when there is nothing else (like a beam) that can help sway the decision one way or the other. Setting it to #'() would seem to be meaningless. Consider the output from the above MWE: GNU LilyPond 2.19.82 Processing `drul-array-bad-direction.ly' Parsing... Interpreting music... Preprocessing graphical objects... programming error: Stem dir must be up or down. continuing, cross fingers Finding the ideal number of pages... Fitting music on 1 page... Drawing systems...lilypond: /home/gub/NewGub/gub/target/linux-64/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.20/flower/include/drul-array.hh:35: T& Drul_array::at(Direction) [with T = double]: Assertion `d == 1 || d == -1' failed. The terminal process terminated with exit code: 134 LilyPond is already emitting a programming error: "Stem dir must be up or down". Whenever I see "cross fingers", I never make any assumption of what will work or not. So a failing assertion afterwards is not surprising. Craig: Would you confirm whether your project output contains the programming error line? I would say there is a bug if you are *only* seeing the failing assertion. Perhaps an additional check could be added to stem.cc:649 to ensure that neutral-direction has a sane value, which could catch this particular error earlier in the process. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Spacing of clef change
On 2019-06-26 9:27 pm, Evan Driscoll wrote: I've got the example document below. There's a bit too little space for me between the last note in the last measure of the first line and the new clef. I found a mailing list entry that showed how to put some extra space before the clef (the commented-out override) and that looks great -- except that it also moves the clef at the start of the next system. I tried a \tweak version, but my attempt has no effect at all. Here's one way to do it: \version "2.19.82" \relative c { \clef "bass" \repeat unfold 10 { g2. g4 | } \break \once \override Staff.Clef.before-line-breaking = #(lambda (grob) (and (eq? LEFT (ly:item-break-dir grob)) (set! (ly:grob-property grob 'X-extent) '(-2 . 2 \clef "tenor" \repeat unfold 7 { g8 g g2. } } -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: MIDI file creation - or not?
On 2019-07-01 1:22 pm, Ben Potter wrote: I took the example chant and engraved it as a test - fine. I then added a \midi{} command in, I believe, the correct place but still get no MIDI file to play. I am stuck - please can someone help this beginner? I do not believe \midi can be used within a \markup \score. At least, in my testing, it does not work. The \score needs to be top-level. If you need to keep your \score within the \markup, put the important bits in a variable and use it twice: \version "2.19.82" stuff = << \new Staff { b'4 } \new Staff { \clef "bass" g4 } >> \markup \fill-line { \score { \stuff } } \score { \stuff \midi { } } That said, you can probably achieve what you want without needing to use \markup \fill-line for centering. LilyPond already centers the music on the page, you just need to specify a smaller value for line-width: \version "2.19.82" stuff = << \new Staff { b'4 } \new Staff { \clef "bass" g4 } >> \paper { indent = 0 line-width = 1\in ragged-right = ##f } \score { \stuff \layout { } \midi { } } This would require you to specify the width manually, but that might not be a bad thing. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: formatting of elided syllable in lyrics
On 2019-07-02 9:19 am, Graham King wrote: Where two syllables are set to the same note, is there a way to apply formatting to the second? I hope I've not missed something obvious in the NR or the Snippets Repository. In the following example, "eleison" is editorial and should be italicised. The upper line of lyrics has the correct spacing but not the desired italics: \version "2.19.82" ital = \override LyricText.font-shape = #'italic italx = \revert LyricText.font-shape { c'1 c' d' c' } \addlyrics { ky -- rie_e -- lei -- son } \addlyrics { ky -- rie_ \ital e -- lei -- son \italx } You could manually construct the syllable with custom markup: \version "2.19.82" ital = \override LyricText.font-shape = #'italic italx = \revert LyricText.font-shape { c'1 c' d' c' } \addlyrics { ky -- rie_e -- lei -- son } % \addlyrics { ky -- rie_ \ital e -- lei -- son \italx } \addlyrics { ky -- \markup { rie \italic e } -- \ital lei -- son \italx } -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Jazz Chord Symbols (as new font - NOT notation font)
On 2019-07-03 10:40 am, Marco Baumgartner wrote: One thought though: As far as I understand it: displaying chords within Lilypond is not done with/by a "normal" font but rather a special chord-mechanism. I fear, that this mechanism (as far I've seen) does a good job, but can also be seen as a limitation. How wrong would it be to create a normal font (with tons of ligatures) which I could use as info/comments/expression - NOT in Chord-mode to display chords? I feel like that would be the only way that leads to perfect chord symbols. Or am I completely out? :-) A ChordName is nothing more than markup at the end of the day. Since the default stencil is ly:text-interface::print, anything you can do in \markup you can do in a ChordName. That gives you nearly all the freedom you would ever need, so there should be nothing to worry. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Chord names starting right after the anacrusis
On 2019-07-03 4:03 pm, Vicente Sanches wrote: Hi everyone, I want to write a song in which the melody begins in upbeat (anacrusis) and the chords begins on the next bar. I have tried a lot but i can't make the chord names appear after the anacrustic bar. It often helps to provide an example of what you have tried, so we can best advise. You should only need to insert a suitable skip: \version "2.19.82" << \new ChordNames \chordmode { s4 | c1 } \new Staff { \partial 4 g'8 e' | c'1 \bar "|." } >> -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Jazz Chord Symbols (as new font - NOT notation font)
On 2019-07-03 3:12 pm, Marco Baumgartner wrote: You're saying, that once I have my font finished, I can use it as \markup OR as ChordName? Technically, you are always generating a ChordName grob if you are using a ChordNames context, but you can easily override the text property of any individual grob to be whatever you want it to be should the value that LilyPond generates not be suitable. It is a little verbose, though: \version "2.19.82" \new ChordNames \chordmode { c4 \once \override ChordName.text = \markup \circle "C" c4 c4 } If you do this a lot, then a helper function would be good: \version "2.19.82" chordText = #(define-music-function (text) (markup?) #{ \once \override ChordName.text = $text #}) \new ChordNames \chordmode { c4 \chordText \markup \box "C" c4 c4 } But wouldn't ChordName mess with my font then? Like forcing its own spacing and such? It might depending on how the resulting markup is generated. Consider a chord like C# minor. By default, LilyPond would generate something akin to: \markup { "C" \smaller \raise #0.6 \sharp "m" } Only the "C" and "m" would be using the text font whereas the sharp will come from the notation font. It is possible to change how ChordNames are built so that you can customize elements like alterations. See LSR snippet 750 [1]. [1]: http://lsr.di.unimi.it/LSR/Item?id=750 With some modifications to the aforementioned snippet, you could potentially end up with an effective markup like this: \markup { "C#" "m" } With the "C" and "#" in one string, ligatures and kerning should work (assuming you have them for alterations and note names). Since the "m" will typically get appended as its own string, it would be unaffected by ligatures and/or kerning. With more modification to the chord naming procedures, you likely could get output similar to: \markup { "C#m" } NOTE: Similar things will be adjusted to support the slash separator as well, so that you could get a single string like "C#m/E" so your font's logic could handle this. The question is whether it is worth changing any of the existing plumbing or if using custom text overrides is easier. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Jazz Chord Symbols (as new font - NOT notation font)
On 2019-07-03 4:45 pm, Aaron Hill wrote: NOTE: Similar things will be adjusted to support the slash separator as well, so that you could get a single string like "C#m/E" so your font's logic could handle this. I typed that poorly. Trying again: NOTE: Similar things will need to be adjusted to support the slash separator as well, so that you could get a single string like "C#m/E" for your font's logic to handle. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Jazz Chord Symbols (as new font - NOT notation font)
On 2019-07-04 6:29 am, Marco Baumgartner wrote: Although my font (otf) HAS ligatures (and show up if the font is used on my system in other programs) - it doesn't show ANY ligatures in lilypond... Can't make it work as of now. I searched about it, and stumbled across people saying, that this was like an official bug. Others saying, that it should be all working instead... Well, I would put my vote on the side of "should be working". Consider the following simple example: \version "2.18.2" % tested on lilybin.org \markup \roman "fi" You *should* get the "fi" as a ligature in the output. It would be good to verify this on your system. Then, use \override #'(font-name . "Your custom font") and test your font. I'm using 2.18.2 on Debian Linux with Frescobaldi. And: The ligatures I'm talking about are not standard ligatures (tied to a specific language), they're everything but standard. But like I said, a normal Text-Editor (and even used on the web via @font-face) can render the ligatures just fine. This may have more to do with Pango than LilyPond, since it is Pango that is the one dealing with fonts. If there is something wrong with how it handles OpenType ligatures, that could certainly end up affecting what you see in LilyPond. Any tips on: - where to install the font (not so sure about that anymore...) You can install fonts wherever your fontconfig is set up to load them. For instance, I have my custom fonts installed in my home directory: ~/.local/share/fonts I did this as to not conflict with any font packages that are normally written to /usr/local/share/fonts. - how to encode the font in a way that lilypond recognizes ligatures Unsure, but as I indicated above, I think this is on the Pango side, not LilyPond. - just pointing out, that I'm stupid (that would be at least a valid excuse) :-) If I did that, I would have more fingers pointing back at myself. You would not have to dig too far in the mailing list archive to find proof of my lapses into incompetence. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Are these brackets alongside a staff group possible?
On 2019-07-04 10:01 am, Pierre Perol-Schneider wrote: Hi Ben, How about: Here are some modifications I made to Pierre's code: - Removed \overriding InstrumentName.padding and opted instead for self-alignment-X of RIGHT. - Kept the stencil for SystemStartSquare but applied an extra-offset to slide it underneath the instrument name for the StaffGroup. - To prevent the other brackets from being shifted, I also had to adjust SystemStartSquare's direction to RIGHT. - Changed InstrumentName's layer to be top-most. - Used the OrchestraGroup's instrumentName with \markup \whiteout... \version "2.19.82" % Example: someMusic = { \tempo "Andante." \time 3/4 \key c \minor c'2. r8 } \paper { indent = 40 } \layout { \context { \Staff \override InstrumentName.font-size = #-1 \override InstrumentName.self-alignment-X = #RIGHT } \context { \StaffGroup \name ViolinGroup \alias StaffGroup systemStartDelimiter = #'SystemStartBrace } \context { \StaffGroup \name WindGroup \alias StaffGroup systemStartDelimiter = #'SystemStartBracket \override SystemStartBracket.collapse-height = #1 } \context { \StaffGroup \name StringGroup \alias StaffGroup \accepts ViolinGroup systemStartDelimiter = #'SystemStartBracket } \context { \StaffGroup \name OrchestraGroup \accepts WindGroup \accepts StringGroup systemStartDelimiter = #'SystemStartSquare \override SystemStartSquare.thickness = #2 \override SystemStartSquare.direction = #RIGHT \override SystemStartSquare.extra-offset = #'(-15.5 . 0) \override InstrumentName.layer = #1000 } \context { \GrandStaff \remove "System_start_delimiter_engraver" \accepts OrchestraGroup \accepts StaffGroup } } \score { \new GrandStaff << \new OrchestraGroup \with { instrumentName = \markup \whiteout \override #'(circle-padding . 1) \circle "I" } << \new WindGroup << \new Staff \with { instrumentName = "Oboe" } \someMusic >> \new StringGroup << \new ViolinGroup << \new Staff \with { instrumentName = "Violino I" } \someMusic \new Staff \with { instrumentName = "Violino II" } \someMusic >> \new Staff \with { instrumentName = "Viola" } { \clef C \someMusic } >> >> \new StaffGroup << \new Staff \with { instrumentName = "Soprano" } \someMusic \new Staff \with { instrumentName = "Alto" } { \clef C \someMusic } >> >> } -- Aaron Hill___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Grace note beams won't hide correctly
On 2019-07-04 2:02 pm, Ben wrote: This is the first time I've encountered the need to hide /grace note/ beams and/or stems. Can someone show me what I am doing wrong? Here's my attempt, though it may not be the most ideal: \version "2.19.82" \language "english" overlaySlash = #(define-music-function (thickness length angle offset) (number? number? number? number-pair?) #{ \once \override Beam.stencil = #(grob-transformer 'stencil (lambda (grob orig) (let ((th (* (ly:staff-symbol-line-thickness grob) thickness)) (x (interval-start (ly:stencil-extent orig X))) (y (interval-start (ly:stencil-extent orig Y))) (hl (/ length 2))) (ly:stencil-add orig (ly:stencil-translate (ly:stencil-rotate (make-line-stencil th (- hl) 0 hl 0) angle 0 0) (cons (+ x (car offset)) (+ y (cdr offset #}) noStem = \omit Stem \relative c' { \overlaySlash 1.2 7 35 #'(2 . -1) \appoggiatura { e!8^[ \noStem g! c! fs bf ef bf fs c! \undo \noStem e,!] } \noStem df4 } -- Aaron Hill___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Jazz Chord Symbols (as new font - NOT notation font)
On 2019-07-05 5:34 pm, Marco Baumgartner wrote: the output of: \markup \roman "fi" is in the attachment. It does not produce the ligatures - both in standard and a testing font of mine containing ligatures (otf). In the word "leer", the letter e and r should be connected. I stumbled over this (2015): http://lilypond.1069038.n5.nabble.com/Broken-ligatures-in-recent-LilyPond-versions-td171760.html It's said, that as of 2.18.2 and newer, ligatures are broken in lilypond. Doesn't seem to be the case for everybody though... I've updatet my system, running Debian Stretch 9.9 now. Lilypond is no longer in the standard-repository in this updated version, so I've installed the generic package "2.18.2" from lilypond.org. Firstly, I said lilybin.org by mistake. I meant of course lilybin.com. Secondly, I goofed in my testing. I had thought I was on stable 2.18.2 when I saw the ligature working. But that is wrong. It was when lilybin.com was using unstable 2.19.48 that the ligatures appear to work. And for comparison, the following also works on my machine running 2.19.82: \version "2.19" \paper { #(include-special-characters) } \markup \fontsize #12 \roman "fi ffi fl" \markup \fontsize #12 \roman { "fi ffi fl" } At this point, 2.18.2 is pretty old when compared to all the updates pending next stable release. So it would definitely be worth seeing if you can move up to the latest bits. But if you have to stick to 2.18.2, then ligatures are not going to work as expected due to problems with the older version of Pango it would seem. My apologies for leading you down a bad path. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: caesura or other ornamentation ?.
On 2019-07-09 7:11 pm, Eby Mani wrote: Many Thanks Torsten, exactly the thing i was looking for. Now, how to do those "Forefall" and "the shake turned" symbols in lilypond. any snippets ?. You could do something like this: \version "2.19.83" forefall-markup = \markup \rotate #'-30 \musicglyph "scripts.rvarcomma" forefall = #(let ((m (make-articulation "trill"))) (set! (ly:music-property m 'tweaks) (acons 'stencil (lambda (grob) (grob-interpret-markup grob forefall-markup)) (ly:music-property m 'tweaks))) m) shakeTurned-markup = \markup \overlay { \raise #'0.65 \rotate #'-150 \musicglyph "ties.lyric.short" \rotate #'-30 \musicglyph "scripts.rvarcomma" \lower #'0.55 \rotate #'-30 \musicglyph "scripts.rvarcomma" } shakeTurned = #(let ((m (make-articulation "trill"))) (set! (ly:music-property m 'tweaks) (acons 'stencil (lambda (grob) (grob-interpret-markup grob shakeTurned-markup)) (ly:music-property m 'tweaks))) m) { b'4 b'\forefall b'\shakeTurned b' } Here I am partying on the "trill" articulation and changing its stencil using glyphs that already exist in the notation font. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: caesura or other ornamentation ?.
On 2019-07-09 7:34 pm, Aaron Hill wrote: On 2019-07-09 7:11 pm, Eby Mani wrote: Many Thanks Torsten, exactly the thing i was looking for. Now, how to do those "Forefall" and "the shake turned" symbols in lilypond. any snippets ?. You could do something like this: \version "2.19.83" forefall-markup = \markup \rotate #'-30 \musicglyph "scripts.rvarcomma" forefall = #(let ((m (make-articulation "trill"))) (set! (ly:music-property m 'tweaks) (acons 'stencil (lambda (grob) (grob-interpret-markup grob forefall-markup)) (ly:music-property m 'tweaks))) m) shakeTurned-markup = \markup \overlay { \raise #'0.65 \rotate #'-150 \musicglyph "ties.lyric.short" \rotate #'-30 \musicglyph "scripts.rvarcomma" \lower #'0.55 \rotate #'-30 \musicglyph "scripts.rvarcomma" } shakeTurned = #(let ((m (make-articulation "trill"))) (set! (ly:music-property m 'tweaks) (acons 'stencil (lambda (grob) (grob-interpret-markup grob shakeTurned-markup)) (ly:music-property m 'tweaks))) m) { b'4 b'\forefall b'\shakeTurned b' } Here I am partying on the "trill" articulation and changing its stencil using glyphs that already exist in the notation font. Apologies. I had meant to include an image as well. -- Aaron Hill___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Bug with transpose in functions
On 2019-07-11 11:52 pm, Immanuel Litzroth wrote: This seems to do the wrong thing: \version "2.19.81" testme = #(define-music-function (parser location music) (ly:music?) #{ \transpose c c' {#music } {#music } #}) \testme g' printing out two g'' instead of a g'' and a g' Consider using $music or ly:music-deep-copy: \version "2.19.83" testI = #(define-music-function (music) (ly:music?) #{ \transpose c c' $music $music #}) testII = #(define-music-function (music) (ly:music?) #{ \transpose c c' #(ly:music-deep-copy music) #music #}) \testI d' \testII e' Also I found it strange that {#music} is not accepted as an argument with the following error: tmp.ly:6:16: error: GUILE signaled an error for the expression beginning here {# music} Unbound variable: music} It seems to parse the closing } as part of the variable name. Scheme is pretty permissive with what can be part of a symbol, so this is one case where whitespace does matter. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: How to skip to chorus from stanza and return to next stanz?
On 2019-07-16 7:52 pm, John Helly wrote: Aloha. I have a guitar and vocal song with 6 stanzas and a chorus and outro with lyrics. I would like to jump to the chorus after the 2nd and 4th stanzas and return to the 3rd and 5th, respectively, coming out of the chorus. Since I'm not formally trained in notation, I don' t know how this should be approached (or if it's possible). Here is the structure of the song. Any advice is most welcome. I've tried inserting markup text but haven't been successful although this would be my ad hoc approach. Ad hoc is not a bad thing, to be honest, providing your notation is clear enough for performers to follow consistently. There are a few approaches I have seen for this pattern. 1) Join paired stanzas together as a sort of meta stanza. If you have room on the page, simply have stanza one flow right into stanza two. This does mean duplicating notes and chords, but it only needs a simple repeat and produces a very clean roadmap. The added advantage here is that you can cut the number of lyrics lines in half. (Six is pushing it my experience, and you will likely need to space the lyric lines or add in dividing lines to make it easier for the eye to know where to jump at the end of each line.) 2) Keep all lyrics stacked and use a repeat with two voltas. The first volta will be a repeat back to the top of the stanzas for iterations "1.3.5.". The second volta (for "2.4.6.") will lead into the chorus. At the end of the chorus, use a D.C. or D.S. as appropriate, with or without an "al Coda" again as needed. 3) Notate the music as if the chorus follows each stanza and either add a text markup or rely on folks hand-writing in text that informs them of the roadmap. This option is very handy if the roadmap could change between performances. For instance, you might end up only singing stanzas 1, 2, 4, and 6, with the chorus after 2 and 6. Sometimes, it is nice to have printed notation that is more general and flexible than to be cluttered with potentially extra specificity. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: LilyPond 2.20 or 2.21 on Ubuntu 18.04
On 2019-07-18 6:13 am, Thomas Morley wrote: Am Do., 18. Juli 2019 um 14:37 Uhr schrieb Ralph Palmer : Greetings - I'm running LilyPond 2.19.81 with Frescobaldi 3.0.0 under Ubuntu 18.04.2. Has any progress been made in making a process available to install LilyPond 2.20 or 2.21 on Ubuntu 18.04? Back in March of this year (2019), there was a brief discussion about installing Guile 1.8 on Ubuntu 18.04, so that ly 2.20 could run. I tried to follow the suggestions, but was unsuccessful. If someone would be willing to work with me, perhaps off-list, and we were successful, maybe we could post a working process to enable others to install and use ly 2.20. All the best, Ralph To have access to the currently not released 2.20 you'll need to compile the branch stable/2.20 from the ly-git-repository. To do so you need guilev1. Though, isn't guile-1.8 available via synaptic? At least for me, running Ubuntu 18.04 64-bit, it is... Ofcourse this may be different for newer Ubuntu-versions or other OS... I have Ubuntu 18.04.2 LTS and an `apt search` does not turn up guile-1.8. Do you have a custom PPA? apt-cache policy | grep http | awk '{print $2 $3}' | sort -u http://archive.ubuntu.com/ubuntubionic-backports/main http://archive.ubuntu.com/ubuntubionic-backports/universe http://archive.ubuntu.com/ubuntubionic/main http://archive.ubuntu.com/ubuntubionic/multiverse http://archive.ubuntu.com/ubuntubionic/restricted http://archive.ubuntu.com/ubuntubionic/universe http://archive.ubuntu.com/ubuntubionic-updates/main http://archive.ubuntu.com/ubuntubionic-updates/multiverse http://archive.ubuntu.com/ubuntubionic-updates/restricted http://archive.ubuntu.com/ubuntubionic-updates/universe http://ppa.launchpad.net/fish-shell/release-2/ubuntubionic/main http://security.ubuntu.com/ubuntubionic-security/main http://security.ubuntu.com/ubuntubionic-security/multiverse http://security.ubuntu.com/ubuntubionic-security/restricted http://security.ubuntu.com/ubuntubionic-security/universe Not like it matters too much, since instructions have already been posted for obtaining and building guilev1 manually. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Colored box behind a single note
On 2019-07-21 10:04 am, Werner LEMBERG wrote: Using http://lsr.di.unimi.it/LSR/Item?id=1000 I wonder how to get the effect for a single note. Ideally, I would like to write \genericSpan <...parameters ...> e\startGroup\endGroup but since `\genericSpan' uses a `HorizontalBracket' grob, this fails; it needs at least two notes. I wasn't able to find a suitable solution in the web; IMHO, it would be a quite useful addition to this snippet. It appears you could use an invisible grace note as a workaround: \version "2.19.83" \include "ColorSpanDef.ily" omitNotes = { % Like hideNotes, but removes the stencils instead. \override Dots.stencil = ##f \override NoteHead.stencil = ##f \override NoteHead.no-ledgers = ##t \override Flag.stencil = ##f \override Beam.stencil = ##f \override Stem.stencil = ##f \override Accidental.stencil = ##f \override Rest.stencil = ##f \override TabNoteHead.stencil = ##f } graceStartGroup = \grace { \once \omitNotes b'1\startGroup } \new Staff { g'4 a'8[ \genericSpan #-1 #1 #-1 #1 \colDarkBlue \colLightBlue #0 #0 ##f ##f \graceStartGroup b'8]\stopGroup c''8[ \genericSpan #-1 #1 #-1 #1 \colDarkGreen \colLightGreen #0 #0 ##f ##f \graceStartGroup b'16\stopGroup a'16] \genericSpan #-1 #1 #-1 #1 \colDarkRed \colLightRed #0 #0 ##f ##f \graceStartGroup b'4\stopGroup } -- Aaron Hill___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Alternating text and music
On 2019-07-27 12:03 pm, David Wright wrote: On Sat 27 Jul 2019 at 18:57:35 (+0200), David Kastrup wrote: David Wright writes: > I would advise against that because PNGs are rastered. The hint is in > the name: portable-Network-graphics. Uh, what in the name indicates rasterisation? Perhaps I was a little oblique: "Network" indicates that the format is designed for transfer of images over the network, rather than between local applications. Compromises are made in favour of smaller size and higher transmission speed, rather than maintaining resolution; not desirable for engraving pages of music. Vector formats are equally as well-suited for transmission over a network. PNG might have been created with the Web in mind; but to me, nothing about networking would seem to prefer raster over vector. In fact, vector is pretty common on the Web these days, whether in the form of SVG or web fonts. I'm not overconcerned whether people see this as a hint not to use PNGs in this workflow. But I assume you're not supporting their use, are you. This is purely anecdotal: I use PNGs in my workflow with no issues whatsoever. Mind you, I am using them for projection not print. In practice, I have LilyPond rasterize at a higher DPI than I need for the target resolution and then use ImageMagick to down-sample so I can better control the quality of smoothing/anti-aliasing. It is admittedly a little overkill, as I doubt members of the congregation could notice the finer details given the distance to the screens. For the record, when I do use LilyPond specifically for print, I almost always use PDF as the output. On occasion, I have had to use a raster format when I was compositing music within a document. In that case, I just crank up the DPI in order to saturate the resolution of the printer. Again, I suspect few people would be able to tell the difference given the printed document. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: How to set a fixed distance between upper page edge and top line of first staff?
On 2019-07-30 10:21 am, kimfierens wrote: Unfortunately none of your proposed solutions produced entirely satisfactory results. For some odd reason, the one note examples work pretty well, but as soon as more notes are added to a staff, the staffs are whacked out of alignment. It would be helpful to see precisely what you are trying and the results you are getting. Simply saying "more notes are added" and "whacked out of alignment" leaves us having to guess at what might be going wrong. Additionally, I find it difficult to get all the snippets equal width. Set paper and line width appropriately with ragged-right set to false. Consider: \version "2.19.83" #(set-global-staff-size 20) \paper { #(set! paper-alist (cons '("custom" . (cons (* 1.5 in) (* 40 pt))) paper-alist)) #(set-paper-size "custom") top-margin = 0 bottom-margin = 0 indent = 0 line-width = 1.5\in ragged-right = ##f oddHeaderMarkup = ##f evenHeaderMarkup = ##f tagline = ##f top-system-spacing = #'( (basic-distance . 0) (minimum-distance . 4) (padding . -100) (stretchability . 0) ) last-bottom-spacing = #'( (basic-distance . 0) (minimum-distance . 0) (padding . -100) (stretchability . 0) ) } music = { \time 3/4 c'4 g' d'' | a''2. \bar "|." } \score { \transpose c' g \music } \score { \transpose c' c' \music } \score { \transpose c' f' \music } Results attached for reference. -- Aaron Hill top-system-spacing.pdf Description: Adobe PDF document ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: padding problem
On 2019-07-31 10:24 pm, Werner LEMBERG wrote: Folks, please have a look at the attached (non-MWE) example. If the `padding' value in `system-system-spacing' is -2, both systems are displayed on one page – and there is plenty of vertical space still available at the bottom. If I change `padding' to -1, I suddenly get two pages. Why? What parameters am I missing to get the two systems on one page without overlapping? In case there is no bug in lilypond this should be easily possible, right? I would suspect it is simply LilyPond's early estimation for page breaking that is determining there would be insufficient room. In my experience, LilyPond seems to be a little generous when estimating the potential size of objects. This often results in music overflowing to additional pages when not strictly needed. Adjusting variables like system-count and systems-per-page are usually helpful. You could experiment with setting page-breaking-system-system-spacing, which can let you specify custom spacing variables that apply just for the determination of page breaking. For instance, you will likely not want a negative padding for the real system-system-spacing so that you do not get any overlapping ink; but the negative padding could be needed with page-breaking-system-system-spacing. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: \unset in paper block
On 2019-08-05 2:30 pm, David Kastrup wrote: Simon Albrecht writes: By the way, I happened to see that section 1.3.4 of the Extending Manual sets off on the fact that it’s not possible to attach articulations to variables (“We know that `{ \music -. -> }' will not work in LilyPond”). So when that changes in future versions, this will need to be rewritten. It only works in music sequences now, not in general. You'll still not be able to state something like var = \music -. -> if I remember correctly. What are the semantics of adding articulations to an instance of a music variable? Specifically, to which events in the variable are the articulations applied? Or would it be an error for the music variable to contain more than one note/chord to avoid ambiguity? Does this new syntax support other post-events (e.g. \tweaks and scripts) or just articulations? My apologies for the questions, but I cannot recall seeing any discussion of this feature in the main list. Should I be subscribing to the developer list? -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: upgrading to 2.19.83-1 from 2.18.2 on Linux Mint
On 2019-08-09 4:16 pm, Bill via lilypond-user wrote: Oh well I tried i downloaded lilypond-2.19.83-1.linux-64.sh from this GNU/Linux 64: LilyPond 2.19.83-1 buttonat http://lilypond.org/development.html I tried to upgrade using Synaptic package Manager but that only showed 2.18.2 which i have installed. This is an installation script, not a package. To my knowledge, it has nothing to do with any package managers. As such, you will first need to use your package manager to manually uninstall any existing LilyPond package if you have one that you want to replace. Then you can simply run 'sudo sh lilypond-2.19.83-1.linux-64.sh' (no extra arguments needed) and follow the prompts. This will install under /usr/local/lilypond with a shortcut under /usr/local/bin by default. An alternative is to install LilyPond to your home directory for a user-specific installation. This will be independent of any other installation, meaning you do not need to futz with any package managers. In this case, do not use 'sudo'. Just run 'sh lilypond-2.19.83-1.linux-64.sh'. By default, it will install under /~/lilypond with a shortcut under /~/bin. -- Aaron Hill ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user