X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fuser%2Fscheme-tutorial.itely;h=6d8f33e0f8f285083a8a0ac152fd2ee6d222931f;hb=137188587cce754dcda1495d75a7c99c206d50cb;hp=f44860df5657259f9736e539f6b53958e5f4c0cb;hpb=adda916a188dc4130a680bef78d2b094f59a424f;p=lilypond.git diff --git a/Documentation/user/scheme-tutorial.itely b/Documentation/user/scheme-tutorial.itely index f44860df56..6d8f33e0f8 100644 --- a/Documentation/user/scheme-tutorial.itely +++ b/Documentation/user/scheme-tutorial.itely @@ -1,4 +1,13 @@ +@c -*- coding: utf-8; mode: texinfo; -*- +@c This file is part of lilypond.tely +@ignore + Translation of GIT committish: FILL-IN-HEAD-COMMITTISH + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. +@end ignore + +@c \version "2.12.0" @node Scheme tutorial @appendix Scheme tutorial @@ -114,7 +123,7 @@ the number 24 is stored in the variable @code{twentyFour}. The same assignment can be done in completely in Scheme as well, @example -#(define twentyFour (* 2 twelve) +#(define twentyFour (* 2 twelve)) @end example The @emph{name} of a variable is also an expression, similar to a @@ -144,14 +153,14 @@ is put into the @code{thickness} variable of a @code{Stem} object. @code{thickness} is measured relative to the thickness of staff lines, so these stem lines will be @code{2.6} times the width of staff lines. This makes stems almost twice as thick as their -normal size. To distinguish between variables defined in input files (like +normal size. To distinguish between variables defined in input files (like @code{twentyFour} in the example above) and variables of internal -objects, we will call the latter ``properties'' and the former -``identifiers.'' So, the stem object has a @code{thickness} property, -while @code{twentyFour} is an identifier. +objects, we will call the latter @q{properties} and the former +@q{variables.} So, the stem object has a @code{thickness} property, +while @code{twentyFour} is an variable. -@cindex properties vs. identifiers -@cindex identifiers vs. properties +@cindex properties vs. variables +@cindex variables vs. properties Two-dimensional offsets (X and Y coordinates) as well as object sizes (intervals with a left and right point) are entered as @code{pairs}. A @@ -201,4 +210,79 @@ respectively, @end example +@menu +* Tweaking with Scheme:: +@end menu + +@node Tweaking with Scheme +@appendixsec Tweaking with Scheme + +We have seen how LilyPond output can be heavily modified using +commands like +@code{\override TextScript #'extra-offset = ( 1 . -1)}. But +we have even more power if we use Scheme. For a full explanation +of this, see the @ref{Scheme tutorial}, and +@ruser{Interfaces for programmers}. + +We can use Scheme to simply @code{\override} commands, + +TODO Find a simple example +@c This isn't a valid example with skylining +@c It works fine without padText -td + +@ignore +@lilypond[quote,verbatim,ragged-right] +padText = #(define-music-function (parser location padding) (number?) +#{ + \once \override TextScript #'padding = #$padding +#}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond +@end ignore + +We can use it to create new commands: + +@c Check this is a valid example with skylining +@c It is - 'padding still works + +@lilypond[quote,verbatim,ragged-right] +tempoMark = #(define-music-function (parser location padding marktext) + (number? string?) +#{ + \once \override Score . RehearsalMark #'padding = $padding + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup { \bold $marktext } +#}) + +\relative c'' { + c2 e + \tempoMark #3.0 #"Allegro" + g c +} +@end lilypond + +Even music expressions can be passed in: + +@lilypond[quote,verbatim,ragged-right] +pattern = #(define-music-function (parser location x y) (ly:music? ly:music?) +#{ + $x e8 a b $y b a e +#}) + +\relative c''{ + \pattern c8 c8\f + \pattern {d16 dis} { ais16-> b\p } +} +@end lilypond + + + +