Re: Understanding Lilypond
From: Kieren MacMillan kieren_macmil...@sympatico.ca Subject: Re: Understanding Lilypond Hi Peter, many of us have struggled for many months to get to grips with the structure and philosophy of Lilypond. 1. Regarding the structure, what are you struggling with exactly? 2. Regarding the philosophy, what are you struggling with exactly? Hope I can help! Kieren. I have perhaps too much to say about lilypond documentation, much of it still very unformed in my mind. Here is some coherent but still probably pie-in-the-sky stuff that I think would be exceptionally helpful. % Code examples The current examples present the minimum information necessary to demonstrate the feature. This follows lilypond's approach, which is to invent everything needed that you didn't specify, like books, scores, staves, time signatues, clefs, barlines, etc. However, there are lots of time you are dealing with things that need to be applied for only one staff, one staff group, for only one measure, only one book, etc. Before you can apply the example, you have to backfill the structure to which it needs to be applied. Then, apply your modification in the correct place. This leads me to a few suggestions: 1a) Provide a way to take a snippet and get the inferred document.Which is to say, let lilypond invent all the book/score/staff, etc. necessary, and then output that structure, rather than the usual pdf output. (Someone will probably inform me that Frescobaldi already does this, and/or there is an interpreter that does it, or a command line argument...) 1b) Add an option to toggle each example from the current, minimal example, to a full context example that has this inferred structure. 2) For things that can be applied in various places (at global level, book level, score level, staff group level, staff level, layout, context etc.) provide examples for what each of these look like. Let the user choose at which level the example should pertain, so they can then copy/paste the code applicable to their situation. 3a) Link from the examples in the documentation to templates (and provide enough templates to cover the material.) 3b) Compile some documentation-demonstration scores made by stringing together the content in the existing examples, then provide links to the examples' usage in these reference scores. 3c) Develop a library of musical example scores and cross reference them so you can go from score to documentation or vice versa. I am willing to help with documentation efforts if anyone is coordinating them and needs help. David Elaine Alt 415 . 341 .4954 *Confusion is highly underrated* ela...@flaminghakama.com self-immolation.info skype: flaming_hakama Producer ~ Composer ~ Instrumentalist -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Hi, The current examples present the minimum information necessary to demonstrate the feature. This follows lilypond's approach, which is to invent everything needed that you didn't specify, like books, scores, staves, time signatues, clefs, barlines, etc. This *is* a potential frustration. 1b) Add an option to toggle each example from the current, minimal example, to a full context example that has this inferred structure. That would be a great solution — it might be difficult to do “automagically”, but could certainly be done manually by an interested party. 2) For things that can be applied in various places (at global level, book level, score level, staff group level, staff level, layout, context etc.) provide examples for what each of these look like. Let the user choose at which level the example should pertain, so they can then copy/paste the code applicable to their situation. Hmmm… Given the impressive (read: daunting) size of the docs as they already stand, I’m not sure that multiplying all examples by at least a factor of five (my estimate for the average number of possible levels of application) is a great idea. Certainly *one* example showing the application of the same (e.g.) override at all possible different levels would be instructive — and hopefully easily applied to other circumstances by the reader. 3a) Link from the examples in the documentation to templates (and provide enough templates to cover the material.) There is a discussion currently underway about how best to provide stylesheets and templates — feel free to join in and contribute there! 3b) Compile some documentation-demonstration scores made by stringing together the content in the existing examples, then provide links to the examples' usage in these reference scores. 3c) Develop a library of musical example scores and cross reference them so you can go from score to documentation or vice versa. Interesting suggestions, though I don’t immediately see how to accomplish that easily. Thanks! Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
RE: Understanding Lilypond
Thanks for your reply Kieran - I'm not sure that my response is suitable for the list but will post it there anyway. Please feel free to critisize scorn or otherwise flame. 1. This is difficult. My background is chiefly in Fortran and Visual Basic although I have dabbled with machine code. These codes have well defined structures variables are defined there are multi dimensional arrays and subroutines are similarly well defined as far as parameters and scopes are concerned. When I look through the Lilypond source code I see (a) at least three different languages being used C++, Scheme, and Python. It is not clear how these are integrated or why they are needed. (b) the syntax and scope of variables is hard to follow through the various procedures probably mainly due to a lack of understanding of the way scheme objects are stored in memory. I have started to learn these codes but often find various definitions and example scripts only work in one variety of the code. (c) As with most learning tasks it is important to start out with correct descriptions and definitions. The tyro can be led astray by ill founded assumptions as to how the code elements work and fit together. In short you can see difficulties that don't exist or try to implement unnecessary coding. A simple example being lists and regression in scheme the use and philosophy is different from say Fortran and similar languages where the basic principles allow you to guess how to use unfamiliar procedures rather as you would use paper and pencil. You can often read code and see at a glance the gist of what is going on. (d) summing up when looking at the source code there is a dazzling array of procedures but how and when they are called is not clear - nor how they relate to each other. I would be looking for a main programme and branches to various sub programmes or routines I.E. a flow diagram! 2. (a) The philosophy is outlined but is short on detailed explanation in terms of code. The ideas of engravers, grobs etc is understood but the details of their parameters and how they are altered in ly scripts is hard to find in a systematic way. There are excellent aids to get one writing ly scripts and producing quite complex scores but not to make those individual tweaks. Looking at the various tweaks published on the list can be bewildering the common first impression is why? how? Where was that in the documentation? Maybe I'm just to long in the tooth for grasping new concepts. More experienced programmers will rightly say we are not spoon feeding and you should put in the hard graft yourself. I agree with that but would love some signposts to reduce the feeling of being lost in a sea of hieroglyphs. -Original Message- From: Kieren MacMillan [mailto:kieren_macmil...@sympatico.ca] Sent: Friday, January 16, 2015 9:40 PM To: Peter Gentry Cc: Lilypond-User Mailing List Subject: Re: Understanding Lilypond Hi Peter, many of us have struggled for many months to get to grips with the structure and philosophy of Lilypond. 1. Regarding the structure, what are you struggling with exactly? 2. Regarding the philosophy, what are you struggling with exactly? Hope I can help! Kieren. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Cc: Lilypond-User Mailing List Subject: Re: Understanding Lilypond Hi Peter, many of us have struggled for many months to get to grips with the structure and philosophy of Lilypond. 1. Regarding the structure, what are you struggling with exactly? 2. Regarding the philosophy, what are you struggling with exactly? Hope I can help! Kieren. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
On Sat, 2015-01-17 at 13:37 +0100, Urs Liska wrote: Concretely I see the problem in a sequence of related issues: - Scheme itself *is* difficult to get into actually, Scheme syntax is incredibly simple - Scheme expressions are lists (a b c) with the first element being the procedure and the subsequent ones the parameters. So if you come across (if a b) you look up the procedure if in the documentation, rather than having to learn a bunch of keywords (if, case, else ...) which have special syntax peculiar to them. - There are so many Scheme dialects, the only one relevant to LilyPond is the guile-1.8 interpreter. In Denemo we have moved on to guile-2.0 but I haven't come across other interpreters for Scheme, though I've noticed them mentioned in the Guile documentation. HTH Richard ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Am 17.01.2015 um 14:13 schrieb Richard Shann: On Sat, 2015-01-17 at 13:37 +0100, Urs Liska wrote: Concretely I see the problem in a sequence of related issues: - Scheme itself *is* difficult to get into actually, Scheme syntax is incredibly simple - Scheme expressions are lists (a b c) with the first element being the procedure and the subsequent ones the parameters. So if you come across (if a b) you look up the procedure if in the documentation, rather than having to learn a bunch of keywords (if, case, else ...) which have special syntax peculiar to them. Yes. But the way until you get familiar with this simple foundation and with all its implications is incredibly steep. - There are so many Scheme dialects, the only one relevant to LilyPond is the guile-1.8 interpreter. In Denemo we have moved on to guile-2.0 but I haven't come across other interpreters for Scheme, though I've noticed them mentioned in the Guile documentation. Of course, but when you are searching for solutions, approaches or even tutorials on Scheme you'll get a bunch of different resources, some for Racket, some for MIT Scheme, some for guile-1.8, some for guile-2.0 and so on. While often there is something to the solution that you can use for the problem at hand often the suggestions don't work in LilyPond - and you don't have a clue why. The correct Scheme version is stated somewhere at the beginning of the Extending manual, but it's done so in a way that you will only understand the meaning of it after having learned quite some Scheme. Urs HTH Richard -- Urs Liska www.openlilylib.org ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Am Samstag, 17. Januar 2015 14:13 CET, Richard Shann rich...@rshann.plus.com schrieb: actually, Scheme syntax is incredibly simple - Scheme expressions are lists (a b c) with the first element being the procedure and the subsequent ones the parameters. So if you come across (if a b) you look up the procedure if in the documentation, rather than having to learn a bunch of keywords (if, case, else ...) which have special syntax peculiar to them. Hmm, as a general intro this is o.k. - but be aware that syntax is coupled with semantics and with Lisp/Scheme sematically differnt things do have the same (non)syntax. Some consider this elegant, some feel they get lost. BTW, 'if', like 'let' or 'cond' or 'begin' etc., is _not_ a procedure but either a macro or a special operator. - There are so many Scheme dialects, the only one relevant to LilyPond is the guile-1.8 interpreter. In Denemo we have moved on to guile-2.0 but I haven't come across other interpreters for Scheme, though I've noticed them mentioned in the Guile documentation. Autsch. Racket, DrScheme, MIT-Scheme, Bigloo, Chicken, Stalin, ChezScheme or, relevant for us musicians S7 ... Cheers (and a happy new year) Ralf Mattes HTH Richard ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Hi Peter, I'm not sure that my response is suitable for the list It *definitely* is! Please feel free to critisize scorn or otherwise flame. I’m sorry your default expectation is to be critisized, scorned, or flamed — that hasn’t been my primary experience on this list (as a newbie more than a decade ago, or since), although there are of course exceptions. (As I recall, the lilypond-devel list is more severe.) There are excellent aids to get one writing ly scripts and producing quite complex scores but not to make those individual tweaks. Looking at the various tweaks published on the list can be bewildering the common first impression is why? how? Where was that in the documentation? Can you give a concrete example? Either it is in the documentation and you were unable to find it, or it’s not in the documentation — either way, there may be a solution which will assist future users/readers. Thanks, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Urs Liska wrote Of course, but when you are searching for solutions, approaches or even tutorials on Scheme you'll get a bunch of different resources, some for Racket, some for MIT Scheme, some for guile-1.8, some for guile-2.0 and so on. While often there is something to the solution that you can use for the problem at hand often the suggestions don't work in LilyPond - and you don't have a clue why. For learning Scheme itself I found myself just using the GUILE manuals, and this has worked well for me. They are terse but comprehensive and you know it's the same type of Scheme used in LilyPond. https://www.gnu.org/software/guile/docs/docs.html There's an all-in-one-page version of these manuals which is easy to search using your browser's search-in-page feature. That's how I usually look for something I'm trying to understand, when reading an LSR snippet, etc. For a more friendly tutorial-style walk-through of Scheme to familiarize yourself with it in general... I like this series of videos: https://www.youtube.com/watch?v=byofGyW2L10 But I agree that the LilyPond-Scheme interfaces are more obscure and could use more documentation. For this I've learned most from examples from the LSR (that were similar to what I was trying to do). One of the problems is that what you need to know varies greatly with what you want to do. Are you overriding grob properties? Are you writing a custom engraver? Are you altering contexts (their properties or sets of engravers)? Are you altering the musical input before it gets very far? Those are each different ways of intervening, at different points, in different ways, that one would use for different purposes. Hmmm... It would be interesting and maybe helpful to develop such a typology of common techniques. What have I left out above? (Also, my sense is that LilyPond may or may not have the kind of systematic consistency that some are looking for?) Cheers, -Paul -- View this message in context: http://lilypond.1069038.n5.nabble.com/Understanding-Lilypond-tp170550p170609.html Sent from the User mailing list archive at Nabble.com. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Am 17.01.2015 um 17:22 schrieb Kieren MacMillan: Hi Peter, I'm not sure that my response is suitable for the list It *definitely* is! Please feel free to critisize scorn or otherwise flame. I’m sorry your default expectation is to be critisized, scorned, or flamed — that hasn’t been my primary experience on this list (as a newbie more than a decade ago, or since), although there are of course exceptions. (As I recall, the lilypond-devel list is more severe.) There are excellent aids to get one writing ly scripts and producing quite complex scores but not to make those individual tweaks. Looking at the various tweaks published on the list can be bewildering the common first impression is why? how? Where was that in the documentation? Can you give a concrete example? Either it is in the documentation and you were unable to find it, or it’s not in the documentation — either way, there may be a solution which will assist future users/readers. I think the problem is more fundamental than individual missing items. What we'd need is something similarly slow-paced as the Learning Manual but for the Extending Manual. In a way the tutorials in Scores of Beauty (http://lilypondblog.org/category/using-lilypond/tutorials/) are a start, but I'd always want to have more material there. Just yesterday we had the question how to store pitches in a Scheme pair. The solution involved switching parsing modes between LilyPond, Scheme and LilyPond-in-Scheme. Such questions would really warrant tutorials, and these tutorials would actually help people get into it. Urs Thanks, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user -- Urs Liska www.openlilylib.org ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Am 16.01.2015 um 13:35 schrieb David Sumbler: As I start to gain experience in setting music in Lilypond I am trying to understand more about how it works internally. As well as personal satisfaction, this obviously has a practical aim: it will make it easier for me to modify or correct things without having to ask so many questions on this forum, and will also perhaps eventually mean that I can help by answering others' questions. However, despite having read the documentation - some of it several times - I do find understanding some aspects of the structure of Lilypond extremely difficult. One of the manuals likens a Lilypond file to source code in a computer language, but I find that understanding the structure of a coding language is perfectly straightforward compared to getting my head around Lilypond. (I have learnt several languages over the years, although not, I admit, Lisp or Scheme; however, I have no reason to suppose that understanding their structure is any more difficult than other languages). For instance, in Lilypond there is a sensible difference in the default handling of time- and key-signatures. Using the \key command a key is defined for the current Staff. But using the \time command sets the time signature for every staff. If a different time signature is required for a particular staff, then timeSignatureFraction has to be changed. From the Internals Reference I see that the 2 layout objects KeySignature and TimeSignature both exist, by default, in a Staff context, which makes perfect sense. Yes, that makes sense because they are used to *engrave* the visual objects at staff level. Clearly, though, when the \time command is used, then not only is Staff.timeSignatureFraction set, but so also is some other variable in a higher context. The timing aspects are controlled by the Timing_translator, and this engraver by default lives in the Score context. Which also makes perfect sense because usually the timing is uniform in a score from top to bottom. But this construct is what makes polymetrics so easy to do in LilyPond. You can move the Timing_translator from the Score to Staff level to get independent timing in the different staves. But you should not forget to also move the Default_bar_line_engraver that should live at the same level as Timing_translator. With key signatures it is much more common that different instruments *show* different keys. Nevertheless it *is* sort of an inconsistency that you *always* have to specify the key for each staff separately (or in a global variable, which is not much better). It would be more consistent to have the key also live in the Score context by default and give the ability to sepcify contexts with different keys through their context properties. I think this has been discussed recently. HTH Urs What I can't seem to find (although it may well be in the documentation somewhere) is a clear explanation of this. Can somebody point me in the right direction? David ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
RE: Understanding Lilypond
. -- Message: 3 Date: Fri, 16 Jan 2015 06:25:31 -0700 (MST) From: tisimst tisimst.lilyp...@gmail.com To: lilypond-user@gnu.org Subject: Re: small caps Message-ID: 1421414720.349...@smtp.gmail.com Content-Type: text/plain; charset=us-ascii Craig, \caps is just a short-hand command for \smallCaps, but this situation is obviously a code bug. You CAN put the \caps or \smallCaps in the header variable itself: piece = \markup \smallCaps Piece and then it works, but since it seems that you are trying to create a custom title that does this automatically, this solution may not be suitable for you. I'm forwarding this small example to the bugs-list for extermination: % \version 2.19.11 \paper { scoreTitleMarkup = \markup { \column { \on-the-fly \print-all-headers { \bookTitleMarkup \hspace #1 } \fill-line { \large \bold \smallCaps \fromproperty #'header:piece } } } } \header { title = Title piece = Piece % put the \smallCaps in here and it works } { \repeat unfold 3 { s1 \break } } %-- - Abraham On Fri, Jan 16, 2015 at 2:00 AM, Craig Dabelstein [via Lilypond] ml-node+s1069038n170544...@n5.nabble.com wrote: Hi Shane, \version 2.19.11 Even with \smallCaps (how did I miss that!?!!?) the test stays the same. Bold and Large are both working but not the small caps. Craig On Fri Jan 16 2015 at 4:39:22 PM Shane Brandes [hidden email] wrote: Which version are you using? and is it not \smallcaps that you need to issue? Also does the font actually have small caps natively? Shane On Fri, Jan 16, 2015 at 12:54 AM, Craig Dabelstein [hidden email] wrote: Hi List, Can anyone tell me why I can't get small caps working with this code? Many thanks, Craig scoreTitleMarkup = \markup { \column { \on-the-fly \print-all-headers { \bookTitleMarkup \hspace #1 } \fill-line { \large \bold \caps \fromproperty #'header:piece } } } } ___ lilypond-user mailing list [hidden email] https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list [hidden email] https://lists.gnu.org/mailman/listinfo/lilypond-user If you reply to this email, your message will be added to the discussion below: http://lilypond.1069038.n5.nabble.com/small-caps-tp170540p170544.html To start a new topic under User, email ml-node+s1069038n...@n5.nabble.com To unsubscribe from Lilypond, click here. NAML -- View this message in context: http://lilypond.1069038.n5.nabble.com/small-caps-tp170540p170552.html Sent from the User mailing list archive at Nabble.com. -- next part -- An HTML attachment was scrubbed... URL: http://lists.gnu.org/archive/html/lilypond-user/attachments/20 150116/0f65abad/attachment.html -- Message: 4 Date: Fri, 16 Jan 2015 14:28:52 +0100 From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Understanding Lilypond Message-ID: 54b91214.40...@openlilylib.org Content-Type: text/plain; charset=windows-1252; format=flowed Am 16.01.2015 um 13:35 schrieb David Sumbler: As I start to gain experience in setting music in Lilypond I am trying to understand more about how it works internally. As well as personal satisfaction, this obviously has a practical aim: it will make it easier for me to modify or correct things without having to ask so many questions on this forum, and will also perhaps eventually mean that I can help by answering others' questions. However, despite having read the documentation - some of it several times - I do find understanding some aspects of the structure of Lilypond extremely difficult. One of the manuals likens a Lilypond file to source code in a computer language, but I find that understanding the structure of a coding language is perfectly straightforward compared to getting my head around Lilypond. (I have learnt several languages over the years, although not, I admit, Lisp or Scheme; however, I have no reason to suppose that understanding their structure is any more difficult than other languages). For instance, in Lilypond there is a sensible difference in the default handling of time- and key-signatures. Using the \key command a key is defined for the current Staff. But using the \time command sets the time signature for every staff. If a different time signature is required for a particular staff, then timeSignatureFraction has to be changed. From the Internals Reference I see that the 2 layout objects KeySignature and TimeSignature both exist, by default, in a Staff context, which makes perfect sense. Yes, that makes sense because they are used to *engrave* the visual objects at staff
Re: Understanding Lilypond
://lilypond.1069038.n5.nabble.com/file/n170551/esempio3033 -crop.pdf esempio3064-crop.pdf http://lilypond.1069038.n5.nabble.com/file/n170551/esempio3064 -crop.pdf -- View this message in context: http://lilypond.1069038.n5.nabble.com/Re-bottom-of-EPS-output-c ut-off-size-of-PDF-files-tp170524p170551.html Sent from the User mailing list archive at Nabble.com. -- Message: 3 Date: Fri, 16 Jan 2015 06:25:31 -0700 (MST) From: tisimst tisimst.lilyp...@gmail.com To: lilypond-user@gnu.org Subject: Re: small caps Message-ID: 1421414720.349...@smtp.gmail.com Content-Type: text/plain; charset=us-ascii Craig, \caps is just a short-hand command for \smallCaps, but this situation is obviously a code bug. You CAN put the \caps or \smallCaps in the header variable itself: piece = \markup \smallCaps Piece and then it works, but since it seems that you are trying to create a custom title that does this automatically, this solution may not be suitable for you. I'm forwarding this small example to the bugs-list for extermination: % \version 2.19.11 \paper { scoreTitleMarkup = \markup { \column { \on-the-fly \print-all-headers { \bookTitleMarkup \hspace #1 } \fill-line { \large \bold \smallCaps \fromproperty #'header:piece } } } } \header { title = Title piece = Piece % put the \smallCaps in here and it works } { \repeat unfold 3 { s1 \break } } %-- - Abraham On Fri, Jan 16, 2015 at 2:00 AM, Craig Dabelstein [via Lilypond] ml-node+s1069038n170544...@n5.nabble.com wrote: Hi Shane, \version 2.19.11 Even with \smallCaps (how did I miss that!?!!?) the test stays the same. Bold and Large are both working but not the small caps. Craig On Fri Jan 16 2015 at 4:39:22 PM Shane Brandes [hidden email] wrote: Which version are you using? and is it not \smallcaps that you need to issue? Also does the font actually have small caps natively? Shane On Fri, Jan 16, 2015 at 12:54 AM, Craig Dabelstein [hidden email] wrote: Hi List, Can anyone tell me why I can't get small caps working with this code? Many thanks, Craig scoreTitleMarkup = \markup { \column { \on-the-fly \print-all-headers { \bookTitleMarkup \hspace #1 } \fill-line { \large \bold \caps \fromproperty #'header:piece } } } } ___ lilypond-user mailing list [hidden email] https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list [hidden email] https://lists.gnu.org/mailman/listinfo/lilypond-user If you reply to this email, your message will be added to the discussion below: http://lilypond.1069038.n5.nabble.com/small-caps-tp170540p170544.html To start a new topic under User, email ml-node+s1069038n...@n5.nabble.com To unsubscribe from Lilypond, click here. NAML -- View this message in context: http://lilypond.1069038.n5.nabble.com/small-caps-tp170540p170552.html Sent from the User mailing list archive at Nabble.com. -- next part -- An HTML attachment was scrubbed... URL: http://lists.gnu.org/archive/html/lilypond-user/attachments/20 150116/0f65abad/attachment.html -- Message: 4 Date: Fri, 16 Jan 2015 14:28:52 +0100 From: Urs Liska u...@openlilylib.org To: lilypond-user@gnu.org Subject: Re: Understanding Lilypond Message-ID: 54b91214.40...@openlilylib.org Content-Type: text/plain; charset=windows-1252; format=flowed Am 16.01.2015 um 13:35 schrieb David Sumbler: As I start to gain experience in setting music in Lilypond I am trying to understand more about how it works internally. As well as personal satisfaction, this obviously has a practical aim: it will make it easier for me to modify or correct things without having to ask so many questions on this forum, and will also perhaps eventually mean that I can help by answering others' questions. However, despite having read the documentation - some of it several times - I do find understanding some aspects of the structure of Lilypond extremely difficult. One of the manuals likens a Lilypond file to source code in a computer language, but I find that understanding the structure of a coding language is perfectly straightforward compared to getting my head around Lilypond. (I have learnt several languages over the years, although not, I admit, Lisp or Scheme; however, I have no reason to suppose that understanding their structure is any more difficult than other languages). For instance, in Lilypond there is a sensible difference in the default handling of time- and key-signatures. Using the \key command a key is defined for the current Staff. But using the \time command sets the time signature for every staff. If a different time signature is required for a particular staff, then timeSignatureFraction
RE: Understanding Lilypond
Just let me repeat something I wrote a number of times here. If you manage to understand something with the help of this list that you think could be a not-so-uncommon issue for many please consider sharing your experience with a (little or big) tutorial, for which we have always free space on the Scores of Beauty blog. Urs First of all apologies for not cutting the bulk of the list posting on the previous message. Scores of beauty is admirable and if I had something to contribute I would - problem is having something worthy of posting there. I love Lilypond and use it weekly (maybe weakly)... ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Hi Peter, many of us have struggled for many months to get to grips with the structure and philosophy of Lilypond. 1. Regarding the structure, what are you struggling with exactly? 2. Regarding the philosophy, what are you struggling with exactly? Hope I can help! Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond
Dear David, as a small addition and a partly similar answer to Urs’, I think the point is: LilyPond tries to suggest (or even enforce as a default) conventions of classic music notation. This comprises for example that clefs are repeated for each line but the time signature isn’t. In your case, that means: The key signature can depend on the instrument and can be different for each staff. But in most cases, the time signature is the same within a score (across staves). You can have polyrhythmical music in LilyPond but it is not the default. So while this looks inconsistent from the purely programmatical point of view, it makes sense for most music. Cheers, Joram ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond language
Harald Christiansen haraldch...@gmail.com writes: Hello, Is there a manual for the lilypond language itself ? I don't get it ... is it a programming language ... a macro expander ... all of the above ? It is a dynamically typed language. Not much programming in the language itself, but a Scheme layer caters for that and provides all the types. The command line processes an input file, and certain things like top-level music or scores cause actions. I cannot build a mental model of how it works. For example, let's take variables. I take the notation reference, I look at the index and I see several entries. One entry specifies: 3.1.5 File structure [...] A variable, such as foo = { c4 d e d } So far so good. Another entry: 3.3.2 Different editions from one source [...] Using variables allLyrics = \lyricmode {King of glo -- ry } Is this just a macro substitution ? No. Neither is the above. Both place a sequential music structure into the respective variables. Use \void \displayMusic \allLyrics \void \displayMusic \foo to see what's in there. But then in one of my own I have to declare myLayout = \layout { bla bla bla } even if \myLayout is used inside of a \layout section Because \layout { ... } is not a music expression but rather an output definition. Different type. So it seems that there is more going on but what ? Are the variables typed ? (i.e. myLayout is of type \layout and I have to cast it or declare it ? I don't get it) There are no typed variables. Types are associated with expressions rather than variables: that's what using a dynamically typed language like Scheme is about. So there is no point in declaring a variable. Its type is determined by what you place in there. I understand that at some level underneath lilypond uses Scheme (Guile) but how specifically ? e.g. \set Staff.printPartCombineTexts = ##f The way I guess this is: '#f' is the false atom, the first # switches to Guile interpretation ... but beyond this all is completely foggy. Check out the red manual. URL:http://lilypond.org/doc/v2.19/Documentation/extending/scheme-in-lilypond -- David Kastrup ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond language
Hello David, Many thanks for your reply. :-) I was giving the variable example as a kind of difficulty I have. I appreciate the fish you are giving to me but I want to learn how to fish :-) For example you say Because \layout { ... } is not a music expression but rather an output definition. Different type. and then later on: There are no typed variables. In my mind these two do not work together ... for me there is some understanding missing. And yes I found the Lilypond Extending manual but that still doesn't explain properly the Lilypond language itself. Regards. On 04/06/2014 06:18 PM, David Kastrup wrote: Harald Christiansen haraldch...@gmail.com writes: Hello, Is there a manual for the lilypond language itself ? I don't get it ... is it a programming language ... a macro expander ... all of the above ? It is a dynamically typed language. Not much programming in the language itself, but a Scheme layer caters for that and provides all the types. The command line processes an input file, and certain things like top-level music or scores cause actions. I cannot build a mental model of how it works. For example, let's take variables. I take the notation reference, I look at the index and I see several entries. One entry specifies: 3.1.5 File structure [...] A variable, such as foo = { c4 d e d } So far so good. Another entry: 3.3.2 Different editions from one source [...] Using variables allLyrics = \lyricmode {King of glo -- ry } Is this just a macro substitution ? No. Neither is the above. Both place a sequential music structure into the respective variables. Use \void \displayMusic \allLyrics \void \displayMusic \foo to see what's in there. But then in one of my own I have to declare myLayout = \layout { bla bla bla } even if \myLayout is used inside of a \layout section Because \layout { ... } is not a music expression but rather an output definition. Different type. So it seems that there is more going on but what ? Are the variables typed ? (i.e. myLayout is of type \layout and I have to cast it or declare it ? I don't get it) There are no typed variables. Types are associated with expressions rather than variables: that's what using a dynamically typed language like Scheme is about. So there is no point in declaring a variable. Its type is determined by what you place in there. I understand that at some level underneath lilypond uses Scheme (Guile) but how specifically ? e.g. \set Staff.printPartCombineTexts = ##f The way I guess this is: '#f' is the false atom, the first # switches to Guile interpretation ... but beyond this all is completely foggy. Check out the red manual. URL:http://lilypond.org/doc/v2.19/Documentation/extending/scheme-in-lilypond -- Nihil verus. Omnia possibilia. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Understanding Lilypond language
Harald Christiansen wrote For example you say Because \layout { ... } is not a music expression but rather an output definition. Different type. and then later on: There are no typed variables. In my mind these two do not work together ... for me there is some understanding missing. There are different types of expressions (music expressions, output definition expressions, etc.), but not different types of variables. You don't have to declare/define a variable's type, they are dynamically typed. Put another way, output definitions like \layout {...} or \midi {...} are not the same thing as music expressions like { c4 d e f }. None of these are variables, they are expressions, but they can be assigned to a variable. You may find it easier to learn to fish by just doing some fishing, if you know what I mean? -Paul -- View this message in context: http://lilypond.1069038.n5.nabble.com/Understanding-Lilypond-language-tp161270p161321.html Sent from the User mailing list archive at Nabble.com. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user