@finalout
@node Top
-@top New features in 2.14 since 2.12
+@top New features in 2.16 since 2.14
@allowcodebreaks false
-@itemize @bullet
+@itemize
@ignore
@end ignore
-@item
-Lilypond now helps beams avoid collisions with other grobs! This feature
-works completely with manual beams. It also works for all automatic beams
-that do not end right before a change in staff. For this special case, please
-use manual beams.
-
-@item
-The Articulate script by Peter Chubb, which is GPLv3 licensed, is now
-a part of the distribution. It allows easy generation of improved
-MIDI files that perform non-legato by default, legato slurs, staccato,
-tempo markings, trills, etc.
-
-@example
-\include "articulate.ly"
-\articulate <<
- all the rest of the score...
->>
-@end example
-
-@item
-Single beat repeats for sixteenth or shorter notes and beat repeats for
-measures containing notes of varying durations are now supported.
-
-@lilypond[fragment,relative=2]
-\repeat percent 2 { c16 d }
-\repeat percent 2 { c32 e }
-\repeat percent 2 { c64 f }
-\repeat percent 2 { c128 g' }
-@end lilypond
-
-
-@item
-Lilypond now engraves woodwind fingering charts.
-
-@lilypond
-\relative c' {
- \textLengthOn
- des1^\markup {
- \woodwind-diagram #'bassoon #'((lh . (thumb-cis))
- (cc . (one two three five six))
- (rh . (f)))
- } _"bassoon"
- c1^\markup {
- \woodwind-diagram #'oboe #'((rh . (c))
- (lh . ())
- (cc . (one two three four five six)))
- } _"oboe"
-
-}
-@end lilypond
-
-@item
-MIDI output has been improved
-@itemize @bullet
-@item the option @code{\set Score.midiChannelMapping = #'voice} puts each voice on its own midi MIDI channel
-@item the option @code{\set Score.midiChannelMapping = #'instrument} puts identical instruments on the same MIDI channel. This means that e.g. for a full orchestral score there are always 16 (15 plus percussion) differently sounding instruments available, unrestricted by the number of staves or voices. (Some MIDI players will cut off notes, however, if two voices play the same pitch simultaneously on the same channel.) This option also stores each voice in a separate track in the MIDI file.
-@item the default, @code{\set Score.midiChannelMapping = #'staff}, assigns one MIDI channel per staff. This setting allows instrument changes (implemented as MIDI program changes) to re-use single MIDI channel.
-@item dynamics are now rendered as note velocities, no longer as midi volume. This improves the sound on [high end] midi renderers.
-@end itemize
-
-@item
-MIDI-import through Midi2ly is improved
-@itemize @bullet
-@item Midi2ly now also works on Windows systems
-@item MIDI-files with more than 32 tracks are now handled
-@item notes on certain simultaneous voices no longer ignored
-@item notes overrunning a bar line are no longer truncated
-@item initial key signature and time signature are respected
-@item a problem with octaves in subsequent tracks/voices is fixed
-@item initial support for multiple voices notated on one staff
-@item the instrumentName is set from track data
-@item new --skip option, rests are displayed by default
-@item rests overrunning a bar line are not truncated
-@item new --include-header option for setting titles
-@item new --preview option for big MIDI-files
-@end itemize
-The first feature was sponsored by Valentin Villenave,
-the other features were sponsored by Image-Line Software for FL Studio.
-
-@item
-A new @code{Completion_rest_engraver} is available for automatically
-converting long rests which overrun bar lines, matching the
-@code{Completion_heads_engraver} for notes
-@example
-\layout @{
- \context @{
- \Voice
- \remove "Note_heads_engraver"
- \consists "Completion_heads_engraver"
- \remove "Rest_engraver"
- \consists "Completion_rest_engraver"
- @}
-@}
-@end example
-This feature was sponsored by Image-Line Software for FL Studio.
-
-@item
-Dots can be added to the table of contents items using:
-@example
-\paper @{
- tocItemMarkup = \tocItemWithDotsMarkup
-@}
-@end example
-
-@item
-New markup commands @code{\pattern} and @code{\fill-with-pattern} are available.
-@lilypond
-\markup \column {
- \pattern #3 #Y #0.3 \flat
- \null
- \pattern #7 #X #2 \flat
- \override #'(line-width . 40) \fill-with-pattern #1 #CENTER . left right
-}
-@end lilypond
-
-@item
-A minimal composer toolkit of modal transformations is provided.
-A motif may be @notation{transposed}, @notation{inverted} and/or
-converted to its @notation{retrograde} within any scale.
-
-@lilypond
-pentatonicScale = \relative a' { a c d f g }
-motif = \relative c'' { d8 c f,4 <a f'> <a f'> }
-
-\new Staff <<
- {
- \partial 4
- \pentatonicScale
- \motif
- \modalTranspose c a, \pentatonicScale \motif
- \modalInversion d'' a' \pentatonicScale \motif
- \retrograde \motif
- }
- {
- \partial 4
- s4^"pentatonic scale"
- s1
- s1^"motif"
- s1^"transposition"
- s1^"inversion"
- s1^"retrograde"
- }
->>
-@end lilypond
-
-@item
-Added minimal support for black mensural notation.
-
-@item
-Enhanced support for obliqua shapes within white mensural ligatures.
-
-@lilypond
-\context MensuralStaff
-{
- \clef "petrucci-c3"
- \[
- \override NoteHead #'style = #'semipetrucci
- c'\maxima
- \override NoteHead #'style = #'blackpetrucci
- a\breve
- \revert NoteHead #'style
- \override NoteHead #'ligature-flexa = ##t
- \override NoteHead #'flexa-width = #3
- g
- g'
- \override NoteHead #'flexa-width = #5
- c'
- d'
- \revert NoteHead #'style
- c'\longa
- \]
-}
-@end lilypond
-
-@item
-New markup functions @code{\with-link} and @code{\page-link} that add
-hyperlinks to a given label or a given page number. This works in the PDF
-backend only. All entries to the table of contents now automatically add
-hyperlinks to the pages they are referring to.
-
-@item
-Compound time signatures are now supported by the @code{\compoundMeter} command,
-which can be used instead of @code{\time}:
-
-@lilypond
-\relative c'' {
- \compoundMeter #'(3 1 8)
- c8 c c c
- \compoundMeter #'((2 8) (5 8))
- c8 c c c c c c
- \compoundMeter #'((1 2 3 8) (1 4) (3 8))
- c8 c c c c c c4 c8 c c
-}
-@end lilypond
-
-@item
-Lyrics above a staff must have their @code{staff-affinity} set to
-@code{DOWN} or must have their @code{alignAboveContext} property
-set in order to be properly aligned. For more information, see
-@ruser{Placing lyrics vertically}.
-
-@item
-@code{stringTunings} property values have changed from a list of
-semitones above middle C to a list of LilyPond pitch values.
-convert-ly will handle the change automatically where the value
-of @code{stringTunings} is set to a Scheme constant value.
-
-New commands @code{makeStringTuning} and @code{contextStringTuning}
-allow the creation of string tunings in the form of a Lilypond
-chord construct.
-
-@item
-By using @code{\cueDuringWithClef}, cue notes can now also have their own
-clef, which is correctly reset at the end of the cue notes. At the begin
-of each line, the standard clef is still displayed, but the cue clef is
-shown after the time/key signature in smaller size.
-
-@lilypond
-vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
-\addQuote vIQuote { \vI }
-
-Solo = \relative c {
- \clef "bass"
- \cueDuringWithClef #"vIQuote" #DOWN #"treble" { R1 } |
- c4 \cueDuringWithClef #"vIQuote" #DOWN #"treble" {
- r4 r2 |
- r4
- } c4 c2 |
- \cueDuringWithClef #"vIQuote" #DOWN "soprano" { R1*2 \break R1 } |
- c1
-}
-
-\score {
- <<
- \new Staff \new Voice \Solo
- >>
-}
-@end lilypond
-
-
-@item
-Note names can be selected with a new
-@code{@bs{}language "italiano"} command, which
-can be used in safe mode. The old
-@code{@bs{}include "italiano.ly"} syntax is
-still supported for now, but will be deprecated
-in the future.
-
-@item
-autobeaming is now disabled by @code{\cadenzaOn} and enabled by
-@code{\cadenzaOff}. Beaming in cadenzas should be indicated manually.
-Also, if a cadenza is used in a piece with autobeaming disabled, it
-will need to be disabled again after the cadenza.
-
-@item
-The user is now able to specify the name of the predefined fretboard
-table. This allows the use of multiple tables, with switching between them
-based on user input.
-
-@item
-The part-combiner's decision to combine/not combine notes can now be customized
-
-@lilypond[quote,relative=2]
-\partcombine
-\relative c' { c2 \partcombineApart c | \partcombineChordsOnce e' e }
-\relative c' { c2 \partcombineApart c | c c }
-@end lilypond
-
-@item
-Tablature staves show fret numbers only by default. To get the
-former style, @code{\tabFullNotation} is provided.
-
-@item
-Funk-style and Walker-style shape notes have been added.
-
-@item
-Rests will no longer keep a staff alive if @code{\RemoveEmptyStaffContext}
-is used.
-
-@item
-New option @code{-dinclude-settings=INCLUDEFILE.ly}, which causes lilypond
-to include the given file before the score is processed. This allows the
-user to change global settings without the need to change the score itself.
-That way, several different editions/version (e.g. different page sizes)
-can be generated from a file without having to modify the score for each
-version.
-
-@item
-The autobeaming settings syntax has been changed. beatLength,
-beatGrouping, beamSettings, and measureGrouping have all been eliminated.
-Autobeaming is now controlled by baseMoment, beatStructure, and
-beamExceptions. Default settings for each of these properties can be
-stored for any time signature in time-signature-settings, so that
-when the time signature is changed, the autobeaming will automatically
-change. The new syntax should be much easier and require fewer
-overrides.
-@item
-The SVG backend has optional support for
-@uref{http://www.w3.org/Submission/WOFF, WOFF fonts}. Using the Scheme
-option @code{-d svg-woff} together with the SVG backend selection
-@code{-d backend=svg}, produces SVG output with CSS WOFF font selection.
-
-@item
-The LilyPond G clef has been rotated 1.5 degrees clockwise for improved
-balance. The old and new versions can be compared by looking at the
-documentation:
-@uref{http://lilypond.org/doc/v2.12/Documentation/user/lilypond/The-Feta-font.html#Clef-glyphs,
-old version},
-@uref{http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#Clef-glyphs,
-new version}.
-
-
-@item
-Text crescendo spanners can now be added directly using @code{\cresc},
-@code{\dim} and @code{\decresc}.
-@lilypond[quote,relative=2]
-c4\cresc c c c\f |
-c4\dim c c c\!
-@end lilypond
-
-
-@item
-The documented syntax of @samp{lilypond} environments in the @LaTeX{}
-mode of @command{lilypond-book} has been changed to conform with
-standard @LaTeX{} syntax: options now come after the environment name:
-@example
-\begin@{lilypond@}[@var{options}] @dots{}
-@end example
-
-The previous syntax with options after @samp{\begin} is still accepted
-by @command{lilypond-book} but deprecated. Something like
-@example
-sed -i '/begin\[/s/begin\(\[[^]]*]\)\(@{lilypond@}\)/begin\2\1/'
-@end example
-
-might do the trick for conversion.
-
-@item
-Aesthetics of shape note heads have been enhanced. Variable line thicknesses
-have been implemented. All note widths have been made consistent.
-Minor shape note commands that use the relative major key for scale steps
-have been added.
-
-@item
-A variant of the Segno sign is provided:
-@lilypond[quote,relative=2]
-c4 d e f \bar "S"
-g4 f e d
-@end lilypond
-
-@item
-Context modifications (@code{\with} blocks) can be stored in variables and
-inserted into contexts or other @code{\with} blocks:
-@lilypond[quote,verbatim]
-coloredheads = \with { \override NoteHead #'color = #red }
-noclef = \with { \remove "Clef_engraver" }
-\score {
- \new Staff {
- \new Voice \with { \coloredheads } \relative c' { c4 e g c }
- }
- \layout {
- \context {
- \Staff
- \noclef
- }
- }
-}
-@end lilypond
-
-@item
-A half-open articulation was added:
-@lilypond[quote,relative=2]
-c4\halfopen
-@end lilypond
-This is sometimes used to indicate half-open hi-hats.
-
-@item
-The Unicode Bidirectional Algorithm is now fully supported for
-single-line markup due to enhanced integration with Pango.
-
-@item
-LilyPond is now licensed under the GNU GPL v3+.
-
-@item
-In tablature, frets can be indicated with labels other than numbers:
-
-@lilypond[verbatim,quote,relative=1]
-\new TabStaff
-\with {
- stringTunings = #`(,(ly:make-pitch 1 3 NATURAL)
- ,(ly:make-pitch 1 1 NATURAL)
- ,(ly:make-pitch 0 5 NATURAL)
- ,(ly:make-pitch 0 3 NATURAL)
- ,(ly:make-pitch 0 1 NATURAL)
- ,(ly:make-pitch -1 5 NATURAL))
- tablatureFormat = #fret-letter-tablature-format
-}
-\new TabVoice {
- \set fretLabels = #`(,(markup #:with-color red "a")
- "b"
- ,(markup #:italic #:smaller "c"))
- <f d>4. <bes>8 <g e>4
-}
-@end lilypond
-
-@item
-Layout objects can be printed over a white background, which whites-out objects
-in lower layers which lie beneath:
-
-@lilypond[verbatim,quote,relative=1]
-\time 3/4
-\override Staff.StaffSymbol #'layer = #4
-\once \override Tie #'layer = #2
-b'2.~
-\once \override Staff.TimeSignature #'whiteout = ##t
-\once \override Staff.TimeSignature #'layer = #3
-\time 5/4
-b4
-@end lilypond
-
-@item
-Chords can be repeated using the @code{q} shortcut:
-
-@lilypond[verbatim,quote,relative=2]
-<c e g>8.-^ q16 q4-^
-@end lilypond
-
-@item
-With two-sided mode, margins for odd and even pages can be set using
-@code{inner-margin} and @code{outer-margin}:
-
-@example
-\paper @{
- two-sided = ##t
- inner-margin = 10 \mm
- outer-margin = 20 \mm
-@}
-@end example
-
-@item
-Paper margin defaults, as specified in @file{ly/paper@/-defaults-init.ly}, apply
-to the default paper size (a4) and are automatically scaled according to the
-paper size chosen.
-
-@item
-All combinations of @code{left-margin}, @code{right-margin} and
-@code{line-width} work now. There is no more need to set @code{line-width}
-manually unless you explicitly want to.
-
-@item
-Support for using an alternative music font, such as Gonville, is now
-added.
-
-@item
-In addition to the existing @code{\hspace} markup command,
-a new @code{\vspace} command has been added to provide an easy
-and flexible way to add vertical space in markups.
-
-@item
-The direction of manual beams can be set with @code{^[} and @code{_[}.
-
-@item
-A version of the breve note head has been added with two vertical lines on each side.
-@lilypond[quote,relative=2]
-\time 4/2
-\override Staff.NoteHead #'style = #'altdefault
-c\breve | b\breve
-@end lilypond
-
-@item
-Instrument names and vocal names now take into account the extent of
-system start delimiters in other staves for their positioning,
-resulting in improved default alignment for left-, center- and
-right-aligned names.
-@lilypond[quote,indent=18\mm]
-<<
- \new StaffGroup <<
- \new GrandStaff <<
- \new Staff {
- \set Staff.instrumentName = #"Piccolo"
- c''1
- }
- \new Staff {
- \set Staff.instrumentName = #"Flute"
- c''1
- }
- >>
- \new Staff {
- \set Staff.instrumentName = #"Bassoon"
- \clef tenor
- c'1
- }
- >>
- \new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano"
- \context Staff = "up" {
- c'1
- }
- \context Staff = "down" {
- \clef bass
- c1
- }
- >>
->>
-@end lilypond
-
-@item
-Braces in markup can now be selected by point size using the markup commands
-@code{\left-brace} and @code{\right-brace}.
-@lilypond[quote]
-\markup {
- \left-brace #35
- \hspace #2
- \right-brace #45
-}
-@end lilypond
@item
-Intermediate .ps files which are created by LilyPond
-during compilation are now deleted by default. To keep them,
-add the following line to your input files:
-@example
-#(ly:set-option 'delete-intermediate-files #f)
-@end example
-
-@item
-Dashed and dotted slurs, phrasing slurs, and ties
-have been made variable thickness, and
-partially dashed slurs are now available:
-@lilypond[quote,relative=2]
-\slurDashed
-c4( d e f) |
-\slurDotted
-g4( f e d) |
-\slurHalfDashed
-c4( d e f)
-@end lilypond
-
-@item
-An eyeglasses markup was added, indicating strongly to look at the
-conductor for instructions:
-@lilypond[quote,relative=2]
-\mark \markup { \eyeglasses }
-c4_\markup { \eyeglasses }
-@end lilypond
-
-@item
-A snap-pizzicato (also known as Bartok-pizzicato) articulation was added:
-@lilypond[quote,relative=2]
-c4\snappizzicato
-@end lilypond
-
-@item
-Tuplet number formatting functions are now available to print other fractions
-and to add notes to the number or fraction:
-@lilypond[quote,relative=2]
-\once \override TupletNumber #'text =
- #(tuplet-number::non-default-tuplet-denominator-text 7)
-\times 2/3 { c4. c4. c4. c4. }
-
-\once \override TupletNumber #'text =
- #(tuplet-number::non-default-tuplet-fraction-text 12 7)
-\times 2/3 { c4. c4. c4. c4. }
-\once \override TupletNumber #'text =
- #(tuplet-number::append-note-wrapper
- (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
-\times 2/3 { c4. c4. c4. c4. }
-
-\once \override TupletNumber #'text =
- #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
-\times 2/3 { c8 c8 c8 c8 c8 c8 }
-\once \override TupletNumber #'text =
- #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
-\times 2/3 { c8 c8 c8 c8 c8 c8 }
-
-\once \override TupletNumber #'text =
- #(tuplet-number::fraction-with-notes "4." "8")
-\times 2/3 { c4. c4. c4. c4. }
-\once \override TupletNumber #'text =
- #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
-\times 2/3 { c4. c4. c4. c4. }
-@end lilypond
-
-@item
-FretBoards now have a chordChanges property to keep repeated FretBoard objects
-from being typeset.
-
-@item
-The vertical spacing engine has been drastically changed, making
-it more flexible and easier to control.
-The spacing between staves within a system can now change
-to better use the space on the page.
-User-defined contexts may participate in this flexible spacing,
-depending on how their @code{staff-affinity} is defined.
-Some page formatting variables (@code{page-top-space},
-@code{between-system-space -padding}, and
-@code{before- between- after-title-space}) have been replaced
-by flexible vertical dimensions.
+Glissandi can now span multiple lines.
@end itemize
-
-
@ifhtml
For older news, go to
+@uref{http://lilypond.org/doc/v2.14/Documentation/topdocs/NEWS.html},
@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
-@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html},
or @uref{../,go back} to the Documentation index.
@macro imageClickable{IMAGE-FILE, EXT, MORE-TEXT, CLICK-FILE, CLICK-EXT, POSITION}
@html
<div class="float-\POSITION\">
- <a class="clickable" href="../pictures/\CLICK-FILE\.\CLICK-EXT\">
- <img src="../pictures/\IMAGE-FILE\.\EXT\" alt="\IMAGE-FILE\">
+ <a class="clickable" href="pictures/\CLICK-FILE\.\CLICK-EXT\">
+ <img src="pictures/\IMAGE-FILE\.\EXT\" alt="\IMAGE-FILE\">
</a>
<p style="text-align: center">
\MORE-TEXT\
@macro imageFloat{IMAGE-FILE, EXT, POSITION}
@html
-<img class="float-\POSITION\" src="../pictures/\IMAGE-FILE\.\EXT\" alt="\IMAGE-FILE\">
+<img class="float-\POSITION\" src="pictures/\IMAGE-FILE\.\EXT\" alt="\IMAGE-FILE\">
@end html
@iftex
@image{pictures/\IMAGE-FILE\,,,\IMAGE-FILE\,\EXT\}
@macro imageId{ID, IMAGE-FILE, EXT, ALT}
@html
<div id="\ID\">
- <img src="../pictures/\IMAGE-FILE\.\EXT\" alt="\ALT\">
+ <img src="pictures/\IMAGE-FILE\.\EXT\" alt="\ALT\">
</div>
@end html
@iftex
* Programming work::
* Release work::
* Build system notes::
+* Modifying the feta font::
* Administrative policies::
Appendices
@include contributor/programming-work.itexi
@include contributor/release-work.itexi
@include contributor/build-notes.itexi
+@include contributor/feta-font.itexi
@include contributor/administration.itexi
@include fdl.itexi
* Motivation::
* Ongoing jobs::
* Policy decisions::
+* Policy decisions (finished)::
@end menu
@node Motivation
@subsection Policy decisions
There are a number of policy decisions -- some of them fairly
-important -- which we have been postponing for a few years. When
-GOP begins, we will start discussing them.
+important -- which we have been postponing for a few years. We
+are now discussing them slowly and thoroughly; agenda and exact
+proposals are online:
-@warning{The fact that we are not arguing about them right now is
-not, I repeat @strong{not}, an indication that we do not feel that
-these issues are not important. It is simply that if we began
-talking about them now, it would postpone the 2.14 release for a
-few months.}
+@example
+@uref{http://lilypond.org/~graham/gop/index.html}
+@end example
+
+Below is a list of policies which are not @qq{on the agenda} yet.
Note that the presence of an item on this list does @emph{not}
mean that everybody thinks that something needs to be done.
developer thinks we should discuss something, just add it to the
bottom of the list. (the list is unsorted)
-Once GOP starts, the list will be sorted into a rough agenda. We
-will probably introduce one topic each week -- yes, it will
-therefore take months to get through everything, but we must
-balance productive work vs. policy administration. If we find
-that we settle questions faster (or slower) than predicted, we
-will of course change the speed of new topic introductions.
+As GOP progresses, items from this list will be put on the agenda
+and removed from this list. I generally try to have one month's
+discussion planned in advance, but I may shuffle things around to
+respond to any immediate problems in the developer community.
There are some item(s) not displayed here; these are questions
that were posed to me privately, and I do not feel justified in
(prep: 2 hours. discuss: 10 hours)
-@item @strong{Lessons from the 2.14 release; future release policy}:
-What went well; what went badly? (how) should we change any
-policies pertaining to releases? Should an undocumented new
-feature count as release-blocking?
+@item @strong{Future release policy}:
+(how) should we change any policies pertaining to releases? Should
+an undocumented new feature count as release-blocking?
(prep: 1 hour. discuss: 15 hours)
@item @strong{Hackers B}:
-@item @strong{Code style}:
-New contributors sometimes struggle to follow our indentation and
-code style -- this is especially difficult when parts of our
-existing source code doesn't have a consistent style. This is
-problematic... we want new contributors to be struggling with the
-lilypond architecture, not playing games in their text editors!
-(ok, we don't actually want them to be struggling with lilypond
-internals... but given the current state of the CG, it's
-understandable, and at any rate it's still better than struggling
-with code style)
-Speaking academically, C++ code style is a "solved problem". Let's
-pick one of the existing solutions (probably either astyle,
-uncrustify, or emacs), and let a computer deal with this.
-
-(prep: 5 hours. discuss: 15 hours)
-
@item @strong{Git repository(s)}:
We currently have a web/ branch in our main repo; this seems
misleading to new developers. More generally, should we have
(prep: 2 hours. discuss: 10 hours)
-@item @strong{Precise definition of Critical issues}:
-at the moment, a stable release is entirely dependent on the
-number of Critical issues, but there's some questions about
-precisely what a "Critical issue" should be. We should clarify
-this, in conjunction with a general discussion about how often we
-want to have stable releases, how permissive we want to be about
-patches, etc etc.
-
-(prep: 1 hour. discuss: 5 hours)
-
@item @strong{When do we add regtests?}:
There is a discrepancy between our stated policy on adding
regtests, and our actual practice in handling bugs and patches.
(prep: 5 hours. discuss: 15 hours)
+@item @strong{always make an issue number for patches}:
+there is a proposal that we should always have a google code issue
+number for every patch. This proposal is closely tied to our
+choice of patch review tool; if we switch to a different tool (as
+suggested in a different proposal), this proposal may become moot.
+
+(prep: 1 hour. discuss: 5 hours)
+
+@item @strong{initalizer lists}:
+shoudl we use initalizer lists for C++? AFAIK they make no
+difference for built-in types, but there's some weird case where
+it's more efficient for objects, or something.
+
+Probably not worth making this a weekly thing on its own, but we
+can probably wrap it up with some other code-related questions.
+
+(prep: 15 minutes. discuss: 3 hours)
+
@end itemize
+@node Policy decisions (finished)
+@subsection Policy decisions (finished)
+
+@subheading GOP-PROP 1: python formatting
+
+We will follow the indentation described in PEP-8.
+@uref{http://www.python.org/dev/peps/pep-0008/}
+
+@itemize
+@item
+use 4 spaces per indentation level
+
+@item
+never mix tabs and spaces (for indentation)
+
+@item
+Code indented with a mixture of tabs and spaces should be
+converted to using spaces exclusively
+
+Once this is done, we should add @code{python -tt} to the build
+system to avoid such errors in the future.
+
+@end itemize
+
+There should be absolutely no tab characters for indentation in
+any @code{.py} file in lilypond git. All such files should be
+converted to use spaces only.
+
+
+@subheading GOP-PROP 2: mentors and frogs
+
+Nothing much was decided. The list of responsibilities was
+slightly altered; see the new one in @ref{Mentors}. We should
+encourage more use of the Frogs mailing list. There's a list of
+contributor-mentor pairs in:
+
+@smallexample
+@uref{https://github.com/gperciva/lilypond-extra/blob/master/people/mentors.txt}
+@end smallexample
+
+That's pretty much it.
@node Grand LilyPond Input Syntax Standardization (GLISS)
@end verbatim
? patch here:
+@smallexample
@uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-04/msg00467.html}
+@end smallexample
@item
Personally, I find it easier to understand when there's a repeated
@item
Discussion on
-http://code.google.com/p/lilypond/issues/detail?id=1322
+@uref{http://code.google.com/p/lilypond/issues/detail?id=1322}
about \new vs. \context.
@item
Let users add their own items to the parser? comment 11 on:
-http://code.google.com/p/lilypond/issues/detail?id=1322
+@uref{http://code.google.com/p/lilypond/issues/detail?id=1322}
@item
should engravers be pluralized (note_heads_engraver) or not
@item
should we allow numbers in identifier names? Issue:
-http://code.google.com/p/lilypond/issues/detail?id=1670
+@uref{http://code.google.com/p/lilypond/issues/detail?id=1670}
@item
should we officially allow accented characters? in general, how
\transpose c d e1
@end verbatim
+@item
+What should be the officially encouraged way of writing music for
+transposing instruments? Maybe it should be simplified?
+See http://lists.gnu.org/archive/html/lilypond-user/2011-07/msg00130.html
+
@end itemize
We return to @file{stepmake.make}, where we hit the make rule all:
The first line of this is:
-@example
+@smallexample
-include $(addprefix $(depth)/make/,$(addsuffix -inclusions.make, $(LOCALSTEPMAKE_TEMPLATES)))
-@end example
+@end smallexample
which, when the variables are substituted, gives:
And the first file doesn't exist. Nor the second. Next:
-@example
+@smallexample
-include $(addprefix $(stepdir)/,$(addsuffix -inclusions.make, $(STEPMAKE_TEMPLATES)))
-@end example
+@end smallexample
which expands to the following files:
Next in @file{stepmake.make}:
-@example
+@smallexample
include $(addprefix $(stepdir)/,$(addsuffix -vars.make, $(STEPMAKE_TEMPLATES)))
-@end example
+@end smallexample
which expands to:
The next lines are
:
-@example
+@smallexample
# ugh. need to do this because of PATH :=$(top-src-dir)/..:$(PATH)
include $(addprefix $(depth)/make/,$(addsuffix -vars.make, $(LOCALSTEPMAKE_TEMPLATES)))
-@end example
+@end smallexample
and the include expands to:
The final 4 lines of @file{stepmake.make} are:
-@example
+@smallexample
include $(addprefix $(depth)/make/,$(addsuffix -rules.make, $(LOCALSTEPMAKE_TEMPLATES)))
include $(addprefix $(stepdir)/,$(addsuffix -rules.make, $(STEPMAKE_TEMPLATES)))
include $(addprefix $(depth)/make/,$(addsuffix -targets.make, $(LOCALSTEPMAKE_TEMPLATES)))
include $(addprefix $(stepdir)/,$(addsuffix -targets.make, $(STEPMAKE_TEMPLATES)))
-@end example
+@end smallexample
which expand as follows:
following lines actually cause the make to run (putting an error
call above them - no make; below them - make):
-@example
+@smallexample
ifeq ($(out),www)
# All web targets, except info image symlinks and info docs are
# installed in non-recursing target from TOP-SRC-DIR
-$(INSTALL) -m 755 -d $(DESTDIR)$(webdir)
rsync -rl --exclude='*.signature' $(outdir)/offline-root $(DESTDIR)$(webdir)
$(MAKE) -C Documentation omf-local-install
-@end example
+@end smallexample
I don't currently understand the @code{ifeq}, since @code{$(out)}
is empty at this point, but the line starting @code{-$(INSTALL)}
translates to:
@example
--/usr/bin/python /home/phil/lilypond-git/stepmake/bin/install.py -c -m 755 -d /usr/local/share/doc/lilypond/html
+-/usr/bin/python /home/phil/lilypond-git/stepmake/bin/install.py \
+ -c -m 755 -d /usr/local/share/doc/lilypond/html
@end example
End of work for Sunday 27th.
stepmake/stepmake/generic-vars.make has this:
-@example
+@smallexample
LOOP=+$(foreach i, $(SUBDIRS), $(MAKE) PACKAGE=$(PACKAGE) package=$(package) -C $(i) $@ &&) true
-@end example
+@end smallexample
$@ is the name of the target - WWW-1 in this case.
There appear to be about 74 of them. After all the makefile
checking, we get this:
-@example
+@smallexample
Updating goal targets....
Considering target file `WWW-1'.
- File `WWW-1' does not exist.
- Considering target file `local-WWW-1'.
- File `local-WWW-1' does not exist.
- Considering target file `out-www/collated-files.texi'.
- File `out-www/collated-files.texi' does not exist.
- Looking for an implicit rule for `out-www/collated-files.texi'.
- Trying pattern rule with stem `collated-files.texi'.
- Trying implicit prerequisite `collated-files.texi.in'.
- Trying pattern rule with stem `collated-files.texi'.
- Trying implicit prerequisite `collated-files.texi.in'.
- Trying pattern rule with stem `collated-files'.
- Trying implicit prerequisite `collated-files.tely'.
- Trying pattern rule with stem `collated-files'.
- Trying implicit prerequisite `out-www/collated-files.tely'.
- Trying rule prerequisite `out-www/version.itexi'.
- Found prerequisite `out-www/version.itexi' as VPATH `/home/phil/lilypond-git/input/regression/out-www/version.itexi'
-@end example
+File `WWW-1' does not exist.
+Considering target file `local-WWW-1'.
+File `local-WWW-1' does not exist.
+Considering target file `out-www/collated-files.texi'.
+File `out-www/collated-files.texi' does not exist.
+Looking for an implicit rule for `out-www/collated-files.texi'.
+Trying pattern rule with stem `collated-files.texi'.
+Trying implicit prerequisite `collated-files.texi.in'.
+Trying pattern rule with stem `collated-files.texi'.
+Trying implicit prerequisite `collated-files.texi.in'.
+Trying pattern rule with stem `collated-files'.
+Trying implicit prerequisite `collated-files.tely'.
+Trying pattern rule with stem `collated-files'.
+Trying implicit prerequisite `out-www/collated-files.tely'.
+Trying rule prerequisite `out-www/version.itexi'.
+Found prerequisite `out-www/version.itexi' as VPATH `/home/phil/lilypond-git/input/regression/out-www/version.itexi'
+@end smallexample
grep finds this if searching for local-WWW-1:
which I'll work out at some point, and also this rule:
-@example
+@smallexample
$(outdir)/%.texi: $(outdir)/%.tely $(outdir)/version.itexi $(DOCUMENTATION_LOCALE_TARGET) $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
- LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_INCLUDES) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
-@end example
+ LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_INCLUDES) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
+@end smallexample
Note that the recipe is a very long line - it could probably
benefit from splitting. The same makefile also has:
-@example
+@smallexample
$(outdir)/%.texi: $(outdir)/%.tely $(outdir)/version.itexi $(DOCUMENTATION_LOCALE_TARGET) $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
- LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_INCLUDES) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
-@end example
+ LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_INCLUDES) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
+@end smallexample
@noindent
which seems to be an almost exact duplicate. Whatever, the first
The first recipe translates as this:
@example
-LILYPOND_VERSION=2.15.0 /usr/bin/python --process=' ' --output=./out-www --format= --lily-output-dir /home/phil/lilypond-git/build/out/lybook-db
+LILYPOND_VERSION=2.15.0 /usr/bin/python --process=' ' \
+ --output=./out-www --format= --lily-output-dir \
+ /home/phil/lilypond-git/build/out/lybook-db
@end example
@noindent
@example
DOCUMENTATION_LOCALE_TARGET is blank
-INIT_LY_SOURCES = /home/phil/lilypond-git/scm/auto-beam.scm /home/phil/lilypond-git/scm/autochange.scm
+INIT_LY_SOURCES = /home/phil/lilypond-git/scm/auto-beam.scm \
+ /home/phil/lilypond-git/scm/autochange.scm
@end example
plus 10s (100s?) of other .scm files.
@example
-SCHEME_SOURCES = /home/phil/lilypond-git/ly/Welcome-to-LilyPond-MacOS.ly /home/phil/lilypond-git/ly/Welcome_to_LilyPond.ly
+SCHEME_SOURCES = /home/phil/lilypond-git/ly/Welcome-to-LilyPond-MacOS.ly \
+ /home/phil/lilypond-git/ly/Welcome_to_LilyPond.ly
@end example
ditto .ly files. This does seem a teency bit wrong - it looks like
@file{lysdoc-rules.make} has this:
-@example
+@smallexample
$(outdir)/collated-files.tely: $(COLLATED_FILES)
- $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" --author="$(AUTHOR)" $^
-@end example
+ $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" --author="$(AUTHOR)" $^
+@end smallexample
@file{lysdoc-vars.make} has:
checks this. There's a rule in @file{doc-i18n-root-rules.make} that this
depends on @file{git/VERSION}:
-@example
+@smallexample
$(outdir)/version.%: $(top-src-dir)/VERSION
- $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@
-@end example
+ $(PYTHON) $(top-src-dir)/scripts/build/create-version-itexi.py > $@
+@end smallexample
This causes create-version-itexi.py to run and create
version.itexi.
This contains *lots* of option and configuration stuff, and also
includes the line:
-@example
+@smallexample
print STDERR "Initializing settings for web site: [$Texi2HTML::THISDOC@{current_lang@}]\n";
-@end example
+@end smallexample
This is where one of the console messages is generated.
@example
-1- Web site
585 web.texi
-4506 web/introduction.itexi
-1183 web/download.itexi
+4564 web/introduction.itexi
+1195 web/download.itexi
1139 macros.itexi
9 po/lilypond-doc.pot (translate to po/@var{MY_LANGUAGE}.po)
0 search-box.ihtml
--- lilypond-texi2html.init (section TRANSLATIONS)
-7422 total
+7492 total
-2- Tutorial
-1200 web/manuals.itexi
+1203 web/manuals.itexi
124 learning.tely
2535 learning/tutorial.itely
4184 learning/common-notation.itely
-8043 total
+8046 total
-3- Fundamental Concepts, starting of Usage and Community
11139 learning/fundamental.itely -- Fundamental concepts
17840 total
-4- Rest of Learning manual and Suggestions on writing LilyPond files
-15408 learning/tweaks.itely -- Tweaking output
+15393 learning/tweaks.itely -- Tweaking output
225 learning/templates.itely -- Templates
2694 usage/suggestions.itely -- Suggestions on writing LilyPond files
-18327 total
+18312 total
-5- Notation reference
355 notation.tely
91 notation/notation.itely -- Musical notation
-4479 notation/pitches.itely
+4502 notation/pitches.itely
6048 notation/rhythms.itely
1726 notation/expressive.itely
-930 notation/repeats.itely
-2163 notation/simultaneous.itely
-2056 notation/staff.itely
+945 notation/repeats.itely
+2216 notation/simultaneous.itely
+2345 notation/staff.itely
931 notation/editorial.itely
2716 notation/text.itely
81 notation/specialist.itely -- Specialist notation
66 notation/strings.itely
242 notation/bagpipes.itely
4752 notation/ancient.itely
-7069 notation/input.itely -- Input syntax
+7671 notation/input.itely -- Input syntax
2164 notation/non-music.itely -- Non-musical notation
-11017 notation/spacing.itely -- Spacing issues
+11087 notation/spacing.itely -- Spacing issues
12248 notation/changing-defaults.itely -- Changing defaults
5187 notation/programming-interface.itely -- Interfaces for programmers
1989 notation/notation-appendices.itely -- Notation manual tables
252 notation/cheatsheet.itely -- Cheat sheet
-75558 total
+76610 total
-6- Rest of Application Usage
-3764 usage/lilypond-book.itely -- LilyPond-book
+3952 usage/lilypond-book.itely -- LilyPond-book
1122 usage/converters.itely -- Converting from other formats
-4886 total
+5074 total
-7- Appendices whose translation is optional
326 essay/literature.itely
@item Update sections finished in the English documentation; check
sections status at
+@smallexample
@uref{http://lilypondwiki.tuxfamily.org/index.php?title=Documentation_coordination}.
+@end smallexample
@item Update documentation PO. It is recommended not to update
strings which come from documentation that is currently deeply revised
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+@node Modifying the feta font
+@chapter Modifying the feta font
+
+@menu
+* Overview of the feta font::
+* Font creation tools::
+* Adding a new font section::
+* Adding a new glyph::
+* Building the changed font::
+@end menu
+
+@node Overview of the feta font
+@section Overview of the feta font
+
+The feta font is a font that was created specifically for use in
+LilyPond. The sources for the font are found in mf/*.mf.
+
+The feta font is merged from a number of subfonts. Each subfont
+can contain at most 224 glyphs. This is because each subfont is
+limited to a one-byte address space (256 glyphs maximum) and we
+avoid the first 32 points in that address space, since they are
+non-printing control characters in ASCII.
+
+In LilyPond, glyphs are accessed by glyph name, rather than by code point.
+Therefore, the naming of glyphs is significant.
+
+Information about correctly creating glyphs is found in @file{mf/README}.
+Please make sure you read and understand this file.
+
+TODO -- we should get mf/README automatically generated from texinfo source
+and include it here.
+
+
+@node Font creation tools
+@section Font creation tools
+
+The sources for the feta font are written in metafont. The definitive
+reference for metafont is "The METAFONT book". Source for the book is
+available at CTAN.
+
+mf2pt1 is used to create type 1 fonts from the metafont sources.
+
+FontForge is used to postprocess the output of mf2pt1 and clean up
+details of the font. It can also be used by a developer to
+display the resulting glyph shapes.
+
+@node Adding a new font section
+@section Adding a new font section
+
+The font is divided into sections, each of which contains less
+than 224 glyphs. If more than 224 glyphs are included in a section,
+an error will be generated.
+
+Each of the sections is contained in a separate @code{.mf} file. The
+files are named according to the type of glyphs in that section.
+
+When adding a new section, it will be necessary to add the following:
+
+@itemize
+@item
+The code for the glyphs, in a file @code{<section-name>.mf}
+@item
+Driver files used to create the font in different sizes
+@item
+An entry in the generic file used to create the font, or a new
+generic file
+@item
+If necessary, new entries in the GNUmakefile
+@item
+An entry in @file{scripts/build/gen-emmentaler-scripts.py}
+@end itemize
+
+See the examples in @code{mf/} for more information.
+
+@node Adding a new glyph
+@section Adding a new glyph
+
+Adding a new glyph is done by modifying the .mf file to which the
+glyph will be added.
+
+Necessary functions to draw the glyph can be added anywhere in the file,
+but it is standard to put them immediately before the glyph definition.
+
+The glyph definition begins with:
+
+@example
+fet_beginchar ("glyph description", "glyphname");
+@end example
+
+@noindent
+with @code{glyph description} replaced with a short description of the
+glyph, and @code{glyphname} replaced with the glyphname, which is chosen
+to comply with the naming rules in @file{mf/README}.
+
+The metafont code used to draw the glyph follows the @code{fet_beginchar}
+entry. The glyph is finished with:
+
+@example
+fet_endchar;
+@end example
+
+@node Building the changed font
+@section Building the changed font
+
+In order to rebuild the font after making the changes, the existing
+font files must be deleted. The simplest and quickest way to do this
+is to do:
+
+@example
+rm mf/out/*
+make
+@end example
@section Overview of work flow
@cartouche
-@strong{Ultra-short summary for Unix developers}: source code is at
-@code{git://git.sv.gnu.org/lilypond.git}. Documentation is built
+@strong{Short summary for Unix developers}: source code is at
+@uref{git://git.sv.gnu.org/lilypond.git}. Documentation is built
with Texinfo, after pre-processing with @code{lilypond-book}.
Send well-formed patches to @email{lilypond-devel@@gnu.org}.
@end cartouche
Savannah software forge at @uref{http://git.sv.gnu.org}.
Although, since Git uses a @emph{distributed} model, technically
there is no central repository. Instead, each contributor keeps a
-complete copy of the entire repository (about 116M).
+complete copy of the entire repository (about 116MB).
Changes made within one contributor's copy of the repository can
be shared with other contributors using @emph{patches}. A patch
-devel before being pushed).
@item
-Keep track of patches from your contributor. If you've sent a
-patch to -devel, it's your responsibility to pester people to get
-comments for it, or at very least add it to the google tracker.
+Keep track of patches from your contributor. Either upload them
+to Rietveld yourself, or help+encourage them to upload the patches
+themselves. When a patch is on Rietveld, it's your responbility
+to get comments for it, and to add a link to the patch to the
+google tracker. (tag it @qq{patch-new}, or @qq{patch-review} if
+you feel very confident in it)
+
+@item
+Encourage your contributor to review patches, particularly your
+own! It doesn't matter if they're not familiar with C++ / scheme
+/ build system / doc stuff -- simply going through the process is
+valuable. Besides, anybody can find a typo!
+
+@item
+Contact your contributor at least once a week. The goal is just
+to get a conversation started -- there's nothing wrong with simply
+copy&pasting this into an email:
+
+@example
+Hey there,
+
+How are things going? If you sent a patch and got a review, do
+you know what you need to fix? If you sent a patch but have no
+reviews yet, do you know when you will get reviews? If you are
+working on a patch, what step(s) are you working on?
+@end example
+
@end enumerate
@uref{http://code.google.com/p/lilypond/issues/list}
@end example
-You cannot log if you have Google Sharing
-@uref{http://www.googlesharing.net/} enabled.
+You cannot log on if you have Google Sharing enabled
+@uref{http://www.googlesharing.net/}.
@item
Go to your @qq{Profile}, and select @qq{Settings}.
@section Bug Squad checklists
When you do Bug Squad work, start at the top of this page and work
-your way down. Stop when you've done 15 minutes.
+your way down. Stop when you've done 20 minutes.
Please use the email sorting described in @ref{Bug Squad setup}.
This means that (as Bug Squad members) you will only ever respond
@subsubheading Emails to you personally
You are not expected to work on Bug Squad matters outside of your
-15 minutes, but sometimes a confused user will send a bug report
+20 minutes, but sometimes a confused user will send a bug report
(or an update to a report) to you personally. If that happens,
please forward such emails to the @code{bug-lilypond} list so that
the currently-active Bug Squad member(s) can handle the message.
@subsubheading Daily schedule
-The Bug Meister is omitted from the daily schedule.
+@c spacing is deliberate to help reinforce the "cyclic" nature
@example
-Sunday: Colin
-Monday: Dmytro
-Tuesday: James Bailey
-Wednesday: Ralph
-Thursday: Patrick
-Friday: Urs
-Saturday: Kieren
+Monday: Dmytro
+Tuesday: Colin
+Wednesday: Derek
+Thursday: Dmytro
+Friday: Colin
+Saturday: Derek
+Sunday: Phil
@end example
lilypond --png bug.ly
@end example
+@item
+Images created as @file{bug.png} may be trimmed to a minimum size
+by using the @code{trimtagline.sh} script, which can be found at
+@uref{https://raw.github.com/gperciva/lilypond-extra/master/bug-squad/trimtagline.sh}
+
+@example
+trimtagline.sh bug.ly
+@end example
+
@item
If the issue cannot be shown with less than three pages, then
generate a @file{bug.pdf} file with:
Grid view provides the best overview:
-@example
+@smallexample
@uref{http://code.google.com/p/lilypond/issues/list?mode=grid&y=Priority&x=Type&cells=ids}
-@end example
+@end smallexample
@subsubheading Hindering development
These issues stop or slow development work:
-@example
-@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Maintainability&mode=grid&y=Priority&x=Type&cells=ids}
-@end example
+@smallexample
+@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Maintainability}
+@end smallexample
@subsubheading Easy tasks
familiar with material in this manual, but does not know anything
else about LilyPond development.
-@example
-@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Frog&mode=grid&y=Priority&x=Type&cells=ids}
-@end example
+@smallexample
+@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Frog}
+@end smallexample
@subsubheading Patches to review
@}
@end example
-\noindent
+@noindent
and name the file @file{snippet-title.ly}.
@item
From the top source directory, run:
-@example
+@smallexample
wget http://lsr.dsi.unimi.it/download/lsr-snippets-docs-@var{YYYY-MM-DD}.tar.gz
tar -xzf lsr-snippets-docs-@var{YYYY-MM-DD}.tar.gz
scripts/auxiliar/makelsr.py lsr-snippets-docs-@var{YYYY-MM-DD}
-@end example
+@end smallexample
@noindent
where @var{YYYY-MM-DD} is the current date, e.g. 2009-02-28.
and redirect terminal output to text files, which are then
searched for the word "failed" to see which snippets do not compile.
-@example
+@smallexample
#!/bin/bash
for LILYFILE in *.ly
done
grep failed *.txt
-@end example
+@end smallexample
@node Indentation
@subsection Indentation
-Standard GNU coding style is used. In emacs:
+Standard GNU coding style is used.
-@verbatim
- (add-hook 'c++-mode-hook
- '(lambda() (c-set-style "gnu")
- ))
-@end verbatim
-
-If you like using font-lock, you can also add this to your
-@q{.emacs}:
+@subsubheading Indenting files with @code{fixcc.py} (recommended)
-@verbatim
- (setq font-lock-maximum-decoration t)
- (setq c++-font-lock-keywords-3
- (append
- c++-font-lock-keywords-3
- '(("\\b\\(a-zA-Z_?+_\\)\\b" 1 font-lock-variable-name-face) ("\\b\\(A-Z?+a-z_?+\\)\\b" 1 font-lock-type-face))
- ))
-@end verbatim
-
-Some source files may not currently have proper indenting. If this
-is the case, it is desirable to fix the improper indenting when the
-file is modified, with the hope of continually improving the code.
-
-
-@subheading Indenting files with fixcc.py
-
-LilyPond provides a python script that will correct the indentation
-on a c++ file:
+LilyPond provides a python script that will adjust the indentation
+and spacing on a @code{.cc} or @code{.hh} file to very near the
+GNU standard:
@example
-scripts/auxiliar/fixcc.py lily/my-test-file.cc
+scripts/auxiliar/fixcc.py FILENAME
@end example
-Be sure you replace @file{my-test-file.cc} with the name of the file
-that you edited.
-
-If you are editing a file that contains an ADD_TRANSLATOR or ADD_INTERFACE
-macro, the fixcc.py script will move the final parenthesis up one line
-from where it should be. Please check the end of the file before
-you run fixcc.py, and then put the final parenthesis and semicolon
-back on a line by themselves.
+This can be run on all files at once, but this is not recommended
+for normal contributors or developers.
+@smallexample
+scripts/auxiliar/fixcc.py \
+ fixcc $(find flower lily -name '*cc' -o -name '*hh' | grep -v /out)
+@end smallexample
-@subheading Indenting files with emacs in script mode
-@c email to wl@gnu.org when I get here.
+@subsubheading Indenting with emacs
-@warning{this is pending some confirmation on -devel. July 2009 -gp}
-
-Command-line script to format stuff with emacs:
+The following hooks will produce indentation which is similar to
+our official indentation as produced with @code{fixcc.py}.
@example
-#!/bin/sh
-emacs $1 -batch --eval '(indent-region (point-min) (point-max) nil)' -f save-buffer
+(add-hook 'c++-mode-hook
+ '(lambda ()
+ (c-set-style "gnu")
+ (setq indent-tabs-mode nil))
@end example
-(that's all on one line)
+If you like using font-lock, you can also add this to your
+@file{.emacs}:
-Save it as a shell script, then run on the file(s) you modified.
+@example
+(setq font-lock-maximum-decoration t)
+(setq c++-font-lock-keywords-3
+ (append
+ c++-font-lock-keywords-3
+ '(("\\b\\(a-zA-Z_?+_\\)\\b" 1 font-lock-variable-name-face) ("\\b\\(A-Z?+a-z_?+\\)\\b" 1 font-lock-type-face))
+ ))
+@end example
@subheading Indenting with vim
-Although emacs indentation is the LilyPond standard, acceptable
+Although emacs indentation is the GNU standard, acceptable
indentation can usually be accomplished with vim. Some hints for
vim are as follows:
A workable .vimrc:
-@verbatim
+@example
set cindent
set smartindent
set autoindent
set ignorecase smartcase
set hlsearch
set confirm
-set statusline=%F%m%r%h%w\ %{&ff}\ %Y\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ %04l,%04v\ %p%%\ [LEN=%L]
+set statusline=%F%m%r%h%w\ %@{&ff@}\ %Y\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ %04l,%04v\ %p%%\ [LEN=%L]
set laststatus=2
set number
" Remove trailing whitespace on write
autocmd BufWritePre * :%s/\s\+$//e
-@end verbatim
+@end example
-With this .vimrc, files can be reindented automatically by highlighting
-the lines to be indented in visual mode (use V to enter visual mode)
-and pressing =.
+With this @file{.vimrc}, files can be reindented automatically by
+highlighting the lines to be indented in visual mode (use V to
+enter visual mode) and pressing @code{=}.
-A scheme.vim file will help improve the indentation. This one
-was suggested by Patrick McCarty. It should be saved in
-~/.vim/after/syntax/scheme.vim.
+A @file{scheme.vim} file will help improve the indentation. This
+one was suggested by Patrick McCarty. It should be saved in
+@file{~/.vim/after/syntax/scheme.vim}.
-@verbatim
+@example
" Additional Guile-specific 'forms'
syn keyword schemeSyntax define-public define*-public
syn keyword schemeSyntax define* lambda* let-keywords*
" Try to highlight all ly: procedures
syn match schemeFunc "ly:[^) ]\+"
-@end verbatim
+@end example
@node Naming conventions
@example
cd ~/lilypond-git/build/
+make
make doc
@end example
@enumerate
@item
-Before making changes, a baseline should be established by
-running:
+Run @code{make} with current git master without any of your changes.
+
+@item
+Before making changes to the code, establish a baseline for the comparison by
+going to the @file{lilypond-git/build/} directory and running:
@example
make test-baseline
@end example
After this has finished, a regression test comparison will be
-available at:
+available (relative to the current @file{build/} directory) at:
@example
out/test-results/index.html
@end enumerate
+@advanced{
+Once a test baseline has been established, there is no need to run it again
+unless git master changed. In other words, if you work with several branches
+and want to do regtests comparison for all of them, you can
+@code{make test-baseline} with git master, checkout some branch,
+@code{make} and @code{make check} it, then switch to another branch,
+@code{make test-clean}, @code{make} and @code{make check} it without doing
+@code{make test-baseline} again.}
+
@node Finding the cause of a regression
@section Finding the cause of a regression
For tracking memory usage as part of this test, you will need
GUILE CVS; especially the following patch:
+@smallexample
@uref{http://www.lilypond.org/vc/old/gub.darcs/patches/guile-1.9-gcstats.patch}.
+@end smallexample
@subheading Code coverage
If you do not have the previous release test-output tarball, download
it and put it in @code{regtests/}
+@item Prepare GUB environment by running:
+
+@example
+### my-gub.sh
+# special terminal, and default PATH environment.
+# import these special environment vars:
+# HOME, HTTP_PROXY, TERM
+env -i \
+ HOME=$HOME \
+ HTTP_PROXY=$HTTP_PROXY \
+ bash --rcfile my-bashrc
+@end example
+
+@example
+### my-bashrc
+export PS1="\[\e[1;33mGUB-ENV \w\]$ \[\e[0m\]"
+export PATH=$PATH
+export TERM=xterm
+@end example
+
+
@item Build release on GUB by running:
@example
Run convert-ly on all files, bump parser minimum version.
@item
-Make FTP directories on lilypond.org
+Make directories on lilypond.org:
+
+@example
+~/web/download/sources/v2.14
+~/web/download/sources/v2.15
+@end example
+
+@item
+Shortly after the release, move all current contributors to
+previous contributors in:
+
+@example
+Documentation/included/authors.itexi
+@end example
+
+Also, delete old material in:
+
+@example
+Documentation/changes.tely
+@end example
+
+but don't forget to check it still compiles! also update the
+version numbers.
@item
Website:
@example
bin/gub mingw::lilypond-installer
make LILYPOND_BRANCH=stable/2.12 -f lilypond.make doc
-bin/gub --platform=darwin-x86 'git://git.sv.gnu.org/lilypond-doc.git?branch=stable/2.12'
+bin/gub --platform=darwin-x86 \
+ 'git://git.sv.gnu.org/lilypond-doc.git?branch=stable/2.12'
@end example
or
@c don't change the cgit link below to gitweb; gitweb uses
@c long filenames like "scripts_auxiliar_lily-git.tcl"
-@example
+@smallexample
@uref{http://git.sv.gnu.org/cgit/lilypond.git/plain/scripts/auxiliar/lily-git.tcl}
-@end example
+@end smallexample
@item
To run the program from the command line, navigate to the
@end verbatim
Check for any updates to trusted scripts / files:
-
+@smallexample
@verbatim
### check-git.sh
#!/bin/sh
cp $GIT/Documentation/web/server/lilypond.org.htaccess $DEST/lilypond.org.htaccess
cp $GIT/Documentation/web/server/website-dir.htaccess $DEST/website-dir.htaccess
@end verbatim
+@end smallexample
Build the website:
@end html
@end ifhtml
-@emph{Naposledy obnoveno Thu Mar 24 14:52:33 UTC 2011
+@emph{Naposledy obnoveno Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
4 Ladění výstupu
@*
-15408
+15393
@tab Pavel Fric
@tab
@tab
@item
Úvod
@*
-4506
+4564
@tab Pavel Fric
@tab
@tab
@ifhtml
@html
-<span style="background-color: #47ff24">částečně</span>
+<span style="background-color: #4efe25">částečně</span>
@end html
@end ifhtml
@ifnothtml
@item
Stažení
@*
-1183
+1195
@tab Pavel Fric
@tab
@tab
@ifhtml
@html
-<span style="background-color: #40fe23">částečně</span>
+<span style="background-color: #4efe25">částečně</span>
@end html
@end ifhtml
@ifnothtml
@item
Příručky
@*
-1200
+1203
@tab Pavel Fric
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">ano</span>
+<span style="background-color: #25fe1f">částečně</span>
@end html
@end ifhtml
@ifnothtml
-ano
+částečně
@end ifnothtml
@tab před-GDP
@item
[@var{přednastavená cesta - PATH}];@var{ADR}\LilyPond\usr\bin
@end example
-@warning{@var{ADR} je obvykle @code{C:\Program Files}.}
+@warning{@var{ADR} je obvykle @code{C:@bs{}Program Files}.}
@noindent
a klepněte na @qq{OK} pro uzavření okna.
.example {
position: relative;
left: -2.5em;
+ text-align: left;
}
.h-scroll-auto {
* Übliche Notation:: Die häufigsten Notationsfälle.
* Grundbegriffe:: Grundlegende Konzepte, die benötigt werden, um den Rest dieses Handbuchs zu lesen.
* Die Ausgabe verändern:: Einleitung in die Beeinflussung des Notenbilds.
-* An LilyPond-Projekten arbeiten:: Benutzung des Programms im wirklichen Leben.
Anhänge
@end html
@end ifhtml
-@emph{Zuletzt aktualisiert am Thu Mar 24 14:52:33 UTC 2011
+@emph{Zuletzt aktualisiert am Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
1 Notensatz
@*
-5297
+5296
@tab Till Paala
@tab
@tab
@item
4 Die Ausgabe verändern
@*
-15408
+15393
@tab Till Paala
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #25fe1f">teilweise</span>
@end html
@end ifhtml
@ifnothtml
-ja
+teilweise
@end ifnothtml
@tab vor-GDP
@item
1.1 Tonhöhen
@*
-4479
+4502
@tab Till Paala
@tab
@tab
@ifhtml
@html
-<span style="background-color: #40fe23">teilweise</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-teilweise
+ja
@end ifnothtml
@tab vor-GDP
@item
@ifhtml
@html
-<span style="background-color: #33ff21">teilweise</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-teilweise
+ja
@end ifnothtml
@tab vor-GDP
@item
@item
1.4 Wiederholungszeichen
@*
-930
+945
@tab Till Paala
@tab
@tab
@item
1.5 Gleichzeitig erscheinende Noten
@*
-2163
+2216
@tab Till Paala
@tab
@tab
@ifhtml
@html
-<span style="background-color: #33ff21">teilweise</span>
+<span style="background-color: #83fe2c">teilweise</span>
@end html
@end ifhtml
@ifnothtml
@item
1.6 Notation auf Systemen
@*
-2056
+2345
@tab Till Paala
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #9eff30">teilweise</span>
@end html
@end ifhtml
@ifnothtml
-ja
+teilweise
@end ifnothtml
@tab vor-GDP
@item
@ifhtml
@html
-<span style="background-color: #25fe1f">teilweise</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-teilweise
+ja
@end ifnothtml
@tab vor-GDP
@item
@ifhtml
@html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #25fe1f">teilweise</span>
@end html
@end ifhtml
@ifnothtml
-ja
+teilweise
@end ifnothtml
@tab vor-GDP
@item
@item
2.2 Tasteninstrumente und andere Instrumente mit mehreren Systemen
@*
-838
+864
@tab Till Paala
@tab
@tab
@item
2.4 Saiteninstrumente mit Bünden
@*
-2640
+2649
@tab Till Paala
@tab
@tab
@item
3 Allgemeine Eingabe und Ausgabe
@*
-7069
+7671
@tab Till Paala
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #dfef77">teilweise (90 %)</span>
@end html
@end ifhtml
@ifnothtml
-ja
+teilweise (90 %)
@end ifnothtml
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #83fe2c">teilweise</span>
@end html
@end ifhtml
@ifnothtml
-ja
+teilweise
@end ifnothtml
@tab vor-GDP
@item
4 Abstände
@*
-11017
+11087
@tab Till Paala
@tab
@tab
@item
3 @command{lilypond-book} aufrufen
@*
-3764
+3952
@tab Reinhold Kainhofer
@tab Till Paala
@tab
@item
Einleitung
@*
-4506
+4564
@tab Till Paala
@tab
@tab
@item
Download
@*
-1183
+1195
@tab Till Paala
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">ja</span>
+<span style="background-color: #25fe1f">teilweise</span>
@end html
@end ifhtml
@ifnothtml
-ja
+teilweise
@end ifnothtml
@tab vor-GDP
@item
Handbücher
@*
-1200
+1203
@tab Till Paala
@tab
@tab
@menu
* midi2ly aufrufen:: Import von MIDI.
-* muscxml2ly aufrufen:: Import von MusicXML.
+* musicxml2ly aufrufen:: Import von MusicXML.
* abc2ly aufrufen:: Import von ABC.
* etf2ly aufrufen:: Import von (alten) Finale-Dateien.
* Andere Formate::
hinzufügen.
-@node muscxml2ly aufrufen
-@subsection @command{muscxml2ly} aufrufen
+@node musicxml2ly aufrufen
+@subsection @command{musicxml2ly} aufrufen
@translationof Invoking musicxml2ly
@cindex MusicXML
@subsubheading Stabile Version
-@ref{Download, Download @versionStable}
+@ref{Download, @versionStable herunterladen}
-@ref{Manuals, Manuals @versionStable}
+@ref{Handbücher, @versionStable Handbücher}
@subsubheading Entwicklerversion
-@ref{Development, Download @versionDevel}
+@ref{Entwicklung, @versionDevel herunterladen}
-@ref{Development, Manuals @versionDevel}
+@ref{Entwicklung, @versionDevel Handbücher}
@divEnd
@end ifset
[@var{voreingestellter PATH}];@var{VERZ}\LilyPond\usr\bin
@end example
-@warning{@var{VERZ} ist üblicherweise @code{C:\Program Files}.}
+@warning{@var{VERZ} ist üblicherweise @code{C:@bs{}Program Files}.}
@noindent
und klicken Sie auf @qq{OK} um das Fenster zu schließen.
@imageFloat{flat-design,png,right}
-LilyPond entstand, als zwei Musiker über das tote und unbeseelte Aussehen von computererstellten Notendrucken hinausgehen wollten. Alle Musiker wollen schöne Noten lesen, warum also sollten Programmierer kein Programm schreiben können, dass schönere Orchesterstimmen setzen kann?
+LilyPond entstand, als zwei Musiker über das tote und unbeseelte Aussehen von computererstellten Notendrucken hinausgehen wollten. Alle Musiker wollen schöne Noten lesen, warum also sollten Programmierer kein Programm schreiben können, das schönere Orchesterstimmen setzen kann?
Das Resultat ist ein System, welches Musiker von den Details des
Notensatzlayouts befreit, sodass sie sich darauf konzentrieren
@docLinks{Änderungen, changes,
@rchangesnamed{Top,Änderungen},
- @manualStableChangesSplit-de,
- @manualStableChangesBig-de, 6 KB,
- @manualStableChangesPdf-de, 200 KB}
+ @manualStableChangesSplit,
+ @manualStableChangesBig, 6 KB,
+ @manualStableChangesPdf, 200 KB}
@divEnd
STEPMAKE_TEMPLATES = documentation
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
-UNSPLITTED_HTML_MANUALS = changes
EXTRA_DIST_FILES = web.texi
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 7ad21bc1c7d8407e8f21088415c1ad117e84fd9d
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: cfc6e57ef66601ecca367654f69ee8c27001c573
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@c This file is part of extending.tely
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c learning/tutorial.itely
@ignore
- Translation of GIT committish: fe2cae0fa47ec4ec0184e6b3d15572fbcba881cf
+ Translation of GIT committish: 8f02aa6516b3cfe16b2c145142ea652cbc3b8970
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c double \\ required because this is inside a macro!
@example
-\\version "@w{@version{}}"
+\\version "@w{@versionStable{}}"
@{
c' e' g' e'
@}
Verá algo parecido a:
@example
-GNU LilyPond @version{}
+GNU LilyPond @w{@versionStable{}}
Procesando `prueba.ly'
Analizando...
Interpretando la música...
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 463240fdfd30e9bd60238b246114e5d27319d6d5
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 398e5e95c6cd11f2ef03a5ceed087d87ad28f1e1
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 7130696ee590df198a4dc039423dcc1d36512fd9
+ Translation of GIT committish: cf4e2cb33bbcc867d74cd40b2efe28c961ca4a60
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
-Presentamos un ejemplo más extraído del comienzo del pentagrama de la
-mano izquierda del preludio de Chopin Op 28 No. 2. vemos que la barra
-choca con las notas superiores:
+Presentamos otro ejemplo. Vemos que la barra
+choca con las ligaduras:
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
+ \time 4/2
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
}
@end lilypond
@noindent
Esto se puede resolver manualmente elevando los dos extremos de la
-barra desde su posición a dos espacios de pentagrama sobre la línea
-central hasta, digamos, 3 espacios:
+barra desde su posición a 1.81 espacios de pentagrama bajo la línea
+central hasta, digamos, 1 espacio:
@cindex Beam, ejemplo de sobreescritura
@cindex positions, propiedad, ejemplo
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
+ \time 4/2
<<
- \override Beam #'positions = #'(3 . 3)
- { b,8 ais, b, g, }
- \\
- { e,8 g e, g }
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ {
+ \override Beam #'positions = #'(-1 . -1)
+ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
+ }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
}
@end lilypond
@noindent
Observe que la sobreescritura sigue aplicándose en la primera voz del
-segundo bloque de corcheas, pero no a ninguna de las barras de la
+segundo compás de corcheas, pero no a ninguna de las barras de la
segunda voz.
@subheading la propiedad force-hshift (forzar desplazamiento horizontal)
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@c vim: foldmethod=marker
@ignore
- Translation of GIT committish: 274c916b48393e0f866cbab68c18a505f6fc7ea3
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
-Translation of GIT committish: 274c916b48393e0f866cbab68c18a505f6fc7ea3
+Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 345522f312430725cdae0d61acfa716ce08622ca
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 9a40bd63b77375ac7ac1085d7eda9f5680bf06dd
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: de924bddd22886a0a67decbde45acd5da441bf6d
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@c This file is included from notation.itely
@ignore
- Translation of GIT committish: f93bc90b3ee5e5de96b59c8e81b4ea354d5b1927
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 33903a90b916b4c42d767aa0feb800de1c3d8dbe
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 5becf12f5ada67346f70ad8cfe68589466619305
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@seealso
Referencia de la notación:
@ref{Plicas},
-@ref{Armónicods},
+@ref{Armónicos},
@ref{Glissando}.
Fragmentos de código:
-u@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 9f651e1f5143787aeda825a4061f82eede4943a3
+ Translation of GIT committish: ba10db0a4ffe50a260d76179b77c396034434ce4
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
* Trabajar sobre los archivos de entrada::
* Controlar la salida::
* Salida MIDI::
+* Extraer información musical::
@end menu
compositor; ciertas piezas tienen mucha más información.
@menu
-* Crear títulos::
-* Encabezamientos pies y títulos personalizados::
-* Referencias a números de página::
+* Crear títulos cabeceras y pies de página::
+* Cabeceras pies y títulos personalizados::
+* Referencia a números de página::
* Índice general::
@end menu
-@node Crear títulos
-@subsection Crear títulos
-@translationof Creating titles
+@node Crear títulos cabeceras y pies de página
+@subsection Crear títulos, cabeceras y pies de página
+@translationof Creating titles headers and footers
-Se crean títulos para cada uno de los bloques @code{\score} así como
-para todo el archivo de entrada (o bloque @code{\book}, libro) y las
-partes de libro (creadas mediante bloques @code{\bookpart}).
+@menu
+* Explicación de los bloques de títulos::
+* Presentación predeterminada de los bloques de título del libro y la partitura::
+* Disposición predeterminada de las cabeceras y pies de página::
+@end menu
-El contenido de cada título se extrae a partir de los bloques
-@code{\header} (cabecera). El bloque de cabecera de un libro
-contempla lo siguiente:
-@table @code
-@funindex dedicatoria
-@item dedication
-El dedicatario de la música, centrado en lo alto de la primera página.
+@node Explicación de los bloques de títulos
+@unnumberedsubsubsec Explicación de los bloques de títulos
+@translationof Title blocks explained
-@funindex title
-@item title
-El título de la música, centrado justo debajo de la
-dedicatoria.
+@c TODO: figure out how \bookpart titles work
-@funindex subtitle
-@item subtitle
-Subtítulo, centrado debajo del título.
+Existen dos clases de bloques de títulos: el bloque principal de
+títulos que aparece encima del primer bloque @code{\score} de un
+libro, y los bloques individuales de título que aparecen dentro de
+cada bloque @code{\score}. Los campos de texto para los dos tipos de
+bloque se introducen mediante un bloque @code{\header}.
-@funindex subsubtitle
-@item subsubtitle
-Sub-subtítulo, centrado debajo del subtítulo.
+Si el libro tiene una única partitura, el bloque @code{\header} se
+puede situar dentro o fuera del bloque @code{\score}.
-@funindex poet
-@item poet
-Nombre del poeta, a la izquierda, debajo del subtítulo.
+@warning{Recuerde que al añadir un bloque @bs{}@code{header} dentro de
+un bloque @bs{}@code{score}, la expresión musical debe aparecer antes
+del bloque @bs{}@code{header}.}
-@funindex composer
-@item composer
-Nombre del compositor, a la derecha, debajo del subtítulo.
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\header {
+ title = "SUITE I."
+ composer = "J. S. Bach."
+}
-@funindex meter
-@item meter
-Texto de la medida, a la izquierda, debajo del poeta.
+\score {
+ \new Staff \relative g, {
+ \clef bass
+ \key g \major
+ \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
+ }
+ \header {
+ piece = "Prélude."
+ }
+}
-@funindex opus
-@item opus
-Nombre del Opus, a la derecha, debajo del compositor.
+\score {
+ \new Staff \relative b {
+ \clef bass
+ \key g \major
+ \partial 16 b16 |
+ <g, d' b'~>4 b'16 a( g fis) g( d e fis) g( a b c) |
+ d16( b g fis) g( e d c) b(c d e) fis( g a b) |
+ }
+ \header {
+ piece = "Allemande."
+ }
+}
+@end lilypond
-@funindex arranger
-@item arranger
-Nombre del arreglista, a la derecha, debajo del Opus.
+Los campos de texto extraídos del bloque prinicipal de título de un
+libro se pueden imprimir en todos los bloques @code{\score}, o
+suprimirse manualmente:
-@funindex instrument
-@item instrument
-Nombre del instrumento, centrado, debajo del arreglista. También
-aparece centrado en lo alto de cada página (aparte de la primera).
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ print-all-headers = ##t
+ }
+ \header {
+ title = "DAS WOHLTEMPERIRTE CLAVIER"
+ subtitle = "TEIL I"
+ % Do not display the tagline for this book
+ tagline = ##f
+ }
+ \markup { \vspace #1 }
+ \score {
+ \new PianoStaff <<
+ \new Staff { s1 }
+ \new Staff { \clef "bass" s1 }
+ >>
+ \header {
+ title = "PRAELUDIUM I"
+ opus = "BWV 846"
+ % Do not display the subtitle for this score
+ subtitle = ##f
+ }
+ }
+ \score {
+ \new PianoStaff <<
+ \new Staff { s1 }
+ \new Staff { \clef "bass" s1 }
+ >>
+ \header {
+ title = "FUGA I"
+ subsubtitle = "A 4 VOCI"
+ opus = "BWV 846"
+ % Do not display the subtitle for this score
+ subtitle = ##f
+ }
+ }
+}
+@end lilypond
-@funindex piece
-@item piece
-Nombre de la pieza, a la izquierda, debajo del instrumento.
+@seealso
+Referencia de la notación:
+@ref{Estructura del archivo},
+@ref{Personalización de los bloques de título}.
+
+
+@node Presentación predeterminada de los bloques de título del libro y la partitura
+@unnumberedsubsubsec Presentación predeterminada de los bloques de título del libro y la partitura
+@translationof Default layout of book and score title blocks
+
+La disposición y formato de los bloques de título están controlados
+por medio de dos variables de @code{\paper}: @code{bookTitleMarkup}
+para el bloque de título @code{\header} principal y
+@code{scoreTitleMarkup} para los bloques @code{\header} individuales
+dentro de un bloque @code{\score}.
+
+@lilypond[papersize=a6,quote,verbatim,noragged-right]
+\header {
+ % The following fields are centered
+ dedication = "Dedication"
+ title = "Title"
+ subtitle = "Subtitle"
+ subsubtitle = "Subsubtitle"
+ instrument = "Instrument"
+
+ % The following fields are left-aligned on the left side
+ poet = "Poet"
+ meter = "Meter"
+
+ % The following fields are right-aligned on the right side
+ composer = "Composer"
+ arranger = "Arranger"
+}
-@cindex página, saltos, forzar
-@funindex breakbefore
-@item breakbefore
-Esto fuerza que el título comience sobre una página nueva (establézcalo a ##t o a ##f).
+\score {
+ { s1 }
+ \header {
+ % The following fields are placed at opposite ends of the same line
+ piece = "Piece"
+ opus = "Opus"
+ }
+}
+@end lilypond
-@funindex copyright
-@item copyright
-Aviso de Copyright, centrado en la parte inferior de la primera
-página. Para insertar el símbolo de copyright, consulte
-@ref{Codificación del texto}.
+@c Is the bit about \null markups true? -mp
-@funindex tagline
-@item tagline
-Cartel de propósito general en el pie de página, centrado al final de la última.
+Los campos de texto que se dejan sin establecer dentro de un bloque
+@code{\header} se sustituyen por elementos de marcado nulos
+@code{\null} de manera que no ocupen espacio innecesariamente.
-@end table
+Los ajustes predeterminados para @code{scoreTitleMarkup} sitúan los
+campos de texto @code{piece} y @code{opus} en extremos opuestos de la
+misma línea.
-A continuación presentamos una demostración de todos los campos que
-están disponibles. Fíjese en que puede utilizar en la cabecera
-cualquier instrucción de marcado de texto (Véase @ref{Formatear el texto}).
+@cindex breakbefore
-@lilypond[quote,verbatim,line-width=11.0\cm]
-\paper {
- line-width = 9.0\cm
- paper-height = 10.0\cm
-}
+Utilice la variable @code{breakbefore} dentro de un bloque
+@code{\header} que está propiamente dentro de un bloque @code{\score}
+para hacer que los títulos del bloque @code{\header} del nivel
+superior aparezcan ocupando toda la primera página, empezando la
+música (definida en el bloque @code{\score}) en la página siguiente.
+@lilypond[papersize=a8landscape,verbatim,noragged-right]
\book {
\header {
- dedication = "dedicated to me"
- title = \markup \center-column { "Title first line" "Title second line,
-longer" }
- subtitle = "the subtitle,"
- subsubtitle = #(string-append "subsubtitle LilyPond version "
-(lilypond-version))
- poet = "Poet"
- composer = \markup \center-column { "composer" \small "(1847-1973)" }
- texttranslator = "Text Translator"
- meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "e" \huge
-"r" }
- arranger = \markup { \fontsize #8.5 "a" \fontsize #2.5 "r" \fontsize
-#-2.5 "r" \fontsize #-5.3 "a" \fontsize #7.5 "nger" }
- instrument = \markup \bold \italic "instrument"
- piece = "Piece"
+ title = "This is my Title"
+ subtitle = "This is my Subtitle"
+ copyright = "This is the bottom of the first page"
}
-
\score {
- { c'1 }
+ \repeat unfold 4 { e'' e'' e'' e'' }
\header {
- piece = "piece1"
- opus = "opus1"
+ piece = "This is the Music"
+ breakbefore = ##t
+ }
+ }
+}
+@end lilypond
+
+@seealso
+Manual de aprendizaje:
+@rlearning{Cómo funcionan los archivos de entrada de LilyPond}
+
+Referencia de la notación:
+@ref{Estructura del archivo}.
+
+Archivos de inicio:
+@file{ly/titling-init.ly}.
+
+@node Disposición predeterminada de las cabeceras y pies de página
+@unnumberedsubsubsec Disposición predeterminada de las cabeceras y pies de página
+@translationof Default layout of headers and footers
+
+Las @emph{cabeceras} y los @emph{pies} de página son líneas de texto
+que aparecen en la parte más alta y en la más baja de las páginas
+separadas del texto principal de un libro. Se controlan mediante las
+siguientes variables de @code{\paper}:
+
+@itemize
+@item @code{oddHeaderMarkup} (marcado de cabecera impar)
+@item @code{evenHeaderMarkup} (marcado de cabecera par)
+@item @code{oddFooterMarkup} (marcado de pie impar)
+@item @code{evenFooterMarkup} (marcado de pie par)
+@end itemize
+
+Estas variables de marcado sólo pueden acceder a los campos de texto
+extraídos de bloques @code{\header} del nivel superior (que se aplican
+a todas las partituras del libro) y se definen en el archivo
+@file{ly/titling-init.ly}. De forma predeterminada:
+
+@itemize
+
+@item
+los números de página se sitúan automáticamente en el extremo superior
+izquierdo (si es par) o superior derecho (si es impar), a partir de la
+segunda página.
+
+@item
+el campo de texto @code{instrument} se sitúa en el centro en cada
+página, a partir de la segunda página.
+
+@item
+el texto de @code{copyright} se centra en la parte baja de la primera
+página.
+
+@item
+la línea @code{tagline} se centra al final de la última página, y
+debajo del texto de @code{copyright} si sólo hay una página.
+
+@end itemize
+
+@lilypond[papersize=a8landscape]
+\book {
+ \score {
+ \relative c' {
+ c4 d e f
}
}
- \markup {
- and now...
+}
+@end lilypond
+
+La línea de etiqueta tagline predeterminada se puede cambiar añadiendo un campo
+@code{tagline} en el bloque @code{\header} del nivel superior.
+
+@lilypond[papersize=a8landscape,verbatim]
+\book {
+ \header {
+ tagline = "... music notation for Everyone"
}
\score {
- { c'1 }
- \header {
- piece = "piece2"
- opus = "opus2"
+ \relative c' {
+ c4 d e f
}
}
}
@end lilypond
-Como se mostró anteriormente, puede usar varios bloques
-@code{\header}. Cuando los mismos campos aparecen en distintos
-bloques, tiene validez el último en definirse. A continuación un
-breve ejemplo.
+Para eliminar la línea @code{tagline}, establezca su valor a
+@code{##f}.
+
+
+@node Cabeceras pies y títulos personalizados
+@subsection Cabeceras, pies y títulos personalizados
+@translationof Custom headers footers and titles
+
+@c TODO: somewhere put a link to header spacing info
+@c (you'll have to explain it more in NR 4).
+
+@menu
+* Formateo personalizado del texto de los bloques de título::
+* Personalización de los bloques de título::
+* Disposición personalizada de cabeceras y pies de página::
+@end menu
+
+
+@node Formateo personalizado del texto de los bloques de título
+@unnumberedsubsubsec Formateo personalizado del texto de los bloques de título
+@translationof Custom text formatting for title blocks
+
+Se pueden usar instrucciones @code{\markup} estándar para personalizar
+el texto de cualquier cabecera, pie o título dentro del bloque
+@code{\header}.
+
+@lilypond[quote,verbatim,noragged-right]
+\score {
+ { s1 }
+ \header {
+ piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
+ subtitle = \markup { \italic "(Excerpt)" }
+ }
+}
+@end lilypond
+
+@seealso
+Referencia de la notación:
+@ref{Formatear el texto}.
+
+
+@node Personalización de los bloques de título
+@unnumberedsubsubsec Personalización de los bloques de título
+@translationof Custom layout for title blocks
+
+Las instrucciones @code{\markup} dentro del bloque @code{\header} son
+útiles para dar un formato simple al texto, pero no permiten un
+control preciso sobre la colocación de los títulos. Para personalizar
+la colocación de los campos de texto, use una o las dos variables de
+@code{\paper} siguientes:
+
+@itemize
+@item @code{bookTitleMarkup} (marcado de título del libro)
+@item @code{scoreTitleMarkup} (marcado de título de la partitura)
+@end itemize
+
+Estas variables de marcado se estudian en
+@ref{Presentación predeterminada de los bloques de título del libro y la partitura}.
+
+Los ajustes predeterminados para @code{scoreTitleMarkup} tal y como
+están definidos en el archivo @file{ly/titling-init.ly} son:
@example
-\header @{
- composer = "Compositor"
-@}
-\header @{
- piece = "Pieza"
-@}
-\score @{
- \new Staff @{ c'4 @}
- \header @{
- piece = "Otra pieza" % sobreescribe a la anterior
+scoreTitleMarkup = \markup @{ \column @{
+ \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+ \fill-line @{
+ \fromproperty #'header:piece
+ \fromproperty #'header:opus
@}
@}
+@}
@end example
-Si define la cabecera @code{\header} dentro del bloque @code{\score},
-por lo general se imprimirán solamente las cabeceras @code{piece} y
-@code{opus}. Fíjese en que la expresión musical debe aparecer antes
-del @code{\header}.
+Esto sitúa los campos de texto @code{piece} y @code{opus} en extremos
+opuestos de la misma línea:
-@lilypond[quote,verbatim,line-width=11.0\cm]
+@lilypond[quote,verbatim,noragged-right]
\score {
- { c'4 }
+ { s1 }
\header {
- title = "title" % not printed
- piece = "piece"
- opus = "opus"
+ piece = "PRAELUDIUM I"
+ opus = "BWV 846"
}
}
@end lilypond
-@funindex print-all-headers
-@noindent
-Se puede cambiar este comportamiento (e imprimir todas las cabeceras
-cuando la cabecera @code{\header} está definida dentro del bloque
-@code{\score}) mediante la utilización de
+Este ejemplo redefine @code{scoreTitleMarkup} de manera que el campo
+de texto @code{piece} aparece centrado y en un tipo de letra grande y
+en negrita.
-@example
-\paper@{
- print-all-headers = ##t
-@}
-@end example
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ indent = 0\mm
+ scoreTitleMarkup = \markup {
+ \fill-line {
+ \null
+ \fontsize #4 \bold \fromproperty #'header:piece
+ \fromproperty #'header:opus
+ }
+ }
+ }
+ \header { tagline = ##f }
+ \score {
+ { s1 }
+ \header {
+ piece = "PRAELUDIUM I"
+ opus = "BWV 846"
+ }
+ }
+}
+@end lilypond
-@cindex copyright
-@cindex tagline
+Los campos de texto reservados normalmente para el bloque principal de
+título se pueden insertar dentro de los bloques de título de las
+partituras individuales con la variable @code{print-all-headers}
+establecida dentro del bloque @code{\paper}. Una desventaja de la
+utilización de este método es que los campos de texto que están
+orientados específicamente para el bloque @code{\header} del nivel
+superior han de suprimirse manualmente en cada uno de los bloques
+@code{\score}. Véase @ref{Explicación de los bloques de títulos}.
+
+Para evitarlo, añada el campo de texto deseado a la definición de
+@code{scoreTitleMarkup}. En el ejemplo siguiente, el campo de texto
+@code{composer} (asociado normalmente con @code{bookTitleMarkup}) se
+añade a @code{scoreTitleMarkup}, permitiendo que cada partitura
+muestre un compositor diferente:
+
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ indent = 0\mm
+ scoreTitleMarkup = \markup {
+ \fill-line {
+ \null
+ \fontsize #4 \bold \fromproperty #'header:piece
+ \fromproperty #'header:composer
+ }
+ }
+ }
+ \header { tagline = ##f }
+ \score {
+ { s1 }
+ \header {
+ piece = "MENUET"
+ composer = "Christian Petzold"
+ }
+ }
+ \score {
+ { s1 }
+ \header {
+ piece = "RONDEAU"
+ composer = "François Couperin"
+ }
+ }
+}
+@end lilypond
-El pie de página por omisión se encuentra vacío, excepto para la
-primera página, en la que se inserta el campo de @code{copyright}
-extraído del @code{\header}, y para la última página, en la que se
-escribe el cartel @code{tagline} sacado del bloque @code{\header}. La
-línea por omisión para este cartel es @qq{Music engraving by LilyPond
-(@var{version})}.@footnote{Las partituras bien tipografiadas son una
-magnífica promoción para nosotros, así que por favor, si puede,
-conserve intacta la línea del letrero.}
+También podemos crear nuestros propios campos de texto personalizados,
+y referirnos a ellos en la definición del elemento de marcado.
-Las cabeceras se pueden quitar completamente estableciendo su valor a
-falso.
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ indent = 0\mm
+ scoreTitleMarkup = \markup {
+ \fill-line {
+ \null
+ \override #`(direction . ,UP) {
+ \dir-column {
+ \center-align \fontsize #-1 \bold
+ \fromproperty #'header:mycustomtext %% User-defined field
+ \center-align \fontsize #4 \bold
+ \fromproperty #'header:piece
+ }
+ }
+ \fromproperty #'header:opus
+ }
+ }
+ }
+ \header { tagline = ##f }
+ \score {
+ { s1 }
+ \header {
+ piece = "FUGA I"
+ mycustomtext = "A 4 VOCI" %% User-defined field
+ opus = "BWV 846"
+ }
+ }
+}
+@end lilypond
-@example
-\header @{
- tagline = ##f
- composer = ##f
-@}
-@end example
+@seealso
+Referencia de la notación:
+@ref{Explicación de los bloques de títulos}.
-@node Encabezamientos pies y títulos personalizados
-@subsection Encabezamientos, pies y títulos personalizados
-@translationof Custom headers footers and titles
+@node Disposición personalizada de cabeceras y pies de página
+@unnumberedsubsubsec Disposición personalizada de cabeceras y pies de página
+@translationof Custom layout for headers and footers
-Una opción más avanzada es cambiar las definiciones de las variables
-siguientes dentro del bloque @code{\paper}. El archivo de inicio
-@file{../ly/titling-init.ly} ofrece un listado de la
-disposición predeterminada.
-
-@table @code
-@funindex bookTitleMarkup
-@item bookTitleMarkup
- Es el título que se escribe en lo alto del documento de salida
-completo. Normalmente contiene el compositor y el título de la pieza.
-
-@funindex scoreTitleMarkup
-@item scoreTitleMarkup
- Es el título que se coloca por encima de un bloque @code{\score}.
-normalmente contiene el nombre del movimiento (campo @code{piece}).
-
-@funindex oddHeaderMarkup
-@item oddHeaderMarkup
- Es el encabezamiento de las páginas de numeración impar.
-
-@funindex evenHeaderMarkup
-@item evenHeaderMarkup
- Es el encabezamiento de las páginas de numeración par. Si se deja
- sin especificar, se usará el encabezamiento de las páginas impares.
-
- De forma predeterminada, los encabezamientos se definen de tal forma
-que el número de página está en el borde exterior, y el instrumento
-está centrado.
-
-@funindex oddFooterMarkup
-@item oddFooterMarkup
- Es el pie de las páginas de numeración impar.
-
-@funindex evenFooterMarkup
-@item evenFooterMarkup
- Es el pie de las páginas de numeración par. Si se deja sin
- especificar, se usará en su lugar el encabezamiento de las páginas
- impares.
-
- De forma predeterminada, el pie de página tiene el aviso de
-copyright en la primera página, y el cartel @code{tagline} en la
-última.
-@end table
-
-
-@cindex \paper
-@cindex encabezamiento
-@cindex header
-@cindex pie
-@cindex disposición de la página
-@cindex títulos
-
-La definición siguiente pone el título en el extremo izquierdo, y el
-compositor en el extremo derecho sobre una única línea.
+@c can make-header and make-footer be removed from
+@c paper-defaults-init.ly? -mp
-@example
-\paper @{
- bookTitleMarkup = \markup @{
- \fill-line @{
- \fromproperty #'header:title
- \fromproperty #'header:composer
- @}
- @}
-@}
-@end example
+Las instrucciones @code{\markup} dentro del bloque @code{\header} son
+de utilidad para dar formato al texto de una manera sencilla, pero no
+permiten un control preciso sobre la colocación de las cabeceras y los
+pies de página. Para personalizar la colocación de los campos de
+texto, use una o más de las siguientes variables de @code{\paper}:
-El encabezamiento y el pie se crean por parte de las funciones
-@code{make-header} y @code{make-footer}, definidas dentro de
-@code{\paper}. Las implementaciones predeterminadas están en
-@file{ly/paper-defaults-init.ly} y @file{ly/titling-init.ly}.
+@itemize
+@item @code{oddHeaderMarkup} (marcado de encabezamiento impar)
+@item @code{evenHeaderMarkup} (marcado de encabezamiento par)
+@item @code{oddFooterMarkup} (marcado de pie de página impar)
+@item @code{evenFooterMarkup} (marcado de pie de página par)
+@end itemize
-Este ejemplo centra los números de página en la parte de abajo de cada
-una.
+El ejemplo siguiente centra los números de página en la parte baja de
+las páginas. En primer lugar, los ajustes predeterminados para
+@code{oddHeaderMarkup} y @code{evenHeaderMarkup} se eliminan
+definiéndolos como un marcado @emph{nulo}. Después de esto, se
+redefine @code{oddFooterMarkup} con el número de página centrado.
+Finalmente, @code{evenFooterMarkup} recibe la misma disposición
+definiéndola como @code{\oddFooterMarkup}:
-@example
-\paper @{
- print-page-number = ##t
- print-first-page-number = ##t
- oddHeaderMarkup = \markup \fill-line @{ " " @}
- evenHeaderMarkup = \markup \fill-line @{ " " @}
- oddFooterMarkup = \markup @{
- \fill-line @{
- \bold \fontsize #3
- \on-the-fly #print-page-number-check-first
- \fromproperty #'page:page-number-string
- @}
- @}
- evenFooterMarkup = \markup @{
- \fill-line @{
- \bold \fontsize #3
- \on-the-fly #print-page-number-check-first
- \fromproperty #'page:page-number-string
- @}
- @}
-@}
-@end example
+@lilypond[papersize=a8,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ print-page-number = ##t
+ print-first-page-number = ##t
+ oddHeaderMarkup = \markup \null
+ evenHeaderMarkup = \markup \null
+ oddFooterMarkup = \markup {
+ \fill-line {
+ \on-the-fly #print-page-number-check-first
+ \fromproperty #'page:page-number-string
+ }
+ }
+ evenFooterMarkup = \oddFooterMarkup
+ }
+ \score {
+ \new Staff { s1 \break s1 \break s1 }
+ }
+}
+@end lilypond
+
+@seealso
+Notation Reference:
+@ref{Explicación de los bloques de títulos},
+@ref{Presentación predeterminada de los bloques de título del libro y la partitura}.
-@node Referencias a números de página
-@subsection Referencias a números de página
+@node Referencia a números de página
+@subsection Referencia a números de página
@translationof Reference to page numbers
-Se puede marcar un lugar determinado de una partitura utilizando la
-instrucción @code{\label} (etiqueta), bien en lo alto de la estructura
-o bien dentro de la música. Posteriormente se puede hacer referencia
-a esta etiqueta dentro de un elemento de marcado, para obtener el
-número de la página en que se encuentra la marca, usando la
-instrucción de marcado @code{\page-ref}.
+Un lugar determinado de una partitura puede señalizarse usando la
+instrucción @code{\label} (etiqueta), ya sea en el nivel superior o
+dentro de la música. Podemos referirnos a esta etiqueta más tarde
+dentro de un elemento de marcado, para obtener el número de la página
+en la que se sitúa el punto señalizado, usando la instrucción de
+marcado @code{\page-ref}.
-@lilypond[verbatim,line-width=11.0\cm]
+@lilypond[verbatim]
\header { tagline = ##f }
\book {
\label #'firstScore
c'1
}
}
-
\markup { The first score begins on page \page-ref #'firstScore "0" "?" }
\markup { Mark A is on page \page-ref #'markA "0" "?" }
}
* Inclusión de archivos de LilyPond::
* Distintas ediciones a partir de una misma fuente::
* Codificación del texto::
-* Presentar la notación de LilyPond::
@end menu
@end example
-@node Presentar la notación de LilyPond
-@subsection Presentar la notación de LilyPond
-@translationof Displaying LilyPond notation
-
-@funindex \displayLilyMusic
-La impresión textual de una expresión musical en notación de LilyPond
-puede hacerse con la función musical @code{\displayLilyMusic} pero solamente
-mediante la línea de órdenes. Por ejemplo,
-
-@example
-@{
- \displayLilyMusic \transpose c a, @{ c4 e g a bes @}
-@}
-@end example
-
-imprimirá
-
-@example
-@{ a,4 cis e fis g @}
-@end example
-
-De forma predeterminada, LilyPond imprime estos mensajes en la consola
-junto al resto de los mensajes de la compilación de LilyPond.
-Para discernir entre estos mensajes y
-guardar el resultado de @code{\display@{MATERIAL@}}, redireccione la
-salida hacia un archivo.
-
-@example
-lilypond archivo.ly >resultado.txt
-@end example
Articulate acorta los acordes, y ciertos fragmentos de música
(especialmente la música de órgano) es posible que suene peor.
+
+
+@node Extraer información musical
+@section Extraer información musical
+@translationof Extracting musical information
+
+Además de crear un resultado visual y MIDI,
+LilyPond es capaz de presentar información
+musical en forma de texto.
+
+@menu
+* Impresión del código de notación de LilyPond::
+* Impresión de las expresiones musicales de Scheme::
+* Guardar los eventos musicales en un archivo::
+@end menu
+
+@node Impresión del código de notación de LilyPond
+@subsection Displaying LilyPond notation
+@translationof Displaying LilyPond notation
+
+@funindex \displayLilyMusic
+La impresión textual de una expresión musical en notación de LilyPond
+puede hacerse con la función musical @code{\displayLilyMusic} pero solamente
+mediante la línea de órdenes. Por ejemplo,
+
+@example
+@{
+ \displayLilyMusic \transpose c a, @{ c4 e g a bes @}
+@}
+@end example
+
+imprimirá
+
+@example
+@{ a,4 cis e fis g @}
+@end example
+
+De forma predeterminada, LilyPond imprime estos mensajes en la consola
+junto al resto de los mensajes de la compilación de LilyPond.
+Para discernir entre estos mensajes y
+guardar el resultado de @code{\display@{MATERIAL@}}, redireccione la
+salida hacia un archivo.
+
+@example
+lilypond archivo.ly >resultado.txt
+@end example
+
+
+@node Impresión de las expresiones musicales de Scheme
+@subsection Impresión de las expresiones musicales de Scheme
+@translationof Displaying scheme music expressions
+
+Véase @rextend{Presentación de las expresiones musicales}.
+
+
+@node Guardar los eventos musicales en un archivo
+@subsection Guardar los eventos musicales en un archivo
+@translationof Saving music events to a file
+
+Los eventos musicales se pueden guardar en un archivo pentagrama a
+pentagrama mediante la inclusión de un archivo en nuestra partitura
+principal.
+
+@example
+\include "event-listener.ly"
+@end example
+
+De esta forma se crean uno o más archivos llamados
+@file{FILENAME-STAFFNAME.notes} ó @file{FILENAME-unnamed-staff.notes}
+para cada pentagrama. Observe que si tiene más de un pentagrama sin
+nombre, los eventos de todos los pentagramas se mezclarán entre sí
+dentro del mismo archivo. El resultado tiene el aspecto siguiente:
+
+@example
+0.000 note 57 4 p-c 2 12
+0.000 dynamic f
+0.250 note 62 4 p-c 7 12
+0.500 note 66 8 p-c 9 12
+0.625 note 69 8 p-c 14 12
+0.750 rest 4
+0.750 breathe
+@end example
+
+La sintaxis consiste en una línea delimitada por caracteres de
+tabulación, con dos campos fijos en cada línea seguidos de parámetros
+opcionales.
+
+@example
+@var{tiempo} @var{tipo} @var{...parámetros...}
+@end example
+
+Esta información se puede leer fácilmente por parte de otros programas
+como guiones de Python, y pueden ser muy útiles para aquellos
+investigadores que desean realizar un análisis musical o hacer
+experimientos de reproducción con LilyPond.
+
+
+@knownissues
+
+No todos los eventos musicales de lilypond están contemplados por
+@file{event-listener.ly}. Se pretende que sea una @qq{prueba de
+concepto} bien realizada. Si algunos eventos que quiere ver no
+aparecen incluidos, copie @file{event-listener.ly} en su carpeta de
+lilypond y modifique el archivo de forma que produzca la información
+que desea.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 104566603d933821fbdbb7696ef0b5bbd3fa0797
+ Translation of GIT committish: c388d94847574943f7766c5fd5f9cdb5ab8128bb
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
instrumentos de varios pentagramas, aunque algunos de ellos no tienen
teclado.
-
@menu
* Notación común para instrumentos de teclado::
* Piano::
métodos descritos en la sección
@rlearning{Arreglar notación con superposiciones}.
-@knownissues
-El mecanismo para evitar las colisiones de barras de corchea no
-funciona para las barras automáticas que terminan justo antes de un
-cambio de pauta. Para hacer que ello funcione, utilice barrado
-manual.
@seealso
Manual de aprendizaje:
@rinternals{Beam},
@rinternals{ContextChange}.
+@knownissues
+El mecanismo para evitar las colisiones de barras de corchea no
+funciona para las barras automáticas que terminan justo antes de un
+cambio de pauta. Para hacer que ello funcione, utilice barrado
+manual.
+
@node Cambiar de pentagrama automáticamente
@unnumberedsubsubsec Cambiar de pentagrama automáticamente
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 5becf12f5ada67346f70ad8cfe68589466619305
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 274c916b48393e0f866cbab68c18a505f6fc7ea3
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 57e3ef0a15d9679cf31de90b2584e9803226d367
+ Translation of GIT committish: 70a015a514dd4af9e9aa7d643f8bbcb1e58c0a70
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@menu
* Comprobación de octava::
* Transposición::
-* Inversion::
-* Retrograde::
-* Modal transformations::
+* Inversión::
+* Retrogradación::
+* Transformaciones modales::
@end menu
usar el modo relativo dentro de música transportada, se debe colocar
otro @code{\relative} dentro de @code{\transpose}.
+No se imprimen alteraciones accidentales triples cuando se usa
+@code{\transpose}. En lugar de ello, se usará una nota @q{equivalente
+enarmónicamente} (p.ej., Re bemol en lugar de Mi triple bemol).
+
@node Inversión
@unnumberedsubsubsec Inversión
@translationof Inversion
Ciertas claves para usos especiales se describen en @ref{Claves de la
música mensural}, @ref{Claves de canto gregoriano}, @ref{Tablaturas
-predeterminadas} y @ref{Tablaturas personalizadas}.
+predeterminadas} y @ref{Tablaturas personalizadas}. Para mezclar
+distintas claves al usar notas guía dentro de una partitura,
+consulte las funciones @code{\cueClef} y @code{\cueDuringWithClef}
+en la sección @ref{Formateo de las notas guía}.
@snippets
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{tweaking-clef-properties.ly}
-
@seealso
Referencia de la notación:
@ref{Claves de la música mensural},
@ref{Claves de canto gregoriano},
@ref{Tablaturas predeterminadas}
-@ref{Tablaturas personalizadas}.
+@ref{Tablaturas personalizadas},
+@ref{Formateo de las notas guía}.
Fragmentos de código:
@rlsr{Pitches}.
Esta regla corresponde a la práctica común del s. XX. Omite algunos
becuadros adicionales, que tradicionalmente se imprimían precediendo a
-las alteraciones que reducen o invierten la dirección de una
-alteración anterior. La regla @code{modern} imprime las mismas
-alteraciones que el estilo @code{default}, con dos excepciones que
+un sostenido que sigue a un doble sostenido, o a un bemol que sigue
+a un doble bemol. La regla @code{modern} imprime las mismas
+alteraciones que el estilo @code{default}, con dos adiciones que
sirven para evitar la ambigüedad: después de alteraciones temporales
se imprimen indicaciones de cancelación también en el compás siguiente
(para notas en la misma octava) y, en el mismo compás, para notas en
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 85fe0f15000f793435221fab2688ba3fa65a028f
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 53390e0570f4544c131e77323cdc4f4ea738bddd
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: d0c8e3162e9d2c0c7195ce8d58e3dd63bf57aca4
+ Translation of GIT committish: 8dec1b16ae6daff5b9a0f9fb806db66cf87bc5bd
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@funindex partcombine
La combinación automática de particellas se usa para mezclar dos
-partes musicales sobre un pentagrama. Tiene como objetivo el
-tipografiado de partituras orquestales. Cuando las dos partes son
-idénticas durante un período de tiempo, sólo se presenta una de ellas.
-En los lugares en que las dos partes son diferentes, se tipografían
-como voces separadas, y las direcciones de las plicas se establecen de
-forma automática. También las partes de solo y @notation{a due}
-quedan identificadas y es posible marcarlas.
+partes musicales distintas sobre un pentagrama. Esto puede ser de
+gran ayuda especialmente al tipografiar partituras orquestales.
+Se imprime una sola voz cuando la música de las dos voces es la misma,
+pero en aquellos lugares en que difieren, se imprime una segunda
+voz. Las direcciones de las plicas se establecen hacia arriba o hacia
+abajo según proceda, al tiempo que se identifican y quedan marcadas
+las partes de solista y de dúo.
-La sintaxis para la combinación de las partes es:
+La sintaxis para la combinación automática de las partes es:
@example
\partcombine @var{expresión_musical_1} @var{expresión_musical_2}
@end example
-El ejemplo siguiente ejemplifica la funcionalidad básica del
-combinador de partes: poner las partes en un solo pentagrama, y
-establecer las direcciones de las plicas y la polifonía. Se utilizan
-las mismas variables para las partes independientes y el pentagrama
-combinado.
+El ejemplo siguiente ejemplifica la funcionalidad básica,
+poniendo las partes en un solo pentagrama en forma polifónica, y
+estableciendo las direcciones de las plicas de forma adecuada.
+Se utilizan las mismas variables para las partes
+independientes y el pentagrama combinado.
@lilypond[quote,verbatim]
instrumentOne = \relative c' {
- c4 d e f
- R1
- d'4 c b a
- b4 g2 f4
- e1
+ c4 d e f |
+ R1 |
+ d'4 c b a |
+ b4 g2 f4 |
+ e1 |
}
instrumentTwo = \relative g' {
- R1
- g4 a b c
- d c b a
- g f( e) d
- e1
+ R1 |
+ g4 a b c |
+ d4 c b a |
+ g4 f( e) d |
+ e1 |
}
<<
>>
@end lilypond
-Las notas del tercer compás aparecen solamente una vez a pesar de que
-se han especificado en las dos partes. Las direcciones de las plicas
+Las dos partes tienen notas idénticas en el tercer compás,
+por lo que aparecen solamente una vez. Las direcciones de las plicas
y ligaduras se establecen de forma automática, según se trate de un
solo o de un unísono. Cuando se necesita en situaciones de polifonía,
-la primera parte (que recibe el nombre de contexto @code{one}) siempre
+la primera parte (que recibe el nombre de contexto @code{one})
recibe las plicas hacia arriba, mientras que la segunda (llamada
@code{two}) siempre recibe las plicas hacia abajo. En los fragmentos
de solo, las partes se marcan con @qq{Solo} y @qq{Solo II},
respectivamente. Las partes en unísono (@notation{a due}) se marcan
-con el texto predeterminado @qq{a2}.
+con el texto @qq{a2}.
Los dos argumentos de @code{\partcombine} se interpretan como
-contextos de @rinternals{Voice}. Si se están usando octavas
-relativas, se debe especificar @code{\relative} para ambas expresiones
-musicales, es decir:
+contextos de @rinternals{Voice} separados, por lo que si la música
+está escrita en modo relativo, entonces @emph{las dos} partes han
+de incluir la función @code{\relative}, es decir:
@example
\partcombine
@code{\partcombine} no tiene ningún efecto sobre las notas de
@code{@var{expresión_musical_1}} y @code{@var{expresión_musical_2}}.
+@funindex \partcombineChords
+@funindex partcombineChords
+@funindex \partcombineApart
+@funindex partcombineApart
+@funindex \partcombineUnisono
+@funindex partcombineUnisono
+@funindex \partcombineSoloI
+@funindex partcombineSoloI
+@funindex \partcombineSoloII
+@funindex partcombineSoloII
+@funindex \partcombineAutomatic
+@funindex partcombineAutomatic
+
En las partituras profesionales, las voces con frecuencia se mantienen
-separadas durante períodos prolongados, incluso si una o dos notas
-llegan a coincidir y podrían escribirse fácilmente como un
+separadas entre sí durante pasajes prolongados incluso si algunas
+notas coninciden entre ambas, y podrían escribirse fácilmente como un
unísono. Por ello, la combinación de las notas en un acorde, o mostrar
una voz como solo, no son soluciones ideales porque la función
-@code{\partcombine} considera cada nota de forma separada. Por este
-motivo, el resultado de la función @code{\partcombine} alterar o
-corregir con las instrucciones siguientes:
+@code{\partcombine} considera cada nota de forma individual. En este
+caso, el resultado de la función @code{\partcombine} se puede
+alterar o corregir con las instrucciones siguientes:
+
+Las instrucciones que finalizan en @code{...Once} se aplican
+exclusivamente a la nota siguiente dentro de la expresión musical.
@itemize
@item
-@code{\partcombineApart}, @code{\partcombineApartOnce}:
-Mantener las notas como dos voces separadas incluso si se pueden
+@code{\partcombineApart} y @code{\partcombineApartOnce}
+mantienen las notas como dos voces separadas incluso si se pueden
combinar en un acorde o unísono.
@item
-@code{\partcombineChords}, @code{\partcombineChordsOnce}:
-Combinar las notas en un acorde.
+@code{\partcombineChords} y @code{\partcombineChordsOnce}
+combinan las notas en un acorde.
@item
-@code{\partcombineUnisono}, @code{\partcombineUnisonoOnce}:
-Las dos voces forman unísono.
+@code{\partcombineUnisono} y @code{\partcombineUnisonoOnce}
+combinan las dos voces como unísono y marcan el resultado
+como @qq{unison}.
@item
-@code{\partcombineSoloI}, @code{\partcombineSoloIOnce}:
-Mostrar solo la voz uno y marcarla como solo.
+@code{\partcombineSoloI} y @code{\partcombineSoloIOnce}
+muestran solo la voz uno y la marcan como @qq{Solo}.
@item
-@code{\partcombineSoloII}, @code{\partcombineSoloIIOnce}:
-Mostrar solo la voz dos y marcarla como solo.
+@code{\partcombineSoloII} o @code{\partcombineSoloIIOnce}
+imprimen solo la voz dos y la marcan como @qq{Solo}.
@item
-@code{\partcombineAutomatic}, @code{\partcombineAutomaticOnce}:
-Terminar el efecto de las instrucciones especiales anteriores y volver
-al mecanismo predeterminado de combinación de partes.
+@code{\partcombineAutomatic} y @code{\partcombineAutomaticOnce}
+terminan el efecto de las instrucciones anteriores y retornan a la
+funcionalidad estándar de @code{\partcombine}.
@end itemize
-Todas las instrucciones que finalizan en @code{...Once} se aplican
-exclusivamente a la nota siguiente.
-
@lilypond[quote,verbatim]
instrumentOne = \relative c' {
\partcombineApart c2^"apart" e |
- \partcombineAutomatic e^"auto" e |
- \partcombineChords e'^"chord" e |
- \partcombineAutomatic c^"auto" c |
- \partcombineApart c^"apart" \partcombineChordsOnce e^"chord once" |
- c c |
+ \partcombineAutomatic e2^"auto" e |
+ \partcombineChords e'2^"chord" e |
+ \partcombineAutomatic c2^"auto" c |
+ \partcombineApart c2^"apart" \partcombineChordsOnce e^"chord once" |
+ c2 c |
}
instrumentTwo = \relative c' {
c2 c |
@knownissues
-@code{\partcombine} sólo admite dos voces.
-
-Si @code{printPartCombineTexts} está establecido, cuando las dos voces
-tocan y terminan las mismas notas, el combinador de partes puede
-tipografiar @code{a2} más de una vez en el mismo compás.
-
-@code{\partcombine} no puede estar dentro de @code{\times}.
-
-@code{\partcombine} no puede estar dentro de @code{\relative}.
-
-Internamente, el @code{\partcombine} interpreta los dos argumentos
-como @code{Voice}s y decide cuándo se pueden combinar las dos partes.
-Cuando tienen distintas duraciones, no se combinan y reciben los
-nombres @code{one} y @code{two}. Como consecuencia, si los argumentos
-cambian a contextos de @rinternals{Voice} con nombres diferentes, los
-eventos que contienen se ignorarán. De forma similar, la combinación
-de partes no está pensada para que funcione con la letra de las
-canciones; cuando una de las voces recibe un nombre explícito con el
-objeto de adjuntarle una letra, la combinación de partes deja de
-funcionar.
+Toas las funciones @code{\partcombine} admiten exclusivamente dos voces
+y no están diseñadas para funcionar con la letra de las canciones;
+de manera que cuando una de las voces recibe explícitamente un
+nombre para aplicarle una letra, el combinador de partes
+deja de funcionar.
+
+Las funciones @code{\partcombine...} no se pueden escribir dentro
+de los bloques @code{\times} ni @code{\relative}.
+
+Si @code{printPartCombineTexts} está establecido y las dos voces
+tocan y terminan las mismas notas en el mismo compás,
+el combinador de partes puede tipografiar @code{a2} más de una vez
+en ese compás.
+
+@code{\partcombine} solo tiene en cuenta el momento de inicio de las
+notas dentro de una voz @code{Voice}; por ejemplo, no puede recordar
+si una nota dentro de una voz ya ha comenzado cuando las notas que se
+combinan se han iniciado justo ahora en la otra voz. Esto puede
+conducir a cierto número de problemas inesperados entre los que se
+incluye la impresión incorrecta de marcas de @qq{Solo} o de
+@qq{Unison}.
+
+@code{\partcombine} conserva todos los elementos extensos (ligaduras,
+reguladores, etc.) dentro del mismo contexto @code{Voice} de forma que
+si uno cualquiera de estos elementos extensos inicia o termina en un
+contexto @code{Voice} diferente, puede no imprimirse o hacerlo
+incorrectamente.
+
+Si la función @code{\partcombine} no puede combinar las dos
+expresiones musicales (es decir, cuando las dos voces tienen
+duraciones distintas), otorgará internamente sus propios nombres a las
+voces: @code{one} y @code{two} respectivamente. Esto significa que si
+se produce un cambio a un contexto @code{Voice} que tenga un nombre
+distinto, se ignorarán los eventos dentro del contexto @code{Voice}
+que tiene el nombre distinto.
+
+Consulte también el apartado @emph{Advertencias y problemas conocidos}
+en la sección @ref{Tablaturas predeterminadas} al utilizar
+@code{\partcombine} con tablaturas, y la @emph{Nota} de
+@ref{Barras automáticas} al utilizar barrado automático.
-@code{\partcombine} observa solamente los tiempos de ataque de las
-notas. No puede determinar si una nota iniciada previamente está
-sonando o no, lo que origina diversos problemas.
@node Escribir música en paralelo
@unnumberedsubsubsec Escribir música en paralelo
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 5e9d7b07e1da12e32ae7be0253b22cb28cf2fe58
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@code{\paper} variables que se ocupan de la disposición de la página
se estudian en secciones posteriores. Las definiciones de elementos
de marcado que se encargan de los encabezamientos, pies y títulos se
-estudian en @ref{Encabezamientos pies y títulos personalizados}.
+estudian en @ref{Cabeceras pies y títulos personalizados}.
Casi todas las variables de @code{\paper} funcionan solamente dentro
de un bloque @code{\paper}. Las pocas que funcionan también en un
@seealso
Referencia de la notación:
@ref{Tamaño del papel y escalado automático},
-@ref{Encabezamientos pies y títulos personalizados},
+@ref{Cabeceras pies y títulos personalizados},
@ref{El bloque \layout}.
Archivos instalados:
una página en blanco en el reverso de la página de cubierta
de manera que la página 1 esté en el lado derecho.
+
@node Variables de \paper diversas
@unnumberedsubsubsec Variables de @code{\paper} diversas
@translationof Miscellaneous \paper variables
* Propiedades de espaciado dentro de los sistemas::
* Espaciado de pautas no agrupadas::
* Espaciado de pautas agrupadas::
+* Espaciado de las líneas que no son pautas::
@end menu
@rinternals{StaffGrouper}.
+@node Espaciado de las líneas que no son pautas
@unnumberedsubsubsec Espaciado de las líneas que no son pautas
+@translationof Spacing of non-staff lines
Las @emph{Líneas que no son pautas} (tales como @code{Lyrics},
@code{ChordNames}, etc.) son contextos cuyos objetos de presentación
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 8656e359d629aed6990bb8d8d3da8eac2d2c311e
+ Translation of GIT committish: 40b0e2041fc67f6dca2b2d70717ac424919e89f7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@unnumberedsubsubsec Citar otras voces
@translationof Quoting other voices
-@cindex guías
+@cindex guía, voces
@cindex citar otras voces
-@cindex fragmentos
+@cindex fragmentos, citar
@cindex notas guía
@funindex \addQuote
@funindex \transposition
@funindex transposition
-Es muy frecuente que una voz duplique música de otra voz. Por
-ejemplo, los violines primero y segundo pueden tocar las mismas notas
-durante un pasaje musical. En LilyPond esto se hace dejando que una
-voz @emph{cite} a la otra, sin tener que volverla a introducir.
+Es muy frecuente que una voz use las mismas notas que otra voz. Por
+ejemplo, los violines primero y segundo tocando la misma frase durante
+un determinado pasaje musical. Esto se hace dejando que una voz
+@emph{cite} a la otra, sin tener que volver a introducir la música
+para la segunda voz.
-Antes de que una voz pueda citarse, se debe usar la instrucción
-@code{\addQuote} para iniciar el fragmento citado. Esta instrucción
-se debe usar en el ámbito del nivel más alto. El primer argumento es
-una cadena identificativa, y el segundo es una expresión musical:
-
-@example
-flute = \relative c'' @{
- a4 gis g gis
-@}
-\addQuote "flute" @{ \flute @}
-@end example
+La instrucción @code{\addQuote}, utilizada en el ámbito del nivel
+sintáctico superior, define un flujo de música desde el que es posible
+citar fragmentos.
La instrucción @code{\quoteDuring} se usa para indicar el punto en que
-comienza la cita. va seguido por dos argumentos: el nombre de la voz
+comienza la cita. Va seguida por dos argumentos: el nombre de la voz
citada, tal y como se definió con @code{\addQuote}, y una expresión
-musical que indica la duración de la cita, normalmente silencios de
-separación o silencios multicompás. La música correspondiente
-(incluidas todas las articulaciones,
-matices, elementos de marcado, etc.) de la
-voz citada se inserta dentro de la expresión musical:
+musical que indica la duración de la cita.
@lilypond[verbatim,quote]
-flute = \relative c'' {
- a4 gis g->\f gis^\markup{quoted}
+fluteNotes = \relative c'' {
+ a4 gis g gis | b4^"quoted" r8 ais\p a4( f)
}
-\addQuote "flute" { \flute }
-\relative c' {
- c4 cis \quoteDuring #"flute" { s2 }
+oboeNotes = \relative c'' {
+ c4 cis c b \quoteDuring #"flute" { s1 }
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\score {
+ <<
+ \new Staff \with { instrumentName = "Flute" } \fluteNotes
+ \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+ >>
}
@end lilypond
ser deseable:
@lilypond[verbatim,quote]
-flute = \relative c'' {
- a4 gis g gis
+fluteNotes = \relative c'' {
+ a4 gis g gis | b4^"quoted" r8 ais\p a4( f)
}
-\addQuote "flute" { \flute }
-\relative c' {
- c4 cis \quoteDuring #"flute" { c4 b }
+oboeNotes = \relative c'' {
+ c4 cis c b \quoteDuring #"flute" { e4 r8 ais b4 a }
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\score {
+ <<
+ \new Staff \with { instrumentName = "Flute" } \fluteNotes
+ \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+ >>
}
@end lilypond
-Las citas reconocen los ajustes de transposición de los instrumentos
-tanto para la fuente como para los instrumentos de destino si se
-utiliza la instrucción @code{\transposition}. Para ver más detalles
-sobre @code{\transposition}, consulte @ref{Transposición de los instrumentos}.
+La instrucción @code{\quoteDuring} usa los ajustes de
+@code{\transposition} tanto de la parte citada como de la que cita,
+para producir notas que tienen la misma altura de sonido en la parte
+que cita y en las de la parte citada.
@lilypond[verbatim,quote]
-clarinet = \relative c'' {
+clarinetNotes = \relative c'' {
\transposition bes
- a4 gis g gis
+ \key d \major
+ b4 ais a ais | cis4^"quoted" r8 bis\p b4( f)
}
-\addQuote "clarinet" { \clarinet }
-\relative c' {
- c4 cis \quoteDuring #"clarinet" { s2 }
+oboeNotes = \relative c'' {
+ c4 cis c b \quoteDuring #"clarinet" { s1 }
}
-@end lilypond
-
-Es posible etiquetar las citas con nombres exclusivos para poder
-procesarlas de diferentes maneras. Para ver más detalles sobre este
-procedimiento, consulte @ref{Uso de etiquetas}.
-También es posible ajustar qué objetos de la voz original se citan
-mediante la modificación de la propiedad @code{quotedEventTypes}. De
-forma predeterminada, su valor es @code{#'(StreamEvent)}, lo que
-significa que todo se cita. Su establecimiento a,
-p.ej. @code{#'(note-event rest-event tie-event)} provoca que LilyPond
-cite solamente las notas, silencios y ligaduras de unión, pero no las
-articulaciones, los elementos de marcado ni los matices dinámicos.
+\addQuote "clarinet" { \clarinetNotes }
-@lilypond[verbatim,quote]
-clarinet = \relative c'' {
- a4 gis g->\f gis^\markup{quoted}
-}
-\addQuote "clarinet" { \clarinet }
-\relative c' {
- \set Score.quotedEventTypes = #'(note-event rest-event tie-event)
- c4 cis \quoteDuring #"clarinet" { s2 }
+\score {
+ <<
+ \new Staff \with { instrumentName = "Clarinet" } \clarinetNotes
+ \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+ >>
}
@end lilypond
-@snippets
-
-@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
-{quoting-another-voice-with-transposition.ly}
-
@cindex note-event
@cindex articulation-event
@cindex dynamic-event
@cindex rest-event
+@cindex slur-event
+@cindex crescendo-event
@funindex quotedEventTypes
@funindex quotedCueEventTypes
-@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
-{quoting-another-voice.ly}
+De forma predeterminada, la música citada incluye todas las
+articulaciones, matices dinámicos, elementos de marcado, etc. de la
+expresión citada. Es posible elegir cuáles de estos objetos de la
+música que se cita se imprimen, mediante la propiedad de contexto
+@code{quotedEventTypes}.
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+ a2 g2 |
+ b4\<^"quoted" r8 ais a4\f( c->)
+ }
+
+oboeNotes = \relative c'' {
+ c2. b4 |
+ \quoteDuring #"flute" { s1 }
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\score {
+ <<
+ \set Score.quotedEventTypes = #'(note-event articulation-event
+ crescendo-event rest-event
+ slur-event dynamic-event)
+ \new Staff \with { instrumentName = "Flute" } \fluteNotes
+ \new Staff \with { instrumentName = "Oboe" } \oboeNotes
+ >>
+ }
+@end lilypond
+
+Las citas también se pueden etiquetar, véase @ref{Uso de etiquetas}.
@seealso
Referencia de la notación:
@rlsr{Staff notation}.
Referencia de funcionamiento interno:
+@rinternals{Music classes},
@rinternals{QuoteMusic},
@rinternals{Voice}.
+Archivos de inicio:
+@file{scm/define-event-classes.scm}.
-@knownissues
+@knownissues
Sólo el contenido de la primera voz de una instrucción
-@code{\addQuote} se tiene en cuenta para la cita, de manera que la
-música no puede contener enunciados @code{\new} ni @code{\context
-Voice} que cambiarían a una voz distinta.
-
-La cita de notas de adorno no es funcional e incluso puede hacer que
-LilyPond termine de forma abrupta.
-
-La cita de unos tresillos dentro de otros puede dar como resultado una
+@code{\addQuote} se tiene en cuenta para la cita, de manera que
+la expresión musical no puede contener enunciados @code{\new}
+ni @code{\contextVoice} que cambiarían a una voz distinta.
+La cita de notas de adorno no está contemplada y puede hacer que
+LilyPond termine de forma abrupta; la cita de unos tresillos
+dentro de otros puede dar como resultado una
notación de pobre calidad.
-En anteriores versiones LilyPond (antes de la 2.11), @code{addQuote}
-se escribía completamente en minúsculas: @code{\addquote}.
-
@node Formateo de las notas guía
@unnumberedsubsubsec Formateo de las notas guía
@cindex guía, notas, formato de
@cindex fragmentos
@cindex citar otras voces
+@cindex voces, citar
+
@funindex \cueDuring
@funindex cueDuring
+@funindex \cueClef
+@funindex cueClef
+@funindex \cueDuringWithClef
+@funindex cueDuringWithClef
@funindex \quoteDuring
@funindex quoteDuring
-La sección anterior explica la forma de crear citas. La instrucción
-@code{\cueDuring} es una forma más especializada de
-@code{\quoteDuring}, que es especialmente útil para insertar notas
-guía en una particella. La sintaxis es como sigue:
+@cindex notas pequeñas
+@cindex pequeñas, notas
+@cindex CueVoice
+
+La manera más sencilla de dar formato a las notas guía es crear
+explícitamente un contexto @code{CueVoice} dentro de la parte.
+
+@lilypond[verbatim,relative=1]
+R1
+<<
+ { e2\rest r4. e8 }
+ \new CueVoice {
+ \stemUp d'8^"flute" c d e fis2
+ }
+>>
+d,4 r a r
+@end lilypond
+
+La instrucción @code{\cueClef} puede usarse también con un contexto
+@code{CueVoice} explícito si se requiere un cambio de clave, e
+imprimirá una clave del tamaño adecuado para las notas guía. Después
+puede utilizarse la instrucción @code{\cueClefUnset} para volver a la
+clave original, de nuevo con un signo de clave del tamaño adecuado.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+<<
+ { e2\rest r4. \cueClefUnset e,8 }
+ \new CueVoice {
+ \cueClef "treble" \stemUp d''8^"flute" c d e fis2
+ }
+>>
+d,,4 r a r
+@end lilypond
+
+Las instrucciones @code{\cueClef} y @code{\cueClefUnset} se pueden
+usar también sin un @code{CueVoice} si es necesario.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+\cueClef "treble"
+d'8^"flute" c d e fis2
+\cueClefUnset
+d,,4 r a r
+@end lilypond
+
+En casos de colocación de mayor complejidad de notas guía, por ejemplo
+con transposición o insertando notas guía procedentes de más de una
+fuente, pueden usarse las instrucciones @code{\cueDuring} o
+@code{\cueDuringWithClef}. Son una forma más especializada de
+@code{\quoteDuring}, véase @ref{Citar otras voces} en la sección
+anterior.
+
+La sintaxis es:
+
+@example
+\cueDuring #@var{nombre_de_la_cita} #@var{dirección} #@var{música}
+@end example
+
+y
@example
-\cueDuring #@var{nombre_de_la_parte} #@var{voz} @var{música}
+\cueDuringWithClef #@var{nombre_de_la_cita} #@var{dirección} #@var{clave} #@var{música}
@end example
-Esta instrucción copia sólo las notas y los silencios de los compases
-correspondientes a partir de @code{@var{nombre_de_la_parte}} dentro de
-un contexto @code{CueVoice} de voz guía. La voz guía @code{CueVoice}
-se crea implícitamente, y se produce simultáneamente con
-@code{@var{música}}, lo que crea una situación polifónica. El
-argumento @code{@var{voz}} determina si la notación de las notas guía
-debe ser como primera o como segunda voz; @code{UP} (arriba)
-corresponde a la primera voz, y @code{DOWN} (abajo) corresponde a la
-segunda.
+La música procedente de los compases correspondientes del elemento
+@code{@var{nombre_de_la_cita}} se añade como un contexto
+@code{CueVoice} y ocurre simultáneamente con la @code{@var{música}},
+lo que produce una situación polifónica. La @code{@var{dirección}}
+toma un argumento @code{UP} (arriba) o @code{DOWN} (abajo), y
+corresponde a las voces primera y segunda, respectivamente,
+determinando cómo se imprimen las notas guía en relación a la otra
+voz.
@lilypond[verbatim,quote]
-oboe = \relative c'' {
- r2 r8 d16(\f f e g f a)
- g8 g16 g g2.
+fluteNotes = \relative c'' {
+ r2. c4 | d8 c d e fis2 | g2 d |
}
-\addQuote "oboe" { \oboe }
-\new Voice \relative c'' {
- \cueDuring #"oboe" #UP { R1 }
+oboeNotes = \relative c'' {
+ R1
+ s1*0^\markup { \tiny "flute" }
+ \cueDuring #"flute" #UP { R1 }
g2 c,
}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+ \oboeNotes
+}
@end lilypond
@noindent
etc.
@lilypond[verbatim,quote]
-oboe = \relative c'' {
+oboeNotes = \relative c'' {
r2 r8 d16(\f f e g f a)
g8 g16 g g2.
}
-\addQuote "oboe" { \oboe }
+\addQuote "oboe" { \oboeNotes }
\new Voice \relative c'' {
\set Score.quotedCueEventTypes = #'(note-event rest-event tie-event
Se pueden usar elementos de marcado para imprimir el nombre del
instrumento citado. También, si las notas guía requieren un cambio de
-clave, la clave original se debe restaurar al final de las notas guía.
+clave, puede hacerse manualmente pero la clave original se debe
+restaurar al final de las notas guía.
@lilypond[verbatim,quote]
-flute = \relative c'' {
+fluteNotes = \relative c'' {
r2. c4 d8 c d e fis2 g2 d2
}
-bassoon = \relative c {
+
+bassoonNotes = \relative c {
\clef bass
R1
\clef treble
\clef bass
g4. b8 d2
}
-\addQuote "flute" { \flute }
+
+\addQuote "flute" { \fluteNotes }
+
\new Staff {
- \bassoon
+ \bassoonNotes
}
@end lilypond
-@cindex quitar notas guía
-@cindex notas guía, quitar
-
-@funindex \killCues
-@funindex killCues
-
-La instrucción @code{\killCues} quita las notas guía de una expresión
-musical, de manera que la misma expresión musical se puede usar para
-producir la particella instrumental con notas guía y la partitura. La
-instrucción @code{\killCues} elimina solo las notas y eventos que
-fueron citados por parte de @code{\cueDuring}. Otros elementos de
-marcado asociados con las citas, como los cambios de clave y una
-etiqueta que identifique el instrumento fuente, se pueden etiquetar
-para su inclusión selectiva dentro de la partitura; véase
-@ref{Uso de etiquetas}.
+De forma alternativa, puede usarse la función
+@code{\cueDuringWithClef} en su lugar. Esta instrucción admite un
+argumento adicional para especificar el cambio de clabe que se
+necesita imprimir para las notas guía, pero después imprime
+automáticamente la clave original una vez que ha finalizado la serie
+de notas guía.
@lilypond[verbatim,quote]
-flute = \relative c'' {
+fluteNotes = \relative c'' {
r2. c4 d8 c d e fis2 g2 d2
}
-bassoon = \relative c {
+
+bassoonNotes = \relative c {
\clef bass
R1
- \tag #'part {
- \clef treble
- s1*0^\markup { \tiny "flute" }
- }
- \cueDuring #"flute" #UP { R1 }
- \tag #'part \clef bass
+ s1*0^\markup { \tiny "flute" }
+ \cueDuringWithClef #"flute" #UP #"treble" { R1 }
g4. b8 d2
}
-\addQuote "flute" { \flute }
+
+\addQuote "flute" { \fluteNotes }
\new Staff {
- \bassoon
+ \bassoonNotes
}
-\new StaffGroup <<
- \new Staff {
- \flute
- }
- \new Staff {
- \removeWithTag #'part { \killCues { \bassoon } }
- }
->>
@end lilypond
-De forma alternativa, los cambios de clave y las etiquetas de
-instrumentos se pueden recoger dentro de una definición de instrumento
-para su uso repetido, utilizando la instrucción
-@code{\addInstrumentDefinition} descrita en
-@ref{Nombres de instrumentos}.
-
@funindex \transposedCueDuring
@funindex transposedCueDuring
completamente diferente.
@lilypond[verbatim,quote]
-piccolo = \relative c''' {
+piccoloNotes = \relative c''' {
\clef "treble^8"
R1
c8 c c e g2
c4 g g2
}
-bassClarinet = \relative c' {
+
+bassClarinetNotes = \relative c' {
\key d \major
\transposition bes,
d4 r a r
d4 r a r
}
-\addQuote "piccolo" { \piccolo }
+\addQuote "piccolo" { \piccoloNotes }
<<
- \new Staff \piccolo
- \new Staff \bassClarinet
+ \new Staff \piccoloNotes
+ \new Staff \bassClarinetNotes
>>
@end lilypond
-@cindex notas más pequeñas
-@cindex pequeñas, notas más
+@cindex removing cue notes
+@cindex cue notes, removing
-Se puede crear un contexto de @code{CueVoice} explícitamente si se
-necesitan notas de un tamaño menor, por ejemplo para establecer una
-secuencia alternativa de notas más apropiada para una voz más aguda o
-más grave.
+@funindex \killCues
+@funindex killCues
+@funindex \addInstrumentDefinition
+@funindex addInstrumentDefinition
-@lilypond[verbatim,relative=2]
-\time 12/8
-\key ees \major
-g4 ees8 f4 g8
-\stemDown
-<<
- { d4. bes4 c8 }
- \new CueVoice
- { g'4. f4 ees8 }
+La instrucción @code{\killCues} elimina las notas guía de una
+expresión musical, de forma que la misma expresión musical pueda
+utilizarse para producir la particella instrumental (con notas guía) y
+la partitura de conjunto. La instrucción @code{\killCues} elimina
+solamente las notas y eventos que se han citado mediante
+@code{\cueDuring}. Otros elementos de marcado asociados con las
+guías, como los cambios de clave o una etiqueta identificativa del
+instrumento fuente, pueden marcarse para su inclusión selectiva dentro
+de la partitura; véase @ref{Uso de etiquetas}.
+
+@lilypond[verbatim,quote]
+fluteNotes = \relative c'' {
+ r2. c4 d8 c d e fis2 g2 d2
+}
+
+bassoonNotes = \relative c {
+ \clef bass
+ R1
+ \tag #'part {
+ \clef treble
+ s1*0^\markup { \tiny "flute" }
+ }
+ \cueDuring #"flute" #UP { R1 }
+ \tag #'part \clef bass
+ g4. b8 d2
+}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+ \bassoonNotes
+}
+
+\new StaffGroup <<
+ \new Staff {
+ \fluteNotes
+ }
+ \new Staff {
+ \removeWithTag #'part { \killCues { \bassoonNotes } }
+ }
>>
-\stemUp
-d2. d2.
@end lilypond
+Como alternativa, los cambios de clave y los letreros de instrumento
+se pueden recolectar dentro de una definición de instrumento para su
+uso repetido, utilizando @code{\addInstrumentDefinition} que se
+descibe en @ref{Nombres de instrumentos}.
+
@seealso
Referencia de la notación:
+@ref{Citar otras voces},
@ref{Transposición de los instrumentos},
@ref{Nombres de instrumentos},
+@ref{Clave},
@ref{Guías musicales},
@ref{Uso de etiquetas}.
Pueden ocurrir colisiones con los silencios si se usa
@code{\cueDuring}, entre los contextos de @code{Voice} y de
-@code{CueVoice}.
+@code{CueVoice}. Al usar @code{\cueDuringWithClef} o
+@code{\transposedCueDuring} el argumento adicional requerido para cada
+caso debe ir después de la cita y de la dirección.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 53db923e715126eb9463220526b4838fbfd3dad4
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: a3cb316f14549de435c809a3b5cd11e7746a7a01
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Referencia de la notación:
@ref{Duración automática de las sílabas},
@ref{Tipografías},
-@ref{Foramtear el texto},
+@ref{Formatear el texto},
@ref{Modos de entrada},
@ref{Duración manual de las sílabas},
@ref{Codificación del texto}.
@seealso
Referencia de la notación:
-@ref{Chord notation}.
+@ref{Notación de acordes}.
@node Música coral
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: cc821da6e50c63beadf205719c72433460770a26
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@seealso
Referencia de la notación:
-@ref{Note names in other languages},
+@ref{Nombres de las notas en otros idiomas},
@ref{Notación común para músicas no occidentales}.
Fragmentos de código:
<!--
- Translation of GIT committish: d4db4930cfb89a8d2f4bfa36e99e81710fa09caa
+ Translation of GIT committish: db084d94d56b4bc5dd51fee39410320c95eb4e50
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.12 '
+ onSubmit="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.12 '
+ onMouseMove="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.12 '
+ onKeyUp="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Búsqueda en Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Buscar">
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los símbolos específicos de acordeón discanto se escriben mediante
@code{\\markup}. Se puede trucar la colocación vertical de los
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Añadir un ámbito por voz"
texidoces = "
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al añadir un pentagrama nuevo en un salto de línea, por desgracia
se añade un espacio adicional al final de la línea antes del salto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede añadir (posiblemente de forma temporal) un pentagrama
nuevo una vez que la pieza ha comenzado.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para añadir indicaciones de línea divisoria dentro del contexto de
los nombres de acorde @code{ChordNames}, incluya el grabador
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La sintaxis de LilyPond puede implicar muchas colocaciones poco
comunes para los paréntesis, corchetes, etc, que a veces se tienen
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Mediante la utilización de las potentes herramientas preconfiguradas
como la función @code{\\drummode} y el contexto @code{DrumStaff}, la
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para añadir digitaciones a las tablaturas, utilice una combinación de
@code{\\markup} y @code{\\finger}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo muestra una forma de simplificar la adición de muchas
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La función @code{\\parenthesize} es un truco especial que encierra
objetos entre paréntesis. El grob asociado es @code{ParenthesesItem}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Con algo de código de Scheme, se puede añadir fácilmente la fecha
actual a una partitura.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El grabador @code{Volta_engraver} reside de forma predeterminada
dentro del contexto de @code{Score}, y los corchetes de la repetición
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Voces adicionales para evitar colisiones"
texidoces = "
En ciertos casos de polifonía compleja, se necesitan voces adicionales
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede ajustar la separación entre las notas de adorno utilizando la
propiedad @code{spacing-increment} de @code{Score.GraceSpacing}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Puede ser necesario trucar la propiedad
@code{shortest-duration-space} para poder ajustar el tamaño de las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad @code{Staff.InstrumentName
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los números de compás se alinean de forma predeterminada por la
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si están especificadas, las marcas de texto se pueden alinear con
objetos de notación distintos a las líneas divisorias. Entre estos
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las cifras de digitación orientadas verticalmente se colocan de forma
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede variar la longitud de las plicas de las figuras unidas por
una barra mediante la sobreescritura de la propiedad
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Ámbitos con varias voces"
texidoces = "
La adición del grabador @code{Ambitus_engraver} al contexto de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada se añaden corchetes de análisis sencillos
debajo del pentagrama. El ejemplo siguiente muestra una manera de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aquí se muestran muchos de (¿o quizá todos?) los símbolos que
están contemplados por la capacidad de LilyPond para la música
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al transcribir música mensural, es útil un «incipit» al compienzo
de la pieza para indicar la tonalidad y el tempo
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las indicaciones de compás también se pueden grabar en estilo antiguo.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
texidoces = "
La propiedad @code{shapeNoteStyles} se puede usar para definir varios
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para las improvisaciones o @emph{taqasim} que son libres durante unos
momentos, se puede omitir la indicación de compás y se puede usar
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede hacer que una ligadura de expresión sea asimétrica para
adaptarse mejor a un patrón asimétrico de notas.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden subdividir las barras automáticamente. Estableciendo la
propiedad @code{subdivideBeams}, las barras se subdividen en
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las reglas de final de barra especificadas en el contexto
@code{Score} se aplican a todos los pentagramas, pero se pueden
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
No está especificada ninguna agrupación predeterminada automática
de las barras para el compás de 7/8, de forma que si se requieren
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Normalmente están prohibidos los saltos de línea si las barras
atraviesan las líneas divisorias. Se puede cambiar este
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La instrucción @code{\\whiteout} intercala un rectángulo blanco
debajo de un elemento de marcado. Este rectángulo blanco no tapa
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para hacer invisibles partes de un regulador de crescendo, se usa
el método de dibujar un rectángulo blanco encima de la parte
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A veces se denota una «cesura» mediante una doble marca de respiración
parecida a las vías del tren, con un calderón encima. Este fragmento
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo proporciona una función para tipografiar un regulador con
texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para hacer más pequeño el círculo de @code{\\flageolet} (armónico)
utilice la siguiente función de Scheme.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden modificar notas individuales de un acorde con la instrucción
@code{\\tweak}, alterando la propiedad @code{font-size}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se insertan automáticamente barras en ángulo cuando se detecta un
intervalo muy grande entre las notas. Se puede hacer un ajuste
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede establecer el separador entre las distintas partes del
nombre de un acorde para que sea cualquier elemento de marcado.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Cambiar la forma de los silencios multicompás"
texidoces = "
Si hay diez compases de silencio o menos, se imprime en el pentagrama
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al producir una salida MIDI, el comportamiento predeterminado es que
cada pentagrama representa un canal MIDI, con todas las voces de dicho
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al utilizar la posibilidad de combinación automática de partes, se
puede modificar el texto que se imprime para las secciones de solo
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede modificar el texto empleado para los crescendos y
decrescendos modificando las propiedades de contexto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Es posible ajustar la separación en las indicaciones de tesitura.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede cambiar el aspecto de las ligaduras de expresión de
continuas a punteadas o intermitentes.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El glifo de la marca de respiración se puede ajustar
sobreescribiendo la propiedad de texto del objeto de presentación
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La nomenclatura inglesa (predeterminada) para los acordes del cifrado
americano se puede cambiar por la alemana (@code{\\germanChords}
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este código muestra cómo cambiar la cantidad de puntillos de una nota.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las alteraciones y los signos «más» pueden aparecer antes o
después de los números, según el valor de las propiedades
-%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar @code{Staff.pedalSustainStrings} para fijar el texto de
las indicaciones de pisar pedal y levantar pedal. Observe que las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La instrucción @code{\\time} establece las propiedades
@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Cambiar el número del grupo especial"
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La propiedad @code{measureLength}, junto con
@code{measurePosition}, determina cuándo es necesario dibujar una
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este tipo de notación se utiliza para el canto de los Salmos, en
que las estrofas no siempre tienen la misma longitud.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los deslizamientos para acordes se pueden indicar tanto en el contexto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar la propiedad @code{chordNameExceptions} para
almacenar una lista de notaciones espaciales para acordes
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La presentación del acorde de séptima mayor se
puede ajustar mediante majorSevenSymbol.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede hacer que los diagramas de posiciones se muestren sólo
cuando el acorde cambia o al comienzo de una nueva línea.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este código muestra cómo recortar (extraer) fragmentos a partir de una
partitura completa.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Ciertas indicaciones dinámicas pueden llevar textos (como @qq{più
forte} o @qq{piano subito}). Se pueden producir usando un bloque
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La herramienta de combinación de partes (instrucción
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Indicaciones de compases compuestos"
texidoces = "
Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La agrupación de pulsos dentro de un compás está controlada por la
propiedad de contexto @code{beatStructure}. Hay establecidos valores
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede tipografiar un gissando contemporáneo sin nota final
utilizando una nota oculta y temporalización de cadenza.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La visibilidad de los objetos de extensión que acaban en la primera
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El orden vertical que ocupan las inscripciones gráficas está
controlado con la propiedad @code{'script-priority}. Cuanto más
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El comportamiento predeterminado de la visibilidad de los corchetes de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La creación de un grupeto circular de anticipación entre dos notas,
donde la nota inferior del grupeto utiliza una alteración, requiere
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En una música que tenga muchas apariciones de la
misma secuencia de notas a distintas alturas, podría ser de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede trazar un símbolo de arpegio entre notas de distintas
voces que están sobre el mismo pentagrama si el grabador
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás @code{Bar_number_engraver}
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Dentro de un @code{PianoStaff}, es posible hacer que un arpegio
cruce entre los pentagramas ajustando la propiedad
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden crear arpegios que se cruzan entre pentagramas dentro de
contextos distintos a @code{GrandStaff}, @code{PianoStaff} y
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden crear indicaciones metronómicas nuevas en modo de
marcado, pero no cambian el tempo en la salida MIDI.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aunque la manera más fácil de añadir paréntesis a una indicación
de dinámica es utilizar un bloque @code{\\markup}, este método
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En determinadas situaciones es necesario crear ligaduras de
expresión entre notas que están en voces distintas.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan}
permiten la creación de elementos de extensión textuales tan
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden tipografiar «custos» en diferentes estilos.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones de acordes por medio de @code{'fret-diagram-details}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones a través de @code{'fret-diagram-details}. Para los
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La dirección predeterminada de las plicas sobre la tercera línea
del pentagrama está determinada por la propiedad
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden añadir diagramas de posiciones predefinidas para
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si hay un solo pentagrama en un de los tipos de sistema
@code{ChoirStaff} o @code{StaffGroup}, el comportamiento
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
He aquí una forma de imprimir un acorde en el que suena la misma nota
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Alteraciones de estilo dodecafónico para todas las notas, incluidas las naturales"
texidoces = "
En las obras de principios del s.XX, empezando por Schoenberg, Berg y
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Funciones postfijas para la creación de objetos de extensión de texto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los objetos de extensión \cresc, \dim y \decresc ahora se pueden
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede insertar códico PostScript directamente dentro de un
bloque @code{\\markup}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Del problema central de la notación, esto es, crear un determinado
símbolo, se encargan los «plugins» o complementos añadidos. Cada
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Grabado manual de las ligaduras"
texidoces = "
Se pueden grabar a mano las ligaduras modificando la propiedad
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times"
texidoces = "
La propiedad @code{tupletSpannerDuration} establece cuánto debe durar
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden conseguir símbolos especiales combinando glifos existentes,
lo que es de utilidad para la notación de instrumentos de viento.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En este ejemplo se combinan las digitaciones de la mano izquierda,
indicaciones del número de cuerda y digitaciones de la mano
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Son posibles tanto los corchetes rectos sobre notas sueltas como
extremos de barra sueltos en figuras unidas, con una combinación de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Forzar el desplazamiento horizontal de las notas"
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si LilyPond no cree que haya sitio suficiente para un guión separador
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden crear tablas alternativas de diagramas de posiciones. Se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Armónicos sobre cuerdas pisadas (armónicos artificiales):
"
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código basado en Scheme genera
24 notas aleatorias (o tantas como se necesiten), basándose en la
-%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En muchos casos, las llaves que no están en la columna central se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede cambiar el aspecto de las líneas de rejilla
sobreescribiendo algunas de sus propiedades.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden trazar líneas verticales normales entre pentagramas para
mostrar la relación entre notas; sin embargo, en caso de música
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los patrones de barrado se pueden alterar con la propiedad
@code{beatGrouping}:
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
además de las notas de la melodía, acordes y diagramas de posiciones.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los reguladores pueden imprimirse en uno cualquiera de los estilos de
@code{line-interface}: discontinuo, punteado, línea, trino o zig-zag.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aquí se muestra la manera de ocultar las alteraciones de las notas
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los cambios de dinámica con estilo de texto (como cresc. y dim.)
se imprimen con una línea intermitente que muestra su alcance.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código muestra una forma de preparar un himno cuando
cada línea comienza con un compás parcial. También muestra cómo
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los «incipit» se pueden escribir utilizando el grob del nombre del
instruemento, pero manteniendo independientes las definiciones del
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Un corchete de arpegio puede indicar que se tienen que tocar con la
misma mano notas que están en dos pentagramas distintos. Para hacerlo,
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las marcas de cesura se pueden crear sobreescribiendo la propiedad
@code{'text} del objeto @code{BreathingSign}. También está disponible
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
También se pueden imprimir símbolos de porcentaje sueltos.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Cuando se produce un cambio de clave, el símbolo de clave se imprime a
un tamaño menor que la clave inicial. Esto se puede ajustar con
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La tablatura se puede formatear utilizando letras en lugar de números.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden aplicar puntas de flecha a los elementos de extensión de
texto y de línea (como el Glissando).
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El «Makam» es un tipo de melodía de Turquía que
utiliza alteraciones microtonales de 1/9 de tono. Consulte el
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las ligaduras de expresión se pueden construir con patrones de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede engrosar una línea del pentagrama con fines pedagógicos
(p.ej. la tercera línea o la de la clave de Sol). Esto se puede
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Utilice un texto de marcado para sustituir el glifo de clave (TAB) con
una fuente tipográfica moderna.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las abreviaturas se encuentran definidas dentro del archivo
@file{ly/script-init.ly}, donde las variables @code{dashHat},
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede ajustar la posición vertical de una ligadura de
expresión utilizando la propiedad @code{positions} del objeto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los elementos de marcado aplicados a un silencio multicompás se
centran encima o debajo de éste. Los elementos de marcado extensos
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede utilizar la propiedad
@code{systemStartDelimiterHierarchy} para crear grupos de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
LilyPond también proporciona funciones de formato para imprimir
números de grupo especial diferentes a la propia fracción, así
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Armaduras de tonalidad no tradicionales"
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las cabezas de nota de notación fácil utilizan la propiedad
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Referencia para armónicos sobre cuerdas al aire (armónicos naturales):
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla muestra el uso de contextos @code{StaffGroup} y
@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Internamente, @code{\\ottava} establece las propiedades
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden mostrar los contadores de las repeticiones del tipo
porcentaje a intervalos regulares mediante el establecimiento de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las repeticiones de compases completos de más de dos repeticiones
pueden llevar un contador si se activa la propiedad adecuada, como se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
texidoces = "
Este ejemplo artificial muestra cómo se pueden permitir tanto los
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Presentamos a continuación una plantilla de piano sencilla con algunas
notas.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Muchas partituras de piano tienen las indicaciones dinámicas centradas
entre los dos pentagramas. El contexto @code{Dynamics}, si se sitúa
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Es posible ejercer un mayor control sobre la colocación de las
digitaciones de la mano derecha estableciendo el valor de una
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La polifonía se crea de la misma forma en un @code{TabStaff} que
en una pauta normal.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si necesitamos alargar o acortar un símbolo de arpegio, podemos
modificar independientemente los extremos superior e inferior.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Cuando se colocan figuras sobre líneas adicionales, sus barras se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al establecer la propiedad @code{'strict-grace-spacing} hacemos que
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Posicionar los silencios multicompás"
texidoces = "
A diferencia de los silencios normales, no existe una instrucción
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los elementos de marcado de texto deben tener la propiedad
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede imprimir una línea divisoria de la forma @code{|:} al
principio de la pieza, sobreescribiendo la propiedad correspondiente:
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir los números de compás a intervalos regulares
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir reguladores con un círculo en la punta (notación
«al niente») estableciendo la propiedad @code{circled-tip} del objeto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aunque normalmente las marcas de texto sólo se imprimen sobre el
pentagrama superior, también se pueden imprimir en otro pentagrama
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada, las indicaciones metronómicas y las
letras de ensayo se imprimen encima del pentagrama. Para
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar el contexto @code{NoteNames} para imprimir el valor
textual de las notas. La propiedad @code{printOctaveNames} activa o
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada se suprime el número del primer compás de una
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los pasajes citados tienen en cuenta la transposición de la fuente
tanto como la del destino. En este ejemplo, todos los
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La propiedad @code{quotedEventTypes} determina los tipos de eventos
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El ejemplo siguiente muestra cómo se pueden realizar diagramas de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los valores predeterminados para las notas de adorno están
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden eliminar completamente los números de compás quitando el
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada, las líneas divisorias en los grupos
StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El primer pentagrama vacío también se puede suprimir de la
partitura estableciendo la propiedad @code{remove-first} de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Estilos de silencios"
texidoces = "
Los silencios se pueden imprimir en distintos estilos.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} sólo
es necesario modificar la estructura de pulsos:
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si la nota que da fin a un regulador cae sobre la primera parte de
un compás, el regulador se detiene en la línea divisoria
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si los reguladores son demasiado cortos, se pueden alargar
modificando la propiedad @code{minimum-length} del objeto
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada, los corchetes de primera y segunda vez se
trazan encima de los finales alternativos completos, pero es posible
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir los acordes exclusivamente al comienzo de las
líneas y cuando cambia el acorde.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al juntar nombres de acorde en cifrado americano, melodía y letra,
obtenemos una hoja guía de acordes o «lead sheet»:
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
melodía y acordes? ¡No busque más!
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla simple prepara un pentagrama con notas, adecuado para
un instrumento solista o un fragmento melódico. Córtelo y péguelo en
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los deslizamientos se pueden componer tipográficamente tanto en los
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Marca de pizzicato de chasquido (@q{pizzicato de Bartók})"
texidoces = "
El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los textos independientes se pueden disponer en varias columnas
utilizando instrucciones @code{\\markup}:
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La dirección de las plicas se contola de la misma forma en la
tablatura que en la notación tradicional. Las barras se pueden
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
una sección @code{\\global} para el compás y la armadura
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El fragmento de código @qq{Plantilla de cuarteto de cuerda} produce un
resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A veces, la indicación de compás no debe imprimir la fracción completa
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A modo de alternativa para obtener auténticos «incipit»
independientes de la partitura principal, se incluyen como
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Transportar música con el menor número de alteraciones"
texidoces = "
Este ejemplo utiliza código de Scheme para forzar las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Trucaje de las propiedades de clave"
texidoces = "
La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La disposición de las expresiones de adorno se puede cambiar a lo
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar el delimitador de comienzo de un sistema
@code{SystemStartSquare} estableciéndolo explícitamente dentro de
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir estilos alternativos del corchete o gancho de las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El corchete de arpegios @code{arpeggioBracket} se puede usar para
indicar la división de voces cuando no hay plicas que puedan ofrecer
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Algunos compositores escriben dos ligaduras cuando quieren acordes
legato. Esto se puede conseguir estableciendo @code{doubleSlurs}.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Es posible aplicar la barrita que cruza la barra de las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Uso de ligaduras en los arpegios"
texidoces = "
En ocasiones se usan ligaduras de unión para escribir los arpegios.
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor
adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las expresiones dinámicas que se comienzan, terminan o se producen
en la misma nota se alinean verticalmente. Para asegurar que las
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código muestra el uso de las propiedades de
contexto @code{alignBelowContext} y @code{alignAboveContext} para
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
el establecimiento de @code{useBassFigureExtenders} al valor
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla añade una reducción de piano automática a la partitura
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla es, básicamente, la misma que la sencilla plantilla
@qq{Conjunto vocal}, excepto que aquí todas las líneas de letra se
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla crea una partitura que comienza con una estrofa para
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
-%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Mediante la adición del grabador @code{Volta_engraver} al
pentagrama pertinente, se pueden poner los corchetes de primera y
-%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
-%%% Translation of GIT committish: 615cbf212fdaf0b220b3330da417d0c3602494f2
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El fragmento de música que aparece a continuación presenta todos los
diagramas de viento madera que se encuentran definidos en LilyPond por
@end html
@end ifhtml
-@emph{Actualizado en Thu Mar 24 14:52:33 UTC 2011
+@emph{Actualizado en Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
Títulos de sección
@*
-1464
+1779
@tab Francisco Vila
@tab
@tab
@item
1 Grabado musical
@*
-5297
+5296
@tab Francisco Vila
@tab
@tab
@item
4 Trucar la salida
@*
-15408
+15393
@tab Francisco Vila
@tab
@tab
@item
1.1 Alturas
@*
-4479
+4502
@tab Francisco Vila
@tab
@tab
@ifhtml
@html
-<span style="background-color: #25fe1f">parcialmente</span>
+<span style="background-color: #1fff1f">sí</span>
@end html
@end ifhtml
@ifnothtml
-parcialmente
+sí
@end ifnothtml
@tab pre-GDP
@item
@item
1.4 Repeticiones
@*
-930
+945
@tab Francisco Vila
@tab
@tab
@item
1.5 Notas simultáneas
@*
-2163
+2216
@tab Francisco Vila
@tab
@tab
@item
1.6 Notación de los pentagramas
@*
-2056
+2345
@tab Francisco Vila
@tab
@tab
@item
2.2 Teclados y otros instrumentos de varios pentagramas
@*
-838
+864
@tab Francisco Vila
@tab
@tab
@item
2.4 Instrumentos de cuerda con trastes
@*
-2640
+2649
@tab Francisco Vila
@tab
@tab
@item
3 Entrada y salida generales
@*
-7069
+7671
@tab Francisco Vila
@tab
@tab
@item
4 Problemas de espaciado
@*
-11017
+11087
@tab Francisco Vila
@tab
@tab
@item
3 Ejecución de @command{lilypond-book}
@*
-3764
+3952
@tab Francisco Vila
@tab
@tab
@item
Introducción
@*
-4506
+4564
@tab Francisco Vila
@tab
@tab
@item
Descarga
@*
-1183
+1195
@tab Francisco Vila
@tab
@tab
@item
Manuales
@*
-1200
+1203
@tab Francisco Vila
@tab
@tab
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: f78131595ebafac25a416671e5a4b9c8b14e79b5
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: cff226053d927e433473697fe743bdfd721d2607
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: f64b0d88f1c8355e87f37d2e6cacdcf47c959d5a
+ Translation of GIT committish: 12503a0c383617cd11fa0bba2836af6c0518ecf7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
uninstall-lilypond
@end example
+@subsubheading Ayuda
+
+Teclee lo siguiente en el shell:
+
+@example
+sh lilypond-@versionStable{}-SIST-OPERATIVO.sh --help
+@end example
+
@divEnd
@item
@sourceimage{logo-fedora,,,}
@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.3}
+Fedora: LilyPond 2.14.1}
@item
@sourceimage{logo-ubuntu,,,}
@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
@item
@sourceimage{logo-slackware,,,}
@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.3}
+Slackware: LilyPond 2.14.1}
@item
@sourceimage{logo-debian,,,}
@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
@item
@sourceimage{logo-suse,,,}
[@var{ruta preestablecida}];@var{CARPETA}\LilyPond\usr\bin
@end example
-@warning{@var{CARPETA} será por lo general @code{C:\Archivos de programa}.}
+@warning{@var{CARPETA} será por lo general @code{C:@bs{}Archivos de programa}.}
@noindent
y pulse el botón @qq{Aceptar} para cerrar la ventana.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: 346067ab7e42c9cbc359d48b23c79dc0780c8320
+ Translation of GIT committish: d282588015bad1ed86833848a5bcbdc43cfdc9e5
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: a9e295650dc1d588ac03cf0c43230b8b28229bdd
+ Translation of GIT committish: 4d828c178c06d87332301030cc02dde9a9403538
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
estado del proceso de traducción para los lectores no anglófonos.
@item
-@ref{Todos}:
-enlaces rápidos, manuales descargables y manuales antiguos.
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository (el almacén de fragmentos de código de LilyPond)}:
+ejemplos, consejos y trucos creados por los usuarios.
@item
@ref{Desarrollo}:
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: e816bb2cfe498d49732ac66616ca351738585028
+ Translation of GIT committish: 44e7718b042af70430c0adada42bc0f9d5e25a4a
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.4! @emph{4 de julio de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.4. Esta versión
+contiene el conjunto habitual de correcciones de fallos.
+
+Se recomienda enérgicamente los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.3! @emph{27 de junio de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.3. Esta versión
+contiene el conjunto habitual de correcciones de fallos.
+
+Se recomienda enérgicamente los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.2! @emph{18 de junio de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.2. Esta versión
+contiene el conjunto habitual de correcciones de fallos.
+
+Se recomienda enérgicamente los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.14.1! @emph{12 de junio de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.14.1. Esta versión
+corrige algunos fallos de poca importancia en la versión estable, y no
+debería causar problemas. Recomendamos a todos que actualicen a esta
+versión.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.1! @emph{11 de junio de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.1. Esta versión
+contiene el conjunto habitual de correcciones de fallos.
+
+Se recomienda enérgicamente los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar.
+
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.15.0! @emph{7 de junio de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.15.0. Marca el
+comienzo de un nuevo esfuerzo de desarrollo no estable, y añade el
+número de errores acostumbrado.
+
+Se recomienda enérgicamente los usuarios normales que @strong{no}
+utilicen esta versión, sino la 2.14 estable en su lugar.
+
+@newsEnd
+
+
@newsItem
@subsubheading ¡Lanzado LilyPond 2.14.0! @emph{6 de junio de 2011}
Se da una lista completa de las funcionalidades nuevas en:
@example
-@uref{http://lilypond.org/doc/v2.14/Documentation/changes/index.html}
+@uref{http://lilypond.org/doc/v2.13/Documentation/changes/index.html}
@end example
¡Feliz edición de partituras! LilyPond 2.14 llega a usted de la mano de...
Colaboradores de programación:
-Sven Axelsson, Pál Benkő, Bertrand Bordage, Frédéric Bron, Hajo
-Dezelski, Richard Gay, Keith OHara, Andrew Hawryluk, Christian Hitz,
-Marc Hohl, Henning Hraban Ramm, Ian Hulin, Michael Käppler, Marek
-Klein, Kieren MacMillan, Thomas Morgan, Benjamin Peterson, Nathan
-Reed, Julien Rioux, Boris Shingarov, Patrick Schmidt, Owen Tuz, Andrew
+Sven Axelsson, Pál Benkő, Bertrand Bordage, Frédéric Bron, Peter Chubb, Hajo Dezelski, Richard
+Gay, Keith OHara, Andrew Hawryluk, Christian Hitz, Marc Hohl,
+Henning Hraban Ramm, Ian Hulin, Michael Käppler, Marek Klein,
+Kieren MacMillan, Thomas Morgan, Benjamin Peterson, Nathan Reed,
+Julien Rioux, Boris Shingarov, Patrick Schmidt, Owen Tuz, Jan Warchoł, Andrew
Wilson, Rodolfo Zitellini.
Colaboradores de fuenteas tipográficas:
@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
- Translation of GIT committish: c32e3fdb278522c2772cbbe01f532ed24cb9d838
+ Translation of GIT committish: 751d4ab14fbbcf387cc5ca0b50c70d10db2b08f5
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading Séptima versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.63! @emph{30 de mayo de 2011}
+
+Ha salido LilyPond 2.13.63; ésta es la sexta versión candidata al
+lanzamiento de la inminente versión estable 2.14. Se invita a los
+usuarios a que hagan experimentos con esta versión. Las
+funcionalidades nuevas desde 2.12.3 están relacionadas en el manual de
+@qq{Cambios} dentro de la sección @ref{Desarrollo} de estas páginas.
+
+No existe ningún problema conocido calificado como crítico en esta
+versión. Si no se encuentra ningún bug crítico, el lanzamiento de la
+versión oficial 2.14.0 se producirá el 6 de junio de 2011. Si
+descubre algún problema, le rogamos que nos envíe
+@ref{Informes de fallos}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.13.62! @emph{24 de mayo de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.13.62. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+
+Tenga en cuenta que esta @strong{no} es la siguiente versión candidata
+al lanzamiento estable, debido a que aún permanecen unos cuantos
+fallos críticos.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.13.61! @emph{1 de mayo de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.13.61. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+
+Tenga en cuenta que esta @strong{no} es la siguiente versión candidata
+al lanzamiento estable, debido a que aún permanecen unos cuantos
+fallos críticos.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.13.60! @emph{16 de abril de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.13.60. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+
+Tenga en cuenta que esta @strong{no} es la siguiente versión candidata
+al lanzamiento estable, debido a que aún permanecen unos cuantos
+fallos críticos.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading Artículo en la revista Linux Journal Magazine (@emph{abril de 2011})
+
+La revista @uref{http://www.linux-magazine.com,Linux Magazine} publica
+un artículo en su edición de mayo de 2011 bajo el título
+@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf,
+Projects on the Move}. Es una introducción a MuseScore, LilyPond y
+Chordii. La autora Carla Schroder dice que @qq{LilyPond se maneja a
+partir de la línea de órdenes, pero que no le asuste la falta de una
+interfaz gráfica; LilyPond es amigable para el usuario y fácil de
+aprender}, y aporta un ejemplo práctico.
+@newsEnd
+
+@newsItem
+@subsubheading ¡Lanzado LilyPond 2.13.59! @emph{10 de abril de 2011}
+
+Nos complace anunciar el lanzamiento de LilyPond 2.13.59. Esta
+versión contiene el conjunto habitual de correcciones de fallos.
+
+Tenga en cuenta que esta @strong{no} es la siguiente versión candidata
+al lanzamiento estable, debido a que aún permanecen unos cuantos
+fallos críticos.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading Sexta versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.58! @emph{7 de abril de 2011}
+
+Ha salido LilyPond 2.13.58; ésta es la quinta versión candidata al
+lanzamiento de la inminente versión estable 2.14. Se invita a los
+usuarios a que hagan experimentos con esta versión. Las
+funcionalidades nuevas desde 2.12.3 están relacionadas en el manual de
+@qq{Cambios} dentro de la sección @ref{Desarrollo} de estas páginas.
+
+No existe ningún problema conocido calificado como crítico en esta
+versión. Si no se encuentra ningún bug crítico, el lanzamiento de la
+versión oficial 2.14.0 se producirá el 14 de abril de 2011. Si
+descubre algún problema, le rogamos que nos envíe
+@ref{Informes de fallos}.
+
+@newsEnd
+
@newsItem
@subsubheading Quinta versión candidata al lanzamiento de 2.14: ¡Lanzado LilyPond 2.13.57! @emph{3 de abril de 2011}
-Ha salido LilyPond 2.13.57; ésta es la cuarta versión candidata al
+Ha salido LilyPond 2.13.57; ésta es la quinta versión candidata al
lanzamiento de la inminente versión estable 2.14. Se invita a los
usuarios a que hagan experimentos con esta versión. Las
funcionalidades nuevas desde 2.12.3 están relacionadas en el manual de
input file.
@menu
-* Music function syntax::
+* Music function definitions::
+* Music function usage::
* Simple substitution functions::
* Intermediate substitution functions::
* Mathematics in functions::
@end menu
-@node Music function syntax
-@subsection Music function syntax
+@node Music function definitions
+@subsection Music function definitions
-The general form for music functions is:
+The general form for defining music functions is:
@example
function =
@item @code{@var{typeN?}}
@tab a scheme @emph{type predicate} for which @code{@var{argN}}
-must return @code{#t}.
+must return @code{#t}. Some of these predicates are specially
+recognized by the parser, see below.
@item @code{@var{music}}
@tab A music expression, optionally written in scheme, with any
@end multitable
@noindent
-For a list of available type predicates, see
-@ruser{Predefined type predicates}. User-defined type predicates
-are also allowed.
+Some type predicates are specially recognized by the parser and will
+make the parser look for the respective arguments in Lilypond syntax
+rather than in Scheme syntax. Currently these are @code{ly:music?},
+@code{markup?}, @code{ly:pitch?}, and @code{ly:duration?}.
+
+If you really want to input one of those items as a Scheme rather than a
+Lilypond expression, you may write them as a Scheme expression that
+calls @code{ly:export} at its outermost level.
+
+Other type predicates, including user-defined ones, will make the
+respective argument only be accepted as a Scheme expression.
+For a list of available type predicates, see
+@ruser{Predefined type predicates}.
@seealso
@file{scm/lily.scm}.
+@node Music function usage
+@subsection Music function usage
+Music functions may currently be used in three places. Depending on
+where they are used, restrictions apply in order to be able to parse
+them unambiguously. The result a music function returns must be
+compatible with the context in which it is called.
+
+@itemize
+@item
+At top level in a music expression. There are no special restrictions
+on the argument list. Using the @code{#@{}@dots{}@code{#@}} construct
+produces a sequential music expression and consequently can only applied
+in this context.
+
+@item
+As a post-event. All trailing arguments of the music function with the
+predicate @code{ly:music?} will get parsed also as post-events. Note
+that returning post-events will also be acceptable for music functions
+called at top level, leading to a result roughly equivalent to
+@example
+s 1*0-\fun
+@end example
+
+@item
+As a chord constituent. All trailing arguments of the music function
+with the predicate @code{ly:music?} will get parsed also as chord
+constituents.
+@end itemize
+
+@noindent
+The special rules for trailing arguments make it possible to write
+polymorphic functions like @code{\tweak} that can be applied to
+different constructs.
+
+There is another somewhat special rule: if you have a predicate
+@code{ly:music?} directly before a @code{ly:duration?} predicate, then
+the corresponding music expression must be either a music identifier, or
+literal sequential or parallel music enclosed in
+@code{@{}@dots{}@code{@}} or @code{<<}@dots{}@code{>>} explicitly.
+Otherwise, Lilypond could get confused about where the music ends and
+the duration starts.
+
@node Simple substitution functions
@subsection Simple substitution functions
@end html
@end ifhtml
-@emph{Dernière mise à jour Thu Mar 24 14:52:33 UTC 2011
+@emph{Dernière mise à jour Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
1 La gravure musicale
@*
-5297
+5296
@tab Jean-Charles Malahieude
@*
John Mandereau
@item
4 Retouche de partition
@*
-15408
+15393
@tab Valentin Villenave
@*
Nicolas Klutchnikoff
@item
1.1 Hauteurs
@*
-4479
+4502
@tab Frédéric Chiasson
@tab Valentin Villenave
@*
@ifhtml
@html
-<span style="background-color: #40fe23">partiellement</span>
+<span style="background-color: #47ff24">partiellement</span>
@end html
@end ifhtml
@ifnothtml
@item
1.4 Répétitions et reprises
@*
-930
+945
@tab Valentin Villenave
@*
Jean-Charles Malahieude
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #39ff22">partiellement</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement
@end ifnothtml
@tab pré-GDP
@item
1.5 Notes simultanées
@*
-2163
+2216
@tab Frédéric Chiasson
@*
Valentin Villenave
@ifhtml
@html
-<span style="background-color: #33ff21">partiellement</span>
+<span style="background-color: #7dff2b">partiellement</span>
@end html
@end ifhtml
@ifnothtml
@item
1.6 Notation sur la portée
@*
-2056
+2345
@tab Valentin Villenave
@*
Jean-Charles Malahieude
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #9eff30">partiellement</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement
@end ifnothtml
@tab pré-GDP
@item
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #25fe1f">partiellement</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement
@end ifnothtml
@tab pré-GDP
@item
@item
2.2 Instruments utilisant des portées multiples
@*
-838
+864
@tab Valentin Villenave
@*
Jean-Charles Malahieude
@item
2.4 Instruments à cordes frettées
@*
-2640
+2649
@tab Matthieu Jacquot
@tab Jean-Charles Malahieude
@tab
@item
3 Généralités en matière d'entrée et sortie
@*
-7069
+7671
@tab Jean-Charles Malahieude
@*
Valentin Villenave
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #dfef77">partiellement (83 %)</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement (83 %)
@end ifnothtml
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #91ff2e">partiellement</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement
@end ifnothtml
@tab pré-GDP
@item
4 Gestion de l'espace
@*
-11017
+11087
@tab Frédéric Chiasson
@*
Jean-Charles Malahieude
@item
3 Association musique-texte avec @command{lilypond-book}
@*
-3764
+3952
@tab Jean-Charles Malahieude
@tab
@tab
@item
Introduction
@*
-4506
+4564
@tab Gauvain Pocentek
@*
Jean-Charles Malahieude
@item
Téléchargement
@*
-1183
+1195
@tab Jean-Charles Malahieude
@*
John Mandereau
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #25fe1f">partiellement</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement
@end ifnothtml
@tab pré-GDP
@item
Manuels
@*
-1200
+1203
@tab John Mandereau
@tab Jean-Charles Malahieude
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">oui</span>
+<span style="background-color: #25fe1f">partiellement</span>
@end html
@end ifhtml
@ifnothtml
-oui
+partiellement
@end ifnothtml
@tab pré-GDP
@item
SUBDIRS = web learning texidocs usage
STEPMAKE_TEMPLATES = documentation
LOCALSTEPMAKE_TEMPLATES = lilypond ly doc-i18n-root
-NO_PDF_FILES = 1
EXTRA_DIST_FILES = web.texi
@end html
@end ifhtml
-@emph{Last updated Thu Mar 24 14:52:33 UTC 2011
+@emph{Last updated Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
4 A kimenet finomhangolása
@*
-15408
+15393
@tab Harmath Dénes
@tab
@tab
partially
@end ifnothtml
@tab pre-GDP
+@item
+3 A @command{lilypond-book} használata
+@*
+3952
+@tab Team-hu
+@tab
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
@end multitable
@item
Bevezetés
@*
-4506
+4564
@tab Harmath Dénes
@tab
@tab
@item
Letöltés
@*
-1183
+1195
@tab Harmath Dénes
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #25fe1f">partially</span>
@end html
@end ifhtml
@ifnothtml
-yes
+partially
@end ifnothtml
@tab pre-GDP
@item
Dokumentáció
@*
-1200
+1203
@tab Harmath Dénes
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #25fe1f">partially</span>
@end html
@end ifhtml
@ifnothtml
-yes
+partially
@end ifnothtml
@tab pre-GDP
@item
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+ Translation of GIT committish: f77212d801fa4603bf596a19cecf5a068f1d9d85
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.13.36"
+
+@c Note: keep this node named so that `info lilypond-book' brings you here.
+@node lilypond-book
+@chapter A @command{lilypond-book} használata
+@translationof lilypond-book
+
+Amennyiben egy dokumentumba kottapéldákat szeretnénk beszúrni, megtehetjük,
+hogy azok képeit egyesével létrehozzuk a LilyPond segítségével PostScript
+vagy PNG formátumban, és mint bármilyen más képeket, beillesztjük azokat egy
+@LaTeX{} vagy HTML dokumentumba.
+
+A @command{lilypond-book} ennek a folyamatnak az automatizálására szolgál:
+ez a program kiszedi a LilyPond kódrészleteket egy dokumentumból, lefordítja
+őket a @command{lilypond} segítségével, és az így kapott képeket beilleszti
+az eredeti kódrészletek helyére. A kottakép méretei igazodnak a dokumentum
+elrendezéséhez.
+
+A @command{lilypond-book} egy különálló parancssori program; a parancssoros
+programok futtatásának módját a @ref{Parancssori használat} írja le bővebben.
+
+A @command{lilypond-book} jelenleg a @LaTeX{}, HTML, Texinfo és DocBook
+formátumokat támogatja.
+
+@cindex texinfo
+@cindex latex
+@cindex texinfo
+@cindex texi
+@cindex html
+@cindex docbook
+@cindex dokumentumok, kottapéldák
+@cindex HTML, kottapéldák
+@cindex Texinfo, kottapéldák
+@cindex DocBook, kottapéldák
+@cindex @LaTeX{}, kottapéldák
+
+@menu
+* Egy kottapéldákat tartalmazó dokumentum::
+* Zene és szöveg integrációja::
+* Kottapéldák paraméterei::
+* A lilypond-book futtatása::
+* Fájlkiterjesztések::
+* lilypond-book sablonok::
+* Közös tartalomjegyzék::
+* További módszerek zene és szöveg kombinálására::
+@end menu
+
+
+@node Egy kottapéldákat tartalmazó dokumentum
+@section Egy kottapéldákat tartalmazó dokumentum
+@translationof An example of a musicological document
+
+@cindex zenetudomány
+Bizonyos dokumentumok kottapéldákat tartalmaznak. Ezek között vannak
+zenetudományi értekezések, énekeskönyvek, vagy ehhez hasonló kézikönyvek.
+Ezeket úgy is el lehet készíteni, hogy a szövegbe beillesztjük a kottaábrákat.
+Azonban ahhoz, hogy ne kelljen minden egyes kottarészlet szedését külön
+elvégezni, a HTML, @LaTeX{}, Texinfo és DocBook formátumú dokumentumok esetén
+mód nyílik ennek automatizálására.
+
+Egy @code{lilypond-book} nevű parancsfájl a LilyPond nyelvén írt
+kódrészleteket szépen formázott kottapéldákká alakítja át. Íme egy rövid,
+magyarázatokkal ellátott @LaTeX{} példa.
+
+@subheading Bemenet
+
+@quotation
+@verbatim
+\documentclass[a4paper]{article}
+
+\begin{document}
+
+A \verb+lilypond-book+ segítségével feldolgozott dokumentumok
+kottapéldákat tartalmazhatnak. Például:
+
+\begin{lilypond}
+\relative c' {
+ c2 e2 \times 2/3 { f8 a b } a2 e4
+}
+\end{lilypond}
+
+A beállításokat szögletes zárójelbe kell tenni:
+
+\begin{lilypond}[fragment,quote,staffsize=26,verbatim]
+ c'4 f16
+\end{lilypond}
+
+A nagyobb kottapéldákat ki lehet emelni külön fájlba, majd beilleszteni
+őket a \verb+\lilypondfile+ paranccsal:
+
+\lilypondfile[quote,noindent]{screech-boink.ly}
+
+\end{document}
+@end verbatim
+@end quotation
+
+@subheading Feldolgozás
+
+A fenti dokumentumot egy @file{lilybook.lytex} nevű fájlba mentve futtassuk le
+a következő parancsokat:
+
+@c keep space after @version{} so TeX doesn't choke
+@example
+lilypond-book --output=out --pdf lilybook.lytex
+@emph{lilypond-book (GNU LilyPond) @version{} }
+@emph{Reading lilybook.lytex...}
+@emph{...}
+@emph{Compiling lilybook.tex...}
+cd out
+pdflatex lilybook
+@emph{...}
+xpdf lilybook
+@emph{(az @command{xpdf} helyére értelemszerűen tetszőleges PDF-nézegető
+kerülhet)}
+@end example
+
+A @command{lilypond-book} és a @command{latex} rengeteg ideiglenes fájlt
+hoznak létre. Annak érdekében, hogy ezek külön alkönyvtárba kerüljenek, a
+@code{--output=@var{alkönyvtár}} opciót kell megadni.
+
+Lent látható a fenti @LaTeX{} példa kimenete.@footnote{Ezt a dokumentumot a
+Texinfo generálta, így apró eltérések lehetnek.} Ezzel elsajátítottuk a
+lilypond-book használatának alapjait.
+
+@page
+
+@subheading Kimenet
+
+A @command{lilypond-book} segítségével feldolgozott dokumentumok
+kottapéldákat tartalmazhatnak. Például:
+
+@lilypond
+\relative c' {
+ c2 e2 \times 2/3 { f8 a b } a2 e4
+}
+@end lilypond
+
+A beállításokat szögletes zárójelbe kell tenni:
+
+@lilypond[fragment,quote,staffsize=26,verbatim]
+c'4 f16
+@end lilypond
+
+A nagyobb kottapéldákat ki lehet emelni külön fájlba, majd beilleszteni
+őket a @code{\lilypondfile} paranccsal:
+
+@lilypondfile[quote,noindent]{screech-boink.ly}
+
+
+@page
+
+@node Integrating music and text
+@section Integrating music and text
+
+Here we explain how to integrate LilyPond with various output formats.
+
+@menu
+* LaTeX::
+* Texinfo::
+* HTML::
+* DocBook::
+@end menu
+
+@node LaTeX
+@subsection @LaTeX{}
+
+@LaTeX{} is the de-facto standard for publishing layouts in the exact
+sciences. It is built on top of the @TeX{} typesetting engine,
+providing the best typography available anywhere.
+
+See
+@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/,
+@emph{The Not So Short Introduction to @LaTeX{}}} for an overview on how
+to use @LaTeX{}.
+
+Music is entered using
+
+@example
+\begin@{lilypond@}[options,go,here]
+ YOUR LILYPOND CODE
+\end@{lilypond@}
+@end example
+
+@noindent
+or
+
+@example
+\lilypondfile[options,go,here]@{@var{filename}@}
+@end example
+
+@noindent
+or
+
+@example
+\lilypond[options,go,here]@{ YOUR LILYPOND CODE @}
+@end example
+
+Additionally, @code{\lilypondversion} displays the current version
+of lilypond.
+Running @command{lilypond-book} yields a file that can be further
+processed with @LaTeX{}.
+
+We show some examples here. The @code{lilypond} environment
+
+@example
+\begin@{lilypond@}[quote,fragment,staffsize=26]
+ c' d' e' f' g'2 g'2
+\end@{lilypond@}
+@end example
+
+@noindent
+produces
+
+@lilypond[quote,fragment,staffsize=26]
+c' d' e' f' g'2 g'2
+@end lilypond
+
+The short version
+
+@example
+\lilypond[quote,fragment,staffsize=11]@{<c' e' g'>@}
+@end example
+
+@noindent
+produces
+
+@lilypond[quote,fragment,staffsize=11]{<c' e' g'>}
+
+@noindent
+Currently, you cannot include @code{@{} or @code{@}} within
+@code{\lilypond@{@}}, so this command is only useful with the
+@code{fragment} option.
+
+The default line width of the music will be adjusted by examining the
+commands in the document preamble, the part of the document before
+@code{\begin@{document@}}. The @command{lilypond-book} command sends
+these to @LaTeX{} to find out how wide the text is. The line width for
+the music fragments is then adjusted to the text width. Note that this
+heuristic algorithm can fail easily; in such cases it is necessary to
+use the @code{line-width} music fragment option.
+
+@cindex titling and lilypond-book
+@cindex \header in @LaTeX{} documents
+
+Each snippet will call the following macros if they have been defined by
+the user:
+
+@itemize @bullet
+@item @code{\preLilyPondExample} called before the music,
+
+@item @code{\postLilyPondExample} called after the music,
+
+@item @code{\betweenLilyPondSystem[1]} is called between systems if
+@code{lilypond-book} has split the snippet into several PostScript
+files. It must be defined as taking one parameter and will be
+passed the number of files already included in this snippet.
+The default is to simply insert a @code{\linebreak}.
+@end itemize
+
+@ignore
+Broken stuff. :(
+
+@cindex Latex, feta symbols
+@cindex fetachar
+
+To include feta symbols (such as flat, segno, etc) in a LaTeX
+document, use @code{\input@{titledefs@}}
+
+@example
+\documentclass[a4paper]@{article@}
+
+\input@{titledefs@}
+
+\begin@{document@}
+
+\fetachar\fetasharp
+
+\end@{document@}
+@end example
+
+The font symbol names are defined in the file feta20.tex; to find
+the location of this file, use the command
+
+@example
+kpsewhich feta20.tex
+@end example
+
+@end ignore
+
+@snippets
+
+Sometimes it is useful to display music elements (such as ties and slurs)
+as if they continued after the end of the fragment. This can be done by
+breaking the staff and suppressing inclusion of the rest of the LilyPond
+output.
+
+In @LaTeX{}, define @code{\betweenLilyPondSystem} in such a way that
+inclusion of other systems is terminated once the required number of
+systems are included. Since @code{\betweenLilyPondSystem} is first
+called @emph{after} the first system, including only the first system
+is trivial.
+
+@example
+\def\betweenLilyPondSystem#1@{\endinput@}
+
+\begin@{lilypond@}[fragment]
+ c'1\( e'( c'~ \break c' d) e f\)
+\end@{lilypond@}
+@end example
+
+If a greater number of systems is requested, a @TeX{} conditional must
+be used before the @code{\endinput}. In this example, replace @q{2} by
+the number of systems you want in the output.
+
+@example
+\def\betweenLilyPondSystem#1@{
+ \ifnum#1<2\else\expandafter\endinput\fi
+@}
+@end example
+
+@noindent
+(Since @code{\endinput} immediately stops the processing of the current
+input file we need @code{\expandafter} to delay the call of @code{\endinput}
+after executing @code{\fi} so that the @code{\if}-@code{\fi} clause is
+balanced.)
+
+Remember that the definition of @code{\betweenLilyPondSystem} is
+effective until @TeX{} quits the current group (such as the @LaTeX{}
+environment) or is overridden by another definition (which is, in
+most cases, for the rest of the document). To reset your
+definition, write
+
+@example
+\let\betweenLilyPondSystem\undefined
+@end example
+
+@noindent
+in your @LaTeX{} source.
+
+This may be simplified by defining a @TeX{} macro
+
+@example
+\def\onlyFirstNSystems#1@{
+ \def\betweenLilyPondSystem##1@{%
+ \ifnum##1<#1\else\expandafter\endinput\fi@}
+@}
+@end example
+
+@noindent
+and then saying only how many systems you want before each fragment,
+
+@example
+\onlyFirstNSystems@{3@}
+\begin@{lilypond@}...\end@{lilypond@}
+\onlyFirstNSystems@{1@}
+\begin@{lilypond@}...\end@{lilypond@}
+@end example
+
+
+@seealso
+There are specific @command{lilypond-book} command line options and
+other details to know when processing @LaTeX{} documents, see
+@ref{Invoking lilypond-book}.
+
+
+@node Texinfo
+@subsection Texinfo
+
+Texinfo is the standard format for documentation of the GNU project. An
+example of a Texinfo document is this manual. The HTML, PDF, and Info
+versions of the manual are made from the Texinfo document.
+
+In the input file, music is specified with
+
+@example
+@@lilypond[options,go,here]
+ YOUR LILYPOND CODE
+@@end lilypond
+@end example
+
+@noindent
+or
+
+@example
+@@lilypond[options,go,here]@{ YOUR LILYPOND CODE @}
+@end example
+
+@noindent
+or
+
+@example
+@@lilypondfile[options,go,here]@{@var{filename}@}
+@end example
+
+Additionally, @code{@@lilypondversion} displays the current version
+of lilypond.
+
+When @command{lilypond-book} is run on it, this results in a Texinfo
+file (with extension @file{.texi}) containing @code{@@image} tags for
+HTML, Info and printed output. @command{lilypond-book} generates images
+of the music in EPS and PDF formats for use in the printed output, and
+in PNG format for use in HTML and Info output.
+
+We show two simple examples here. A @code{lilypond} environment
+
+@example
+@@lilypond[fragment]
+c' d' e' f' g'2 g'
+@@end lilypond
+@end example
+
+@noindent
+produces
+
+@lilypond[fragment]
+c' d' e' f' g'2 g'
+@end lilypond
+
+The short version
+
+@example
+@@lilypond[fragment,staffsize=11]@{<c' e' g'>@}
+@end example
+
+@noindent
+produces
+
+@lilypond[fragment,staffsize=11]{<c' e' g'>}
+
+Contrary to @LaTeX{}, @code{@@lilypond@{...@}} does not generate an
+in-line image. It always gets a paragraph of its own.
+
+
+@node HTML
+@subsection HTML
+
+Music is entered using
+
+@example
+<lilypond fragment relative=2>
+\key c \minor c4 es g2
+</lilypond>
+@end example
+
+@noindent
+@command{lilypond-book} then produces an HTML file with appropriate image
+tags for the music fragments:
+
+@lilypond[fragment,relative=2]
+\key c \minor c4 es g2
+@end lilypond
+
+For inline pictures, use @code{<lilypond ... />}, where the options
+are separated by a colon from the music, for example
+
+@example
+Some music in <lilypond relative=2: a b c/> a line of text.
+@end example
+
+To include separate files, say
+
+@example
+<lilypondfile @var{option1} @var{option2} ...>@var{filename}</lilypondfile>
+@end example
+
+For a list of options to use with the @code{lilypond} or
+@code{lilypondfile} tags, see @ref{Music fragment options}.
+
+Additionally, @code{<lilypondversion/>} displays the current version
+of lilypond.
+
+
+@cindex titling in HTML
+@cindex preview image
+@cindex thumbnail
+
+@node DocBook
+@subsection DocBook
+
+For inserting LilyPond snippets it is good to keep the conformity of our
+DocBook document, thus allowing us to use DocBook editors, validation
+etc. So we don't use custom tags, only specify a convention based on the
+standard DocBook elements.
+
+@subheading Common conventions
+
+For inserting all type of snippets we use the @code{mediaobject} and
+@code{inlinemediaobject} element, so our snippets can be formatted
+inline or not inline. The snippet formatting options are always
+provided in the @code{role} property of the innermost element (see in
+next sections). Tags are chosen to allow DocBook editors format the
+content gracefully. The DocBook files to be processed with
+@command{lilypond-book} should have the extension @file{.lyxml}.
+
+@subheading Including a LilyPond file
+
+This is the most simple case. We must use the @file{.ly} extension for
+the included file, and insert it as a standard @code{imageobject}, with
+the following structure:
+
+@example
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="music1.ly" role="printfilename" />
+ </imageobject>
+</mediaobject>
+@end example
+
+Note that you can use @code{mediaobject} or @code{inlinemediaobject}
+as the outermost element as you wish.
+
+@subheading Including LilyPond code
+
+Including LilyPond code is possible by using a @code{programlisting},
+where the language is set to @code{lilypond} with the following
+structure:
+
+@example
+<inlinemediaobject>
+ <textobject>
+ <programlisting language="lilypond" role="fragment verbatim staffsize=16 ragged-right relative=2">
+\context Staff \with @{
+ \remove Time_signature_engraver
+ \remove Clef_engraver@}
+ @{ c4( fis) @}
+ </programlisting>
+ </textobject>
+</inlinemediaobject>
+@end example
+
+As you can see, the outermost element is a @code{mediaobject} or
+@code{inlinemediaobject}, and there is a @code{textobject} containing
+the @code{programlisting} inside.
+
+@subheading Processing the DocBook document
+
+Running @command{lilypond-book} on our @file{.lyxml} file will create a
+valid DocBook document to be further processed with @file{.xml}
+extension. If you use
+@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, it will create a
+PDF file from this document automatically. For HTML (HTML Help,
+JavaHelp etc.) generation you can use the official DocBook XSL
+stylesheets, however, it is possible that you have to make some
+customization for it.
+
+
+@node Music fragment options
+@section Music fragment options
+
+In the following, a @q{LilyPond command} refers to any command described
+in the previous sections which is handled by @command{lilypond-book} to
+produce a music snippet. For simplicity, LilyPond commands are only
+shown in @LaTeX{} syntax.
+
+Note that the option string is parsed from left to right; if an option
+occurs multiple times, the last one is taken.
+
+The following options are available for LilyPond commands:
+
+@table @code
+@item staffsize=@var{ht}
+Set staff size to @var{ht}, which is measured in points.
+
+@item ragged-right
+Produce ragged-right lines with natural spacing, i.e.,
+@code{ragged-right = ##t} is added to the LilyPond snippet. This is the
+default for the @code{\lilypond@{@}} command if no @code{line-width}
+option is present. It is also the default for the @code{lilypond}
+environment if the @code{fragment} option is set, and no line width is
+explicitly specified.
+
+@item noragged-right
+For single-line snippets, allow the staff length to be stretched to
+equal that of the line width, i.e., @code{ragged-right = ##f} is
+added to the LilyPond snippet.
+
+@item line-width
+@itemx line-width=@var{size}\@var{unit}
+Set line width to @var{size}, using @var{unit} as units. @var{unit} is
+one of the following strings: @code{cm}, @code{mm}, @code{in}, or
+@code{pt}. This option affects LilyPond output (this is, the staff
+length of the music snippet), not the text layout.
+
+If used without an argument, set line width to a default value (as
+computed with a heuristic algorithm).
+
+If no @code{line-width} option is given, @command{lilypond-book} tries to
+guess a default for @code{lilypond} environments which don't use the
+@code{ragged-right} option.
+
+@item notime
+Do not print the time signature, and turns off the timing (time signature,
+bar lines) in the score.
+
+@item fragment
+Make @command{lilypond-book} add some boilerplate code so that you can
+simply enter, say,
+
+@example
+c'4
+@end example
+
+@noindent
+without @code{\layout}, @code{\score}, etc.
+
+@item nofragment
+Do not add additional code to complete LilyPond code in music snippets.
+Since this is the default, @code{nofragment} is redundant normally.
+
+@item indent=@var{size}\@var{unit}
+Set indentation of the first music system to @var{size}, using
+@var{unit} as units. @var{unit} is one of the following strings:
+@code{cm}, @code{mm}, @code{in}, or @code{pt}. This option affects
+LilyPond, not the text layout.
+
+@item noindent
+Set indentation of the first music system to zero. This option affects
+LilyPond, not the text layout. Since no indentation is the default,
+@code{noindent} is redundant normally.
+
+@item quote
+Reduce line length of a music snippet by @math{2*0.4}@dmn{in} and put
+the output into a quotation block. The value @q{0.4@dmn{in}} can be
+controlled with the @code{exampleindent} option.
+
+@item exampleindent
+Set the amount by which the @code{quote} option indents a music snippet.
+
+@item relative
+@itemx relative=@var{n}
+Use relative octave mode. By default, notes are specified relative to
+middle@tie{}C. The optional integer argument specifies the octave of
+the starting note, where the default @code{1} is middle C.
+@code{relative} option only works when @code{fragment} option is set,
+so @code{fragment} is automatically implied by @code{relative},
+regardless of the presence of any @code{(no)fragment} option in the
+source.
+@end table
+
+LilyPond also uses @command{lilypond-book} to produce its own
+documentation. To do that, some more obscure music fragment options are
+available.
+
+@table @code
+@item verbatim
+The argument of a LilyPond command is copied to the output file and
+enclosed in a verbatim block, followed by any text given with the
+@code{intertext} option (not implemented yet); then the actual music is
+displayed. This option does not work well with @code{\lilypond@{@}} if
+it is part of a paragraph.
+
+If @code{verbatim} is used in a @code{lilypondfile} command, it is
+possible to enclose verbatim only a part of the source file. If the
+source file contain a comment containing @samp{begin verbatim} (without
+quotes), quoting the source in the verbatim block will start after the
+last occurrence of such a comment; similarly, quoting the source verbatim
+will stop just before the first occurrence of a comment containing
+@samp{end verbatim}, if there is any. In the following source file
+example, the music will be interpreted in relative mode, but the
+verbatim quote will not show the @code{relative} block, i.e.
+
+@example
+\relative c' @{ % begin verbatim
+ c4 e2 g4
+ f2 e % end verbatim
+@}
+@end example
+
+@noindent
+will be printed with a verbatim block like
+
+@example
+ c4 e2 g4
+ f2 e
+@end example
+
+@noindent
+If you would like to translate comments and variable names in verbatim
+output but not in the sources, you may set the environment variable
+@code{LYDOC_LOCALEDIR} to a directory path; the directory should
+contain a tree of @file{.mo} message catalogs with @code{lilypond-doc}
+as a domain.
+
+@item addversion
+(Only for Texinfo output.) Prepend line @code{\version
+@@w@{"@@version@{@}"@}} to @code{verbatim} output.
+
+@item texidoc
+(Only for Texinfo output.) If @command{lilypond} is called with the
+@option{--header=@/texidoc} option, and the file to be processed is
+called @file{foo.ly}, it creates a file @file{foo.texidoc} if there
+is a @code{texidoc} field in the @code{\header}. The @code{texidoc}
+option makes @command{lilypond-book} include such files, adding its
+contents as a documentation block right before the music snippet.
+
+Assuming the file @file{foo.ly} contains
+
+@example
+\header @{
+ texidoc = "This file demonstrates a single note."
+@}
+@{ c'4 @}
+@end example
+
+@noindent
+and we have this in our Texinfo document @file{test.texinfo}
+
+@example
+@@lilypondfile[texidoc]@{foo.ly@}
+@end example
+
+@noindent
+the following command line gives the expected result
+
+@example
+lilypond-book --pdf --process="lilypond \
+ -dbackend=eps --header=texidoc" test.texinfo
+@end example
+
+Most LilyPond test documents (in the @file{input} directory of the
+distribution) are small @file{.ly} files which look exactly like this.
+
+For localization purpose, if the Texinfo document contains
+@code{@@documentlanguage @var{LANG}} and @file{foo.ly} header
+contains a @code{texidoc@var{LANG}} field, and if @command{lilypond}
+is called with @option{--header=@/texidoc@var{LANG}}, then
+@file{foo.texidoc@var{LANG}} will be included instead of
+@file{foo.texidoc}.
+
+@item lilyquote
+(Only for Texinfo output.) This option is similar to quote, but only
+the music snippet (and the optional verbatim block implied by
+@code{verbatim} option) is put into a quotation block. This option is
+useful if you want to @code{quote} the music snippet but not the
+@code{texidoc} documentation block.
+
+@item doctitle
+(Only for Texinfo output.) This option works similarly to
+@code{texidoc} option: if @command{lilypond} is called with the
+@option{--header=@/doctitle} option, and the file to be processed is
+called @file{foo.ly} and contains a @code{doctitle} field in the
+@code{\header}, it creates a file @file{foo.doctitle}. When
+@code{doctitle} option is used, the contents of @file{foo.doctitle},
+which should be a single line of @var{text}, is inserted in the
+Texinfo document as @code{@@lydoctitle @var{text}}.
+@code{@@lydoctitle} should be a macro defined in the Texinfo document.
+The same remark about @code{texidoc} processing with localized
+languages also applies to @code{doctitle}.
+
+@item nogettext
+(Only for Texinfo output.) Do not translate comments and variable
+names in the snippet quoted verbatim.
+
+@item printfilename
+If a LilyPond input file is included with @code{\lilypondfile}, print
+the file name right before the music snippet. For HTML output, this
+is a link. Only the base name of the file is printed, i.e. the
+directory part of the file path is stripped.
+
+@end table
+
+
+@node Invoking lilypond-book
+@section Invoking @command{lilypond-book}
+
+@command{lilypond-book} produces a file with one of the following
+extensions: @file{.tex}, @file{.texi}, @file{.html} or @file{.xml},
+depending on the output format. All of @file{.tex}, @file{.texi} and
+@file{.xml} files need further processing.
+
+@subheading Format-specific instructions
+
+@subsubheading @LaTeX{}
+
+There are two ways of processing your @LaTeX{} document for printing or
+publishing: getting a PDF file directly with PDF@LaTeX{}, or getting a
+PostScript file with @LaTeX{} via a DVI to PostScript translator like
+@command{dvips}. The first way is simpler and recommended@footnote{Note
+that PDF@LaTeX{} and @LaTeX{} may not be both usable to compile any
+@LaTeX{} document, that is why we explain the two ways.}, and whichever
+way you use, you can easily convert between PostScript and PDF with
+tools, like @command{ps2pdf} and @command{pdf2ps} included in
+Ghostscript package.
+
+To produce a PDF file through PDF@LaTeX{}, use
+
+@example
+lilypond-book --pdf yourfile.lytex
+pdflatex yourfile.tex
+@end example
+
+@cindex outline fonts
+@cindex type1 fonts
+@cindex dvips
+@cindex invoking dvips
+To produce PDF output via @LaTeX{}/@command{dvips}/@command{ps2pdf}, you
+should do
+
+@example
+lilypond-book yourfile.lytex
+latex yourfile.tex
+dvips -Ppdf yourfile.dvi
+ps2pdf yourfile.ps
+@end example
+
+@noindent
+The @file{.dvi} file created by this process will not contain
+ note heads. This is normal; if you follow the instructions, they
+will be included in the @file{.ps} and @file{.pdf} files.
+
+Running @command{dvips} may produce some warnings about fonts; these
+are harmless and may be ignored. If you are running @command{latex} in
+twocolumn mode, remember to add @code{-t landscape} to the
+@command{dvips} options.
+
+@subsubheading Texinfo
+
+To produce a Texinfo document (in any output format), follow the normal
+procedures for Texinfo; this is, either call @command{texi2pdf} or
+@command{texi2dvi} or @command{makeinfo}, depending on the output format
+you want to create.
+@ifinfo
+@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, and @ref{Creating
+an Info File, , , texinfo, GNU Texinfo}.
+@end ifinfo
+@ifnotinfo
+See the documentation of Texinfo for further details.
+@end ifnotinfo
+
+
+@subheading Command line options
+
+@command{lilypond-book} accepts the following command line options:
+
+@table @code
+@item -f @var{format}
+@itemx --format=@var{format}
+Specify the document type to process: @code{html}, @code{latex},
+@code{texi} (the default) or @code{docbook}. If this option is missing,
+@command{lilypond-book} tries to detect the format automatically, see
+@ref{Filename extensions}. Currently, @code{texi} is the same as
+@code{texi-html}.
+
+@c This complicated detail is not implemented, comment it out -jm
+@ignore
+The @code{texi} document type produces a Texinfo file with music
+fragments in the printed output only. For getting images in the HTML
+version, the format @code{texi-html} must be used instead.
+@end ignore
+
+@item -F @var{filter}
+@itemx --filter=@var{filter}
+Pipe snippets through @var{filter}. @code{lilypond-book} will
+not --filter and --process at the same time. For example,
+
+@example
+lilypond-book --filter='convert-ly --from=2.0.0 -' my-book.tely
+@end example
+
+@item -h
+@itemx --help
+Print a short help message.
+
+@item -I @var{dir}
+@itemx --include=@var{dir}
+Add @var{dir} to the include path. @command{lilypond-book} also looks
+for already compiled snippets in the include path, and does not write
+them back to the output directory, so in some cases it is necessary to
+invoke further processing commands such as @command{makeinfo} or
+@command{latex} with the same @code{-I @var{dir}} options.
+
+@item -o @var{dir}
+@itemx --output=@var{dir}
+Place generated files in directory @var{dir}. Running
+@command{lilypond-book} generates lots of small files that LilyPond will
+process. To avoid all that garbage in the source directory, use the
+@option{--output} command line option, and change to that directory
+before running @command{latex} or @command{makeinfo}.
+
+@example
+lilypond-book --output=out yourfile.lytex
+cd out
+...
+@end example
+
+@itemx --skip-lily-check
+Do not fail if no lilypond output is found. It is used for LilyPond
+Info documentation without images.
+
+@itemx --skip-png-check
+Do not fail if no PNG images are found for EPS files. It is used for
+LilyPond Info documentation without images.
+
+@itemx --lily-output-dir=@var{dir}
+Write lily-XXX files to directory @var{dir}, link into @code{--output}
+directory. Use this option to save building time for documents in
+different directories which share a lot of identical snippets.
+
+@itemx --info-images-dir=@var{dir}
+Format Texinfo output so that Info will look for images of music in
+@var{dir}.
+
+@itemx --latex-program=@var{prog}
+Run executable @command{prog} instead of @command{latex}. This is
+useful if your document is processed with @command{xelatex}, for
+example.
+
+@itemx --left-padding=@var{amount}
+Pad EPS boxes by this much. @var{amount} is measured in millimeters,
+and is 3.0 by default. This option should be used if the lines of
+music stick out of the right margin.
+
+The width of a tightly clipped system can vary, due to notation
+elements that stick into the left margin, such as bar numbers and
+instrument names. This option will shorten each line and move each
+line to the right by the same amount.
+
+@item -P @var{command}
+@itemx --process=@var{command}
+Process LilyPond snippets using @var{command}. The default command is
+@code{lilypond}. @code{lilypond-book} will not @code{--filter} and
+@code{--process} at the same time.
+
+@item --pdf
+Create PDF files for use with PDF@LaTeX{}.
+
+@itemx --use-source-file-names
+Write snippet output files with the same base name as their source file.
+This option works only for snippets included with @code{lilypondfile}
+and only if directories implied by @code{--output-dir} and
+@code{--lily-output-dir} options are different.
+
+@item -V
+@itemx --verbose
+Be verbose.
+
+@item -v
+@itemx --version
+Print version information.
+@end table
+
+@knownissues
+
+The Texinfo command @code{@@pagesizes} is not interpreted. Similarly,
+@LaTeX{} commands that change margins and line widths after the preamble
+are ignored.
+
+Only the first @code{\score} of a LilyPond block is processed.
+
+
+@node Filename extensions
+@section Filename extensions
+
+You can use any filename extension for the input file, but if you do not
+use the recommended extension for a particular format you may need to
+manually specify the output format; for details, see @ref{Invoking
+lilypond-book}. Otherwise, @command{lilypond-book} automatically
+selects the output format based on the input filename's extension.
+
+@quotation
+@multitable @columnfractions .2 .5
+@item @strong{extension} @tab @strong{output format}
+@item
+@item @file{.html} @tab HTML
+@item @file{.htmly} @tab HTML
+@item @file{.itely} @tab Texinfo
+@item @file{.latex} @tab @LaTeX{}
+@item @file{.lytex} @tab @LaTeX{}
+@item @file{.lyxml} @tab DocBook
+@item @file{.tely} @tab Texinfo
+@item @file{.tex} @tab @LaTeX{}
+@item @file{.texi} @tab Texinfo
+@item @file{.texinfo} @tab Texinfo
+@item @file{.xml} @tab HTML
+@end multitable
+@end quotation
+
+If you use the same filename extension for the input file than the
+extension @command{lilypond-book} uses for the output file, and if the
+input file is in the same directory as @command{lilypond-book} working
+directory, you must use @code{--output} option to make
+@command{lilypond-book} running, otherwise it will exit with an error
+message like @qq{Output would overwrite input file}.
+
+
+@node lilypond-book templates
+@section lilypond-book templates
+
+These templates are for use with @code{lilypond-book}. If you're not familiar
+with this program, please refer to
+@ref{lilypond-book}.
+
+@subsection LaTeX
+
+You can include LilyPond fragments in a LaTeX document.
+
+@example
+\documentclass[]@{article@}
+
+\begin@{document@}
+
+Normal LaTeX text.
+
+\begin@{lilypond@}
+\relative c'' @{
+ a4 b c d
+@}
+\end@{lilypond@}
+
+More LaTeX text, and options in square brackets.
+
+\begin@{lilypond@}[fragment,relative=2,quote,staffsize=26,verbatim]
+d4 c b a
+\end@{lilypond@}
+\end@{document@}
+@end example
+
+@subsection Texinfo
+
+You can include LilyPond fragments in Texinfo; in fact, this entire manual
+is written in Texinfo.
+
+@example
+\input texinfo @c -*-texinfo-*-
+@@node Top
+@@top
+
+Texinfo text
+
+@@lilypond
+\relative c' @{
+ a4 b c d
+@}
+@@end lilypond
+
+More Texinfo text, and options in brackets.
+
+@@lilypond[verbatim,fragment,ragged-right]
+d4 c b a
+@@end lilypond
+
+@@bye
+@end example
+
+
+@subsection html
+
+@example
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- header_tag -->
+<HTML>
+<body>
+
+<p>
+Documents for lilypond-book may freely mix music and text. For
+example,
+<lilypond>
+\relative c'' @{
+ a4 b c d
+@}
+</lilypond>
+</p>
+
+<p>
+Another bit of lilypond, this time with options:
+
+<lilypond fragment quote staffsize=26 verbatim>
+a4 b c d
+</lilypond>
+</p>
+
+</body>
+</html>
+
+
+@end example
+
+@subsection xelatex
+
+@verbatim
+\documentclass{article}
+\usepackage{ifxetex}
+\ifxetex
+%xetex specific stuff
+\usepackage{xunicode,fontspec,xltxtra}
+\setmainfont[Numbers=OldStyle]{Times New Roman}
+\setsansfont{Arial}
+\else
+%This can be empty if you are not going to use pdftex
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{mathptmx}%Times
+\usepackage{helvet}%Helvetica
+\fi
+%Here you can insert all packages that pdftex also understands
+\usepackage[ngerman,finnish,english]{babel}
+\usepackage{graphicx}
+
+\begin{document}
+\title{A short document with LilyPond and xelatex}
+\maketitle
+
+Normal \textbf{font} commands inside the \emph{text} work,
+because they \textsf{are supported by \LaTeX{} and XeteX.}
+If you want to use specific commands like \verb+\XeTeX+, you
+should include them again in a \verb+\ifxetex+ environment.
+You can use this to print the \ifxetex \XeTeX{} command \else
+XeTeX command \fi which is not known to normal \LaTeX .
+
+In normal text you can easily use LilyPond commands, like this:
+
+\begin{lilypond}
+{a2 b c'8 c' c' c'}
+\end{lilypond}
+
+\noindent
+and so on.
+
+The fonts of snippets set with LilyPond will have to be set from
+inside
+of the snippet. For this you should read the AU on how to use
+lilypond-book.
+
+\selectlanguage{ngerman}
+Auch Umlaute funktionieren ohne die \LaTeX -Befehle, wie auch alle
+anderen
+seltsamen Zeichen: __ ______, wenn sie von der Schriftart
+unterst__tzt werden.
+\end{document}
+@end verbatim
+
+
+@node Sharing the table of contents
+@section Sharing the table of contents
+
+These functions already exist in the OrchestralLily package:
+
+@example
+@url{http://repo.or.cz/w/orchestrallily.git}
+@end example
+
+For greater flexibility in text handling, some users prefer to
+export the table of contents from lilypond and read it into
+@LaTeX{}.
+
+@subsubheading Exporting the ToC from LilyPond
+
+This assumes that your score has multiple movements in the same lilypond
+output file.
+
+@smallexample
+#(define (oly:create-toc-file layout pages)
+ (let* ((label-table (ly:output-def-lookup layout 'label-page-table)))
+ (if (not (null? label-table))
+ (let* ((format-line (lambda (toc-item)
+ (let* ((label (car toc-item))
+ (text (caddr toc-item))
+ (label-page (and (list? label-table)
+ (assoc label label-table)))
+ (page (and label-page (cdr label-page))))
+ (format #f "~a, section, 1, @{~a@}, ~a" page text label))))
+ (formatted-toc-items (map format-line (toc-items)))
+ (whole-string (string-join formatted-toc-items ",\n"))
+ (output-name (ly:parser-output-name parser))
+ (outfilename (format "~a.toc" output-name))
+ (outfile (open-output-file outfilename)))
+ (if (output-port? outfile)
+ (display whole-string outfile)
+ (ly:warning (_ "Unable to open output file ~a for the TOC information") outfilename))
+ (close-output-port outfile)))))
+
+\paper @{
+ #(define (page-post-process layout pages) (oly:create-toc-file layout pages))
+@}
+@end smallexample
+
+@subsubheading Importing the ToC into LaTeX
+
+In LaTeX, the header should include:
+
+@c no, this doesn't require the smallexample, but since the other
+@c two blocks on this page use it, I figured I might as well
+@c user it here as well, for consistency. -gp
+@smallexample
+\usepackage@{pdfpages@}
+\includescore@{nameofthescore@}
+@end smallexample
+
+@noindent
+where @code{\includescore} is defined as:
+
+@smallexample
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \includescore@{PossibleExtension@}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Read in the TOC entries for a PDF file from the corresponding .toc file.
+% This requires some heave latex tweaking, since reading in things from a file
+% and inserting it into the arguments of a macro is not (easily) possible
+
+% Solution by Patrick Fimml on #latex on April 18, 2009:
+% \readfile@{filename@}@{\variable@}
+% reads in the contents of the file into \variable (undefined if file
+% doesn't exist)
+\newread\readfile@@f
+\def\readfile@@line#1@{%
+@{\catcode`\^^M=10\global\read\readfile@@f to \readfile@@tmp@}%
+\edef\do@{\noexpand\g@@addto@@macro@{\noexpand#1@}@{\readfile@@tmp@}@}\do%
+\ifeof\readfile@@f\else%
+\readfile@@line@{#1@}%
+\fi%
+@}
+\def\readfile#1#2@{%
+\openin\readfile@@f=#1 %
+\ifeof\readfile@@f%
+\typeout@{No TOC file #1 available!@}%
+\else%
+\gdef#2@{@}%
+\readfile@@line@{#2@}%
+\fi
+\closein\readfile@@f%
+@}%
+
+
+\newcommand@{\includescore@}[1]@{
+\def\oly@@fname@{\oly@@basename\@@ifmtarg@{#1@}@{@}@{_#1@}@}
+\let\oly@@addtotoc\undefined
+\readfile@{\oly@@xxxxxxxxx@}@{\oly@@addtotoc@}
+\ifx\oly@@addtotoc\undefined
+\includepdf[pages=-]@{\oly@@fname@}
+\else
+\edef\includeit@{\noexpand\includepdf[pages=-,addtotoc=@{\oly@@addtotoc@}]
+@{\oly@@fname@}@}\includeit
+\fi
+@}
+@end smallexample
+
+
+@node Alternate methods of mixing text and music
+@section Alternative methods of mixing text and music
+
+Other means of mixing text and music (without
+@command{lilypond-book}) are discussed in
+@ref{LilyPond output in other programs}.
+
+
Megkezdődik a telepítés, amely pár percet igénybe vehet. Ha a Részletek
mutatása gombra kattintasz, megláthatod, milyen fájlok és hova kerültek
telepítésre, de erre az információra nem lesz szükséged. Miután a telepítés
-befejeződött, kattints a Befejés gombra.
+befejeződött, kattints a Befejezés gombra.
@item
Sikeresen telepítetted a LilyPondot!
@enumerate
@item
-Kattints a Start menü/LilyPond/Eltávolítás parancsikonra.
+Kattints a Start menü > LilyPond > Eltávolítás parancsikonra.
@item
-A Vezérlőpult/Alkalmazások telepítése és eltávolítása ablakban jelöld ki a
+A Vezérlőpult > Alkalmazások telepítése és eltávolítása ablakban jelöld ki a
LilyPondot, és kattints az Eltávolítás gombra.
@end enumerate
tisztában ennek a fogalmával, akkor előbb ezt olvasd el!
@item
-@ifWebLinks{@manualDevelLearningSplitNoName-hu,@rlearningnamed{Top,Tankönyv}}
+@ifWebLinks{@manualStableLearningSplitNoName-hu,@rlearningnamed{Top,Tankönyv}}
Bevezetés a LilyPond használatába lépésről lépésre.
@details{Tankönyv}
@details{Kottaírás}
@item
-@ifWebLinks{@manualDevelUsageSplitNoName-hu,@rprogramnamed{Top,Használat}}
+@ifWebLinks{@manualStableUsageSplitNoName-hu,@rprogramnamed{Top,Használat}}
Bemutatja a alkalmazás parancssori használatát, ügyelve a különböző operációs
rendszerek közötti különbségekre.
@details{Használat}
@c use commas not colons
-Sven Axelsson,
-Pál Benkő,
Bertrand Bordage,
-Frédéric Bron,
-Peter Chubb,
-Hajo Dezelski,
-Richard Gay,
-Keith OHara,
-Andrew Hawryluk,
-Christian Hitz,
-Marc Hohl,
-Henning Hraban Ramm,
-Ian Hulin,
-Michael Käppler,
-Marek Klein,
-Kieren MacMillan,
-Thomas Morgan,
-Benjamin Peterson,
-Nathan Reed,
-Julien Rioux,
-Boris Shingarov,
-Patrick Schmidt,
-Owen Tuz,
-Jan Warchoł,
-Andrew Wilson,
-Rodolfo Zitellini
+Karin Hoethker,
+Jan Warchoł
@c no comma for last entry
@c use commas not colons
-Keith OHara,
-Marc Hohl,
-Alexander Kobel,
-Carsten Steger
-
@c no comma for last entry
@end macro
@c use commas not colons
-Colin Campbell,
-Andrew Hawryluk,
-James Lowe,
-Mike Moral,
-Ralph Palmer,
-David Pounder,
-Patrick Schmidt
+James Lowe
@c no comma for last entry
@macro bugsquadCurrent
-James E. Bailey,
Colin Campbell,
Phil Holmes,
-Urs Liska,
-Ralph Palmer,
-Kieren MacMillan,
+Derek Klinge,
Dmytro O. Redchuk
@c no comma for last entry
@c use commas not colons
-Christian Hitz
+Colin Campbell,
+Phil Holmes
@c no comma for last entry
@c use commas not colons
-Federico Bruni,
-Dénes Harmath,
-Jean-Charles Malahieude,
-@c @email{lolyfan@@wanadoo.fr},
-Tineke de Munnik,
-Till Paala,
-Ralf Wildenhues,
-Yoshiki Sawada
@c no comma for last entry
Erlend Aasland,
Maximilian Albert,
Guido Amoruso,
+Sven Axelsson,
Kristof Bastiaensen,
Pál Benkő,
-@c @email{benkop@@freestart.hu},
+Bertrand Bordage,
+Frédéric Bron,
Juliusz Chroboczek,
-@c @email{jch@@pps.jussieu.fr},
+Peter Chubb,
Angelo Contardi,
+Vicente Solsona Della,
+Hajo Dezelski,
+Michael Welsh Duggan,
David Feuer,
-@c @email{david.feuer@@gmail.com},
Bertalan Fodor,
+Richard Gay,
Mathieu Giraud,
+Lisa Opus Goldstein,
Yuval Harel,
+Andrew Hawryluk,
+Christian Hitz,
+Marc Hohl,
+Ian Hulin,
Bernard Hurley,
-@c @email{bernard@@fong-hurley.org.uk},
Yoshinobu Ishizaki,
Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
David Jedlinsky,
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
+Michael Käppler,
+Marek Klein,
Michael Krause,
-@c @email{m.krause@@tu-harburg.de},
Jean-Baptiste Lamy,
-@c @email{jiba@@tuxfamily.org},
Jonatan Liljedahl,
Peter Lutek,
+Kieren MacMillan,
Hendrik Maryns,
+Thomas Morgan,
Joe Neeman,
-@c @email{joeneeman@@gmail.com},
Matthias Neeracher,
+Keith OHara,
Tatsuya Ono,
-Lisa Opus Goldstein,
+Benjamin Peterson,
Guy Gascoigne-Piggford,
+Henning Hraban Ramm,
+Nathan Reed,
+Julien Rioux,
Stan Sanderson,
-Edward Sanford Sutton,
Andreas Scherer,
Johannes Schindelin,
+Patrick Schmidt,
+Boris Shingarov,
Kim Shrier,
-Vicente Solsona Della,
+Edward Sanford Sutton,
David Svoboda,
+Owen Tuz,
Sebastiano Vigna,
+Jan Warchoł,
Arno Waschk,
-Michael Welsh Duggan,
John Williams,
+Andrew Wilson,
Milan Zamazal,
-Rune Zedeler
+Rune Zedeler,
+Rodolfo Zitellini
@c no comma for last entry
@c use commas not colons
Tom Cato Amundsen,
-@c @email{tca@@gnu.org},
+Marc Hohl,
Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
+Alexander Kobel,
+Keith OHara,
+Carsten Steger
Arno Waschk,
-@c @email{arno@@arnowaschk.de},
Rune Zedeler
@c no comma for last entry
@c use commas not colons
Erlend Aasland,
-Trevor Bača,
+Trevor Bača
Alard de Boer,
+Colin Campbell,
Jay Hamilton,
-Andrew Hawryluk,
Joseph Harfouch,
+Andrew Hawryluk,
+Andrew Hawryluk,
Cameron Horsburgh,
Geoff Horton,
Ian Hulin,
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
Kurtis Kroon,
+James Lowe,
Dave Luttinen,
Kieren MacMillan,
Christian Mondrup,
-@c @email{scancm@@biobase.dk},
+Mike Moral,
Eyolf Østrem,
Ralph Palmer,
+Ralph Palmer,
François Pinard,
-@c @email{pinard@@iro.umontreal.ca},
-@c @uref{http://pinard.progiciels-bpi.ca/},
-Eduardo Vieira,
+David Pounder,
Michael Rasmussen,
Till Rettig,
+Patrick Schmidt,
Carl D. Sorensen,
Anh Hai Trinh,
+Eduardo Vieira,
Rune Zedeler
@c no comma for last entry
@macro bugsquadPrevious
-@c nobody here yet
+@c use commas not colons
+James E. Bailey,
+Urs Liska,
+Kieren MacMillan,
+Ralph Palmer
@c no comma for last entry
@end macro
@c use commas not colons
Anthony Fok,
-@c @email{foka@@debian.org},
+Christian Hitz,
Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
David Svoboda
-@c @email{svoboda@@cmu.edu}
@c no comma for last entry
@c use commas not colons
-Frédéric Chiasson,
-Abel Cheung,
Alard de Boer,
+Federico Bruni,
+Abel Cheung,
+Frédéric Chiasson,
Simon Dahlbacka,
Orm Finnendahl,
David González,
Nicolas Grandclaude,
-@c @email{ngclaude@@123mail.org},
+Dénes Harmath,
Damien Heurtebise,
-Matthieu Jacquot,
Bjoern Jacke,
-@c @email{bjoern.jacke@@gmx.de},
+Matthieu Jacquot,
Neil Jerram,
-@c @email{nj104@@cus.cam.ac.uk},
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
Nicolas Klutchnikoff,
Jean-Charles Malahieude,
-@c @email{lolyfan@@wanadoo.fr},
+Jean-Charles Malahieude,
Adrian Mariano,
Christian Mondrup,
Tineke de Munnik,
-@c @email{tdm@@dds.nl},
+Tineke de Munnik,
Steven Michael Murphy,
+Till Paala,
François Pinard,
Gauvain Pocentek,
-@c @email{gauvainpocentek@@yahoo.fr},
Till Rettig,
Ludovic Sardain,
-@c @email{ludovicsardain@@gmail.com},
+Yoshiki Sawada
Yoshiki Sawada,
Thomas Scharkowski,
Clytie Siddall,
August S. Sigov,
-@c @email{august@@infran.ru},
Roland Stigge,
Risto Vääräniemi,
Andrea Valle,
+Ralf Wildenhues,
Olcay Yıldırım
@c no comma for last entry
@item @uref{http://fontforge.sf.net/, FontForge} (20060125 or
newer; 20100501 or newer is recommended; must be compiled
-with --enable-double. Failure to do so can lead to poor intersection
-calculations and poorly-rendered glyphs.)
+with @option{--enable-double}. Failure to do so can lead to
+poor intersection calculations and poorly-rendered glyphs.)
@item @uref{http://www.gnu.org/software/bison/, GNU Bison}
We will have an extensive discussion period to determine the final
input specification.
-@warning{GLISS will start shortly after 2.14 is released.}
+@warning{GLISS will start shortly after 2.16 is released.}
@subsubheading Grand Organizing Project
giving us a much more stable foundation so that we can move ahead
with larger tasks in the future.
-@warning{GOP will start shortly after the 2.14 release.}
-
@end macro
\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@c This file is part of lilypond-learning.tely
@ignore
- Translation of GIT committish: 92190ad98deac78cf32837078741296205072119
+ Translation of GIT committish: 1c846b2c2348b4e0ca4a3c2e8fb267047ba2d203
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
* Concetti fondamentali:: Concetti di base necessari per leggere gli altri manuali.
* Tweaking output:: Introduzione alla modifica dell'output.
-Appendices
+Appendici
-* Templates:: Modelli già pronti.
+* Modelli:: Modelli già pronti.
* GNU Free Documentation License:: Licenza di questo documento.
-* LilyPond index::
+* Indice di LilyPond::
@end menu
@docMain
@include learning/tutorial.itely
@include learning/common-notation.itely
@include learning/fundamental.itely
+@include learning/tweaks.itely
-@node Tweaking output
-@chapter Tweaking output
-
-@untranslated
-
-@node Templates
-@appendix Templates
-
-@untranslated
-
+@include learning/templates.itely
@include fdl.itexi
@node Indice di LilyPond
@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@chapter Notazione comunemente utilizzata
@translationof Common notation
-Questo capitolo spiega come creare delle bella musica a stampa che
-faccia uso della notazione musicale comunemente utilizzata, seguendo
-il materiale esposto in @ref{Tutorial}.
+Questo capitolo spiega come creare dei belli spartiti che
+facciano uso della notazione musicale comunemente utilizzata, seguendo
+il materiale esposto nel @ref{Tutorial}.
@menu
* Notazione su un solo pentagramma::
@funindex eses
@funindex isis
-Glossario musicale: @rglos{sharp}, @rglos{flat}, @rglos{double sharp},
-@rglos{double flat}, @rglos{accidental}.
+Glossario musicale: @rglosnamed{sharp,diesis}, @rglosnamed{flat,bemolle},
+@rglosnamed{double sharp,doppio diesis},@rglosnamed{double flat,doppio bemolle},
+@rglosnamed{accidental,alterazione o accidente}.
Un @notation{diesis} si ottiene aggiungendo il suffisso @code{is} al nome della nota,
e un @notation{bemolle} aggiungendo @code{es}. Come puoi
si ottengono aggiungendo @code{isis} o @code{eses}. Questa sintassi
deriva dalle convenzioni per i nomi delle note presenti nelle lingue
nordiche e germaniche, come il tedesco e l'olandese. Per usare altri
-nomi per le @notation{alterazioni}, si veda @ruser{Nomi delle note in altre lingue}.
+nomi per le @notation{alterazioni}, si veda @ruser{Note names in other languages}.
@lilypond[verbatim,quote,relative=2]
cis4 ees fisis, aeses
@end lilypond
-@cindex chiave, armatura di, impostare
+@cindex armatura di chiave, impostare
@subheading Armature di chiave
@cindex armatura di chiave
@funindex \minor
@funindex minor
-Glossario musicale: @rglos{key signature}, @rglos{major},
-@rglos{minor}.
+Glossario musicale: @rglosnamed{key signature,armatura di chiave},
+@rglosnamed{major,maggiore}, @rglosnamed{minor,minore}.
-L'@notation{armatura di chiave} viene impostata col comando @code{\key}
+L' @notation{armatura di chiave} viene impostata col comando @code{\key}
seguito da un'altezza e da @code{\major} o @code{\minor}.
@lilypond[verbatim,quote,relative=2]
@subheading Attenzione: armature di chiave e altezze
-Glossario musicale: @rglos{accidental}, @rglos{key signature},
-@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
-@rglos{transposition}.
+Glossario musicale: @rglosnamed{accidental,alterazione},
+@rglosnamed{key signature,armatura di chiave}, @rglosnamed{pitch,altezza},
+@rglosnamed{flat,bemolle}, @rglosnamed{natural,bequadro}, @rglosnamed{sharp,diesis},
+@rglosnamed{transposition,trasposizione}.
-Per determinare se stampare o meno un'@notation{alterazione}, LilyPond
+Per determinare se mostrare o meno un'@notation{alterazione}, LilyPond
esamina le altezze e l'@notation{armatura di chiave}. L'armatura di
-chiave influisce soltanto sulle alterazioni che vengono @emph{stampate}, non
+chiave influisce soltanto sulle alterazioni che vengono @emph{mostrate}, non
sull'@notation{altezza} della nota! Questa è una caratteristica che spesso
causa confusione ai nuovi utenti, quindi la spiegheremo più dettagliatamente.
-LilyPond fa una netta distinzione tra contenuto musicale e
-layout. L'alterazione di (@notation{bemolle}, il segno di @notation{bequadro} o il
-@notation{diesis}) di una nota fanno parte dell'altezza, e sono quindi
+LilyPond fa una netta distinzione tra contenuto musicale e aspetto
+grafico. L'alterazione (@notation{bemolle}, @notation{bequadro} o
+@notation{diesis}) di una nota fa parte dell'altezza ed è quindi
contenuto musicale. Se un'alterazione (un segno @emph{stampato} di bemolle,
bequadro o diesis) venga posta oppure no di fronte alla nota corrispondente
-è una questione di layout. Il layout segue delle regole, dunque
-le alterazioni sono stampate automaticamente in base a queste
+è una questione di aspetto grafico. La formattazione segue delle regole, dunque
+le alterazioni sono inserite automaticamente in base a queste
regole. Le altezze nella tua musica sono opere d'arte, quindi non
verranno aggiunte in automatico: sei tu a dover inserire la nota che
vuoi sentire.
@notation{trasposizione} è più semplice, e le alterazioni possono essere
prodotte usando diverse convenzioni. Per alcuni esempi che mostrano come
sia possibile produrre delle alterazioni in base a regole diverse, si veda
-@ruser{Alterazioni automatiche}.
+@ruser{Automatic accidentals}.
@seealso
@subheading Legature di valore
-Glossario musicale: @rglos{tie}.
+Glossario musicale: @rglosnamed{tie,legatura di valore}.
Una @notation{legatura di valore} si ottiene apponendo una tilde @code{~} alla
prima nota della legatura.
@subheading Legature di portamento
-Glossario musicale: @rglos{slur}.
+Glossario musicale: @rglosnamed{slur,legatura di portamento}.
Una @notation{legatura di portamento} è una linea curva che collega più note. La
nota iniziale e quella finale sono indicate rispettivamente con
d4( c16) cis( d e c cis d) e( d4)
@end lilypond
-@subheading Legature di fraseggio
+@subheading Legature di frase
-Glossario musicale: @rglos{slur}, @rglos{phrasing}.
+Glossario musicale: @rglosnamed{slur,legatura di portamento},
+@rglosnamed{phrasing,legatura di frase}.
Le legature di portamento che indicano una @notation{frase} più lunga
possono essere inserite con @code{\(} e @code{\)}. E' possibile avere allo
@cindex legature di portamento vs. legature di valore
@subheading Attenzione: legature di portamento vs. legature di valore
-Glossario musicale: @rglos{articulation}, @rglos{slur}, @rglos{tie}.
+Glossario musicale: @rglosnamed{articulation,articolazione},
+@rglosnamed{slur,legatura di portamento}, @rglosnamed{tie,legatura di valore}.
Una @notation{legatura di portamento} ha lo stesso aspetto di una
@notation{legatura di valore}, ma un significato diverso. Una legatura
@cindex accento
@cindex staccato
-Glossario musicale: @rglos{articulation}.
+Glossario musicale: @rglosnamed{articulation,articolazione}.
Le @notation{articolazioni} di uso comune possono essere aggiunte a una nota
con una lineetta @code{-} e un singolo carattere:
@funindex ^
@funindex _
-Glossario musicale: @rglos{fingering}.
+Glossario musicale: @rglosnamed{fingering,diteggiatura}.
Analogalmente, le indicazioni di @notation{diteggiatura} possono essere
aggiunte a una nota con una lineetta (@code{-}) e il numero che si
@funindex \!
@funindex !
-Glossario musicale: @rglos{dynamics}, @rglos{crescendo},
+Glossario musicale: @rglosnamed{dynamics,dinamica}, @rglos{crescendo},
@rglos{decrescendo}.
I segni di @notation{dinamica} si ottengono aggiungendo alla nota
@funindex \autoBeamOn
@funindex autoBeamOn
-Glossario musicale: @rglos{beam}.
+Glossario musicale: @rglosnamed{beam,travatura}.
Tutte le @notation{travature} vengono disegnate automaticamente:
@end lilypond
Se non ti piace il modo in cui vengono prodotte automaticamente le travature, è
-possibile sovrascriverle manualmente. Per correggere soltanto una singola travatura, indica
-la prima nota da raggruppare con @code{[} e l'ultima con @code{]}.
+possibile sovrascriverle manualmente. Per correggere soltanto una singola
+travatura, indica la prima nota da raggruppare con @code{[} e l'ultima con @code{]}.
@lilypond[verbatim,quote,relative=2]
a8[ ais] d[ ees r d] c16 b a8
Glossario musicale: @rglos{anacrusis}.
-Un' @notation{anacrusi}) può essere inserita con la parola chiave
+Un' @notation{anacrusi} può essere inserita con la parola chiave
@code{\partial}. Questa è seguita da una durata: @code{\partial 4}
è un'anacrusi di semiminima e @code{\partial 8} di croma.
@funindex \times
@funindex times
-Glossario musicale: @rglos{note value}, @rglos{triplet}.
+Glossario musicale: @rglosnamed{note value,durata},
+@rglosnamed{triplet,gruppo irregolare}.
I @notation{gruppi irregolari} vengono preceduti dalla parola chiave
@code{\times}. Questa richiede due argomenti: una frazione e un frammento
@funindex \appoggiatura
@funindex acciaccatura
-Glossario musicale: @rglos{grace notes}, @rglos{acciaccatura},
+Glossario musicale: @rglosnamed{grace notes,abbellimenti}, @rglos{acciaccatura},
@rglos{appoggiatura}.
Gli @notation{abbellimenti} sono creati col comando @code{\grace},
@menu
* Espressioni musicali::
-* Pentagrammi multipli::
+* Righi multipli::
* Gruppi di pentagrammi::
* Combinare le note negli accordi::
* Polifonia su un singolo rigo::
@translationof Music expressions explained
@cindex espressione musicale
-@cindex espressione, musicale
@cindex espressione musicale composta
-@cindex espressione musicale, composta
Nei file di input di LilyPond, la musica è rappresentata dalle
@emph{espressioni musicali}. Anche una singola nota è un'espressione
@funindex >>
@funindex << ... >>
-Glossario musicale: @rglos{polyphony}.
+Glossario musicale: @rglosnamed{polyphony,polifonia}.
Questa tecnica è utile per la musica @notation{polifonica}. Per inserire
della musica che abbia più voci o più linee di pentagramma, basta combinare
@funindex ChoirStaff
Glossario musicale:
-@rglos{brace},
-@rglos{staff},
-@rglos{system}.
+@rglosnamed{brace,graffa},
+@rglosnamed{staff,pentagramma o rigo},
+@rglosnamed{system,sistema}.
La musica per pianoforte viene stampata su due righi musicali collegati
con una @notation{graffa}.
@subsection Combinare le note negli accordi
@translationof Combining notes into chords
-Glossario musicale: @rglos{chord}.
+Glossario musicale: @rglosnamed{chord,accordo}.
@cindex accordi
@cindex durate delle note negli accordi
@funindex \addlyrics
@funindex addlyrics
-Glossario musicale: @rglos{lyrics}.
+Glossario musicale: @rglosnamed{lyrics,testo}.
Questo è l'inizio della melodia di una
filastrocca, @notation{Girls and boys come out to play}:
>>
@end lilypond
-@warning{È fondamentale che l'ultima sillaba sia dalla parentesi graffa che
-chiude con uno spazio o una nuova linea, altrimenti si presumerà
+@warning{È fondamentale che l'ultima sillaba sia separata dalla parentesi
+graffa di chiusura con uno spazio o una nuova linea, altrimenti si presumerà
che sia parte della sillaba, e questo causerà un errore poco
chiaro, vedi @rprogram{Apparent error in ../ly/init.ly}.}
@cindex testo, parole polisillabiche
@cindex parole con sillabe multiple nel testo
-Glossario musicale: @rglos{melisma}, @rglos{extender line}.
+Glossario musicale: @rglos{melisma}, @rglosnamed{extender line,linea di estensione}.
La prossima riga della filastrocca è @notation{The moon doth
shine as bright as day}. Aggiungiamola:
@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: 92d7753b7a1e9887afcc6ad6864a78940e7878fb
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@chapter Concetti fondamentali
@translationof Fundamental concepts
-Nel Tutorial abbiamo visto come produrre della bella musica a stampa
-da un semplice file di testo. Questa sezione presenta i concetti e le
+Nel Tutorial abbiamo visto come produrre dei belli spartiti da un
+semplice file di testo. Questa sezione presenta i concetti e le
tecniche richiesti per produrre partiture ugualmente belle, ma
più complesse.
\header @{ @}
\score @{
- @var{...compound music expression...} % all the music goes here!
+ @var{...espressione musicale composta...} % tutta la musica va qui!
\layout @{ @}
\midi @{ @}
@}
@example
@{
\new StaffGroup <<
- @var{...insert the whole score of a Wagner opera in here...}
+ @var{...inserisci qui l'intera opera di Wagner...}
>>
@}
@end example
di righi con una parentesi graffa a sinistra, ma abbiamo comunque bisogno dei
righi per il canto e per il pianoforte.
-@example
-\score @{
- @{ % questa parentesi inizia la principale espressione musicale composta
- \new StaffGroup <<
- @var{...inserisci qui la partitura completa di un'opera di Wagner...}
- >>
- @} % questa parentesi chiude la principale espressione musicale composta
- \layout @{ @}
-@}
-@end example
-
-Un'intera opera di Wagner sarebbe probabilmente il doppio di questo
-manuale, quindi aggiungeremo solo un pianoforte e un cantante. Per questo
-ensemble non abbiamo bisongo di @code{StaffGroup}, che non fa altro che
-raggruppare un certo numero di righi con una parentesi a sinistra, dunque lo
-toglieremo. Tuttavia @emph{abbiamo} bisogno di un pianoforte e di una voce.
-
@example
\score @{
<<
@item @code{\( .. \)}
@tab Contrassegna l'inizio e la fine di una legatura di frase
@item @code{[ .. ]}
- @tab Contrassegna l'inizio e la fine di una cediglia impostata manualmente
+ @tab Contrassegna l'inizio e la fine di una travatura impostata manualmente
@end multitable
A questi dovremmo aggiungere altri costrutti che generano linee tra
queste non sono parentesi nel senso che racchiudono qualcosa -- sono semplicemente
dei contrassegni che indicano dove qualcosa inizia e finisce.
-Quindi, ad esempio, una legatura di frase può iniziare prima di una cediglia
-inserita manualmente e finire prima della fine della cediglia -- non
+Quindi, ad esempio, una legatura di frase può iniziare prima di una travatura
+inserita manualmente e finire prima della fine della travatura -- non
molto musicale, forse, ma possibile:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
- { g8\( a b[ c b\) a] g4 }
+@lilypond[quote,verbatim,ragged-right,relative=2]
+g8\( a b[ c b\) a] g4
@end lilypond
In generale, tipi diversi di parentesi, costrutti in parentesi e segni che
riguardano gruppi irregolari, legature e abbellimenti possono essere combinati
-liberamente. L'esempio seguente mostra una cediglia che si estende su un
+liberamente. L'esempio seguente mostra una travatura che si estende su un
gruppo irregolare (linea 1), una legatura di portamento che si estende su
-una terzina (linea 2), una cediglia e una legatura di portamento che si
+una terzina (linea 2), una travatura e una legatura di portamento che si
estendono su una terzina, una legatura di valore che attraversa due gruppi
irregolari, e una legatura di frase che si estende fuori da un gruppo
irregolare (linee 3 e 4).
-@lilypond[quote,verbatim,fragment,ragged-right]
-{
- r16[ g \times 2/3 { r16 e'8] }
- g16( a \times 2/3 { b16 d) e' }
- g8[( a \times 2/3 { b8 d') e'~] } |
- \times 4/5 { e'32\( a b d' e' } a'4.\)
-}
+@lilypond[quote,verbatim,ragged-right,relative=1]
+r16[ g \times 2/3 { r16 e'8] }
+g,16( a \times 2/3 { b16 d) e }
+g,8[( a \times 2/3 { b8 d) e~] } |
+\times 4/5 { e32\( a, b d e } a4.\)
@end lilypond
Ecco come suddividere gli accordi precedenti in due voci e aggiungere sia
la nota di passaggio che la legatura di portamento:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
\key g \major
% Voice "1" Voice "2"
<< { g4 fis8( g) a4 g } \\ { d4 d d d } >>
Ecco un altro semplice esempio:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
\key d \minor
% Voice "1" Voice "2"
<< { r4 g g4. a8 } \\ { d,2 d4 g } >> |
può aiutare la leggibilità del codice, ma se ci sono molte note in
ogni battuta è preferibile dividere ogni voce, così:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
\key d \minor
<< {
% Voice "1"
In ogni contesto, la direzione verticale di legature di portamento,
gambi, legature di valore, dinamica, etc., è impostata correttamente.
-@lilypond[quote,verbatim,fragment]
+@lilypond[quote,verbatim]
\new Staff \relative c' {
% Main voice
c16 d e f
I comandi @code{\voiceXXXStyle} sono pensati soprattutto
per documenti didattici come questo. Modificano il colore
-della testa, del gambo e delle cediglie, e lo stile della
+della testa, del gambo e delle travature, e lo stile della
testa, così da rendere le voci facilmente distinguibili.
La voce uno è impostata su rombi rossi, la voce due su triangoli blu,
la voce tre su cerchi barrati verdi, e la voce quattro (non impiegata
iniziamo usando il costrutto @code{<< \\ >>} per inserire la musica
della prima battuta in tre voci:
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
\new Staff \relative c'' {
\key aes \major
<<
musica nella voce quattro. Si può fare aggiungendo semplicemente un altro
paio di @code {\\}:
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
\new Staff \relative c'' {
\key aes \major
<< % Voice one
esplicitamente il testo alle note con @code{\lyricsto@{@}}, tramite
il nome assegnato alla voce.
-@lilypond[quote,verbatim,fragment]
+@lilypond[quote,verbatim]
<<
\new Voice = "one" {
\relative c'' {
nell'output. Ad esempio, si confrontino l'input e l'output del
seguente esempio:
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
cis4 cis2. | a4 a2. |
@end lilypond
Ogni segno presente nell'output di una partitura realizzata con LilyPond
è prodotto da un @code{Engraver} (incisore). Dunque c'è un incisore per
creare i righi, uno per le teste delle note, uno per i gambi, uno per le
-cediglie, etc, etc. In totale ci sono più di 120 incisori!
+travature, etc, etc. In totale ci sono più di 120 incisori!
Fortunatamente, per gran parte delle partiture è necessario conoscerne
pochi soltanto, e per partiture semplici non occorre conoscerne
alcuno.
@item Accidental_engraver
@tab Crea le alterazioni, le alterazioni di precauzione e di cortesia
@item Beam_engraver
- @tab Incide le cediglie
+ @tab Incide le travature
@item Clef_engraver
@tab Incide le chiavi
@item Completion_heads_engraver
le altre cose) sulla dimensione delle teste delle note. La modifica è relativa
al valore predefinito, non all'ultimo valore impostato.
-@lilypond[quote,verbatim,ragged-right,relative=1,fragment]
+@lilypond[quote,verbatim,ragged-right,relative=1]
c4 d
% make note heads smaller
\set fontSize = #-4
per tutti i contesti di un particolare tipo includendo il comando
@code{\set} in un blocco @code{\context} nello stesso modo.
-
@seealso
Guida alla notazione: @ruser{Modifying context plug-ins},
@ruser{Changing context default settings}.
+@knownissues
+Gli incisori @code{Stem_engraver} e @code{Beam_engraver} fissano i propri
+oggetti alle teste delle note. Se si elimina @code{Note_heads_engraver}
+le teste delle note non vengono prodotte e di conseguenza non vengono creati
+nemmeno i gambi né le travature.
+
@node Estendere i modelli
@section Estendere i modelli
* Soprano e violoncello::
* Partitura vocale a quattro parti SATB::
* Scrivere una partitura da zero::
-* Ridurre le dimensioni del file grazie a variabili e funzioni::
+* Ridurre l'input grazie a variabili e funzioni::
* Partiture e parti::
@end menu
un'occhiata a @ruser{Overview of modifying properties}.
In questo caso, vogliamo modificare soltanto la sottoproprietà
@code{allungabilità}. Di nuovo, chi è curioso può trovare i valori predefiniti
-per la proprietà staff-staff-spacing nel file @file{scm/@/define-grobs@/.scm}
+per la proprietà staff-staff-spacing nel file @file{scm/define-grobs.scm}
guardando la definizione del grob @code{VerticalAxisGroup}. Il valore dell'
@code{allungabilità} viene preso dalla definizione del contesto @code{PianoStaff}
-(nel file @file{ly/@/engraver-init@/.ly}) così che i valori siano identici.
+(nel file @file{ly/engraver-init.ly}) così che i valori siano identici.
@example
\score @{
@seealso
Glossario musicale:
-@rglos{system}.
+@rglosnamed{system,sistema}.
@node Ridurre l'input grazie a variabili e funzioni
@subsection Ridurre l'input grazie a variabili e funzioni
L'uso di variabili è anche un buon modo per ridurre il lavoro quando
la sintassi di input di LilyPond cambia (vedi
-@rprogram{Updating files with convert-ly}). Se si ha un'unica
+@rprogram{Aggiornare i file con convert-ly}). Se si ha un'unica
definizione (come @code{\dolce}) per tutti i file di input
(vedi @ref{Style sheets}), allora se la sintassi cambia bisogna
aggiornare soltanto la singola definizione @code{\dolce},
-invece di dover modificare tutti i file @code{.ly}.
+invece di dover modificare tutti i file @file{.ly}.
@node Partiture e parti
@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Eindhoven), da qualche parte nel 1995 che Jan, uno degli strampalati
violisti, ha parlato ad Han-Wen, uno degli alterati cornisti, del
nuovo grande progetto a cui stava lavorando. Era un sistema automatico
-per stampare musica (per la precisione, si trattava di MPP, un
-preprocessore per MusiXTeX). Accadde che per caso Han-Wen desiderava
-stampare alcune parti di una partitura, così iniziò a sperimentare il
-software, e ne rimase presto affascinato. Si decise che MPP era
+per creare spartiti (per la precisione, si trattava di MPP, un
+preprocessore per MusiXTeX). Accadde che per caso Han-Wen desiderasse
+scrivere delle parti di una partitura, così iniziò a sperimentare il
+software e ne rimase presto affascinato. Si decise che MPP era
un vicolo cieco. Dopo molte discussioni e animati scambi di email,
Han-Wen diede inizio a LilyPond nel 1996. Questa volta è stato Jan ad
essere coinvolto nel progetto di Han-Wen.
gli utenti che ci hanno segnalato bug, dato consigli o contribuito
in qualunque altro modo a LilyPond.
-Suonare e stampare la musica sono più di una bella analogia.
+Suonare e creare spartiti sono più di una bella analogia.
Programmare insieme è molto divertente, e aiutare le persone è
profondamente appagante, ma alla fine lavorare a LilyPond è un modo
per esprimere il nostro grande amore per la musica. Che possa aiutarvi
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+
+@ignore
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.14.0"
+
+@node Modelli
+@appendix Modelli
+@translationof Templates
+
+Questa sezione del manuale contiene dei modelli con la struttura del file
+LilyPond già preimpostata. Non ti resta che aggiungere le note, eseguire
+LilyPond e goderti dei belli spartiti!
+
+@c bad node name for ancient notation to avoid conflict
+@menu
+* Rigo singolo::
+* Modelli per pianoforte::
+* Quartetto d'archi::
+* Gruppi vocali::
+* Modelli per orchestra::
+* Modelli per la notazione antica::
+* Altri modelli::
+@end menu
+
+
+@node Rigo singolo
+@appendixsec Rigo singolo
+@translationof Single staff
+
+@appendixsubsec Solo note
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion]
+{single-staff-template-with-only-notes.ly}
+
+
+@appendixsubsec Note e testo
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,addversion]
+{single-staff-template-with-notes-and-lyrics.ly}
+
+@appendixsubsec Note e accordi
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{single-staff-template-with-notes-and-chords.ly}
+
+@appendixsubsec Note, testo e accordi.
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{single-staff-template-with-notes,-lyrics,-and-chords.ly}
+
+
+@node Modelli per pianoforte
+@appendixsec Modelli per pianoforte
+@translationof Piano templates
+
+@appendixsubsec Solo pianoforte
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{piano-template-simple.ly}
+
+@appendixsubsec Pianoforte e melodia con testo
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{piano-template-with-melody-and-lyrics.ly}
+
+@appendixsubsec Pianoforte con testo al centro
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{piano-template-with-centered-lyrics.ly}
+
+@appendixsubsec Pianoforte con dinamiche al centro
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{piano-template-with-centered-dynamics.ly}
+
+
+@node Quartetto d'archi
+@appendixsec Quartetto d'archi
+@translationof String quartet
+
+@appendixsubsec Quartetto d'archi
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{string-quartet-template-simple.ly}
+
+@appendixsubsec Parti di un quartetto d'archi
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{string-quartet-template-with-separate-parts.ly}
+
+
+@node Gruppi vocali
+@appendixsec Gruppi vocali
+@translationof Vocal ensembles
+
+@appendixsubsec Partitura vocale SATB
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{vocal-ensemble-template.ly}
+
+@appendixsubsec Partitura vocale SATB e automatica riduzione per pianoforte
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{vocal-ensemble-template-with-automatic-piano-reduction.ly}
+
+@appendixsubsec SATB con contesti allineati
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
+
+@appendixsubsec SATB su quattro righi
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{satb-choir-template---four-staves.ly}
+
+@appendixsubsec Strofa sola e ritornello a due parti
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{vocal-ensemble-template-with-verse-and-refrain.ly}
+
+@appendixsubsec Inni
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{hymn-template.ly}
+
+@appendixsubsec Salmi
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{anglican-psalm-template.ly}
+
+
+@node Modelli per orchestra
+@appendixsec Modelli per orchestra
+@translationof Orchestral templates
+
+@appendixsubsec Orchestra, coro e pianoforte
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{orchestra,-choir-and-piano-template.ly}
+
+
+@c bad node name to avoid node name conflict
+@node Modelli per notazione antica
+@appendixsec Modelli per notazione antica
+@translationof Ancient notation templates
+
+@appendixsubsec Transcrizione di musica mensurale
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{ancient-notation-template----modern-transcription-of-mensural-music.ly}
+
+@appendixsubsec Trascrizione di musica Gregoriana
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{ancient-notation-template----modern-transcription-of-gregorian-music.ly}
+
+
+@node Altri modelli
+@appendixsec Altri modelli
+@translationof Other templates
+
+@appendixsubsec Combo jazz
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{jazz-combo-template.ly}
+
+
+
+
+@ignore
+This isn't very useful, and only duplicates material in
+"global issues". And if this info changes, this section often
+gets forgotten.
+
+@no de Other templates
+@se ction Other templates
+@su bsection All headers
+
+This template displays all available headers. Some of them are only
+used in the Mutopia project; they don't affect the printed output at
+all. They are used if you want the piece to be listed with different
+information in the Mutopia database than you wish to have printed on the
+music. For example, Mutopia lists the composer of the famous D major
+violin concerto as TchaikovskyPI, whereas perhaps you wish to print
+"Petr Tchaikowski" on your music.
+
+@ The `line-width' is for \header.
+@li lypond[quote,verbatim,ragged-right,line-width]
+\version "2.14.0"
+\header {
+ dedication = "dedication"
+ title = "Title"
+ subtitle = "Subtitle"
+ subsubtitle = "Subsubtitle"
+ composer = "Composer (xxxx-yyyy)"
+ opus = "Opus 0"
+ piece = "Piece I"
+ meter = "meter"
+ instrument = "Instrument"
+ arranger = "Arranger"
+ poet = "Poet"
+ texttranslator = "Translator"
+ copyright = "public domain"
+
+ % These are headers used by the Mutopia Project
+ % http://www.mutopiaproject.org/
+ mutopiatitle = ""
+ mutopiacomposer = ""
+ mutopiapoet = ""
+ mutopiainstrument = ""
+ date = "composer's dates"
+ source = "urtext "
+ maintainer = "your name here"
+ maintainerEmail = "your email here"
+ maintainerWeb = "your home page"
+ lastupdated = "2004/Aug/26"
+}
+
+\score {
+ { c'4 }
+ \header {
+ piece = "piece1"
+ opus = "opus1"
+ }
+}
+
+\score {
+ { c'4 }
+ \header {
+ piece = "piece2"
+ opus = "opus2"
+ }
+}
+@end lilypond
+@end ignore
@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: 10bd5cc93870ac4b884b8cb938cfc6a19c768097
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@item
@ref{MacOS X, @sourceimage{logo-macosx,,,}}
-@ref{MacOS X, MacOS X} (graphical)
+@ref{MacOS X, MacOS X} (grafico)
@item
@ref{Windows, @sourceimage{logo-windows,,,}}
-@ref{Windows, Microsoft Windows} (graphical)
+@ref{Windows, Microsoft Windows} (grafico)
@item
-@ref{Command-line, @sourceimage{logo-linux,,,}
+@ref{Linea di comando, @sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}
@sourceimage{logo-macosx,,,}
@sourceimage{logo-windows,,,}
}
-@ref{Command-line, All operating systems} (command-line)
+@ref{Linea di comando, Tutti i sistemi operativi} (linea di comando)
@end itemize
@funindex '
@funindex ,
-Glossario musicale: @rglos{pitch}, @rglos{interval},
-@rglos{scale}, @rglos{middle C}, @rglos{octave},
-@rglos{accidental}.
+Glossario musicale: @rglosnamed{pitch,altezza}, @rglosnamed{interval,intervallo},
+@rglosnamed{scale,scala}, @rglosnamed{middle C,Do centrale}, @rglosnamed{octave,ottava},
+@rglosnamed{accidental,alterazione}.
Il modo più semplice per inserire le note è usare il modo @code{\relative}
(relativo). In questo modo, l'ottava viene scelta automaticamente in
@cindex nota puntata
@cindex notazione delle durate
-Glossario musicale: @rglos{beam}, @rglos{duration},
-@rglos{whole note}, @rglos{half note}, @rglos{quarter note},
-@rglos{dotted note}.
+Glossario musicale: @rglosnamed{beam,coda}, @rglosnamed{duration,durata},
+@rglosnamed{whole note,semibreve}, @rglosnamed{half note,minima}, @rglosnamed{quarter note,semiminima},
+@rglosnamed{dotted note,nota puntata}.
La @notation{durata} di una nota viene indicata da un numero che segue
il nome della nota: @code{1} per una @notation{semibreve}, @code{2} per
@cindex pausa
@cindex notazione delle pause
-Glossario musicale: @rglos{rest}.
+Glossario musicale: @rglosnamed{rest,pausa}.
Una @notation{pausa} viene inserita proprio come una nota ma col nome
@code{r}@tie{}:
@funindex \time
@funindex time
-Glossario musicale: @rglos{time signature}.
+Glossario musicale: @rglosnamed{time signature,indicazione di tempo}.
Il @notation{tempo} si imposta con il comando @code{\time}:
}
@end lilypond
-@subheading Tempo marks
+@subheading Indicazioni di tempo
-@cindex tempo marks
-@cindex metronome marks
+@cindex indicazioni di tempo
+@cindex indicazioni metronomiche
@funindex \tempo
@funindex tempo
-Glossario musicale: @rglos{tempo indication}, @rglos{metronome}.
+Glossario musicale: @rglosnamed{tempo indication,indicazione di tempo},
+@rglosnamed{metronome,metronomo}.
L' @notation{indicazione di tempo} e l' @notation{indicazione metronomica} si
impostano col comando @code{\tempo}:
@funindex \clef
@funindex clef
-Glossario musicale: @rglos{clef}.
+Glossario musicale: @rglosnamed{clef,chiave}.
La @notation{chiave} si imposta con il comando @code{\clef}:
@item
@strong{Dichiarazione di versione}:
-Ogni file LilyPond dovrebbe contenere una dichiarazione di versione. Una
+Ogni file LilyPond deve contenere una dichiarazione di versione. Una
dichiarazione di versione è una linea che indica la versione di LilyPond per la
quale il file è stato scritto, come nel seguente esempio:
sintassi di LilyPond cambia. Secondo, indica la versione di LilyPond richiesta
per compilare il file.
-Se la dichiarazione di versione è omessa dal file di input, LilyPond stampa
+Se la dichiarazione di versione è omessa dal file di input, LilyPond mostra
un avvertimento durante la compilazione del file.
@item
@example
a4 a a a
-% this comment refers to the Bs
+% questo commento si riferisce ai Si
b2 b
@end example
blocco. Il seguente frammento mostra gli usi possibili per i commenti:
@example
-% notes for twinkle twinkle follow
+% ecco le note di "Ah! Vous dirai-je, Maman"
c4 c g' g a a g2
%@{
- This line, and the notes below are ignored,
- since they are in a block comment.
+ Questa linea e le note sotto vengono ignorate,
+ perché si trovano in un commento di blocco.
f4 f e e d d c2
%@}
@section Gestire gli errori
@translationof Dealing with errors
-@cindex troubleshooting
+@cindex risoluzione dei problemi
-Talvolta LilyPond non genera l'output che vorresti. Questa
+Talvolta LilyPond non genera l'output che desideri. Questa
sezione fornisce alcuni link che possono aiutarti a risolvere i
problemi che potrai incontrare.
per le persone che sono abituate a un'interfaccia grafica, perché è possibile
creare dei file di input non validi. Quando questo accade, un approccio logico
è il modo migliore per identificare e risolvere il problema. Alcune linee guida
-che ti aiutano a imparare questo sono indicate in @rprogram{Troubleshooting}.
+che ti aiutano a imparare questo sono indicate in @rprogram{Risoluzione dei problemi}.
@node Alcuni errori comuni
Ci sono alcuni errori comuni che sono difficili da risolvere basandosi
soltanto sui messaggi di errore che compaiono. Questi sono
-descritti in @rprogram{Common errors}.
+descritti in @rprogram{Errori comuni}.
@node Come leggere i manuali
@section Come leggere i manuali
@translationof How to read the manuals
-Questa sezione spiega come leggere la documentazione in modo efficiente, e
-introduce anche alcune utili funzionalità interattive che sono disponibili
+Questa sezione spiega come leggere la documentazione in modo efficiente e
+introduce alcune utili funzionalità interattive che sono disponibili
nella versione online della documentazione.
@menu
L'input di LilyPond deve essere compreso dai segni @code{@{ @}} o da
@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}}, come abbiamo visto in @ref{Lavorare
-sui file di input}. Nella parte restante di questo manuale, gran parte
-degli esempi ometterà questi segni. Per replicare gli esempi, puoi copiare
+sui file di input}. Nel resto di questo manuale gran parte degli esempi
+ometterà questi segni. Per replicare gli esempi, puoi copiare
e incollare l'input mostrato, ma @strong{devi} aggiungere
@q{@w{@code{@bs{}relative c'' @{ @dots{} @}}}} in questo modo:
@example
\relative c'' @{
- @dots{}example goes here@dots{}
+ @dots{}inserire qui l'esempio@dots{}
@}
@end example
esteso. La maggior parte delle persone vuole aggiungere del materiale a
un brano esistente, per questo abbiamo strutturato il manuale in questo modo.
-Ricorda che i file LilyPond dovrebbero avere una dichiarazione di
+Ricorda che i file LilyPond devono avere una dichiarazione di
versione (@code{\version}). Nei manuali la dichiarazione è omessa
perché gli esempi sono frammenti di codice e non file completi.
Ma dovresti prendere l'abitudine di includerla nei tuoi file.
@c no verbatim here
@lilypond[quote]
\relative c'' {
- c4-\markup { \bold \huge { Click here. } }
+ c4-\markup { \bold \huge { Clicca qui. } }
}
@end lilypond
saltano la lettura di parti fondamentali.
@warning{Non saltare le parti importanti della
-documentazione. Altrimenti ti risulterà molto più difficile comprendere
-le sezioni successive.}
+documentazione. Altrimenti ti risulterà molto più difficile
+comprendere le sezioni successive.}
@itemize
@item
@strong{Prima di iniziare un grande progetto}: leggi il documento
-@rprogram{Suggestions for writing files} del manuale di Uso del programma.
+@rprogram{Consigli su come scrivere i file} del manuale di Uso del programma.
@end itemize
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 92190ad98deac78cf32837078741296205072119
+ Translation of GIT committish: 52f98b4061e0eb74b7c1dbcc29e74538b374752f
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@end ifnothtml
+@c do not translate the following macro -- it is used in
+@c an untranslated manual.
+
+@ifhtml
+
+@macro advanced{TEXT}
+@html
+<div class="advanced">
+@end html
+@strong{Advanced note:} \TEXT\
+@c keep the space for proper nesting of </p>
+
+@html
+</div>
+@end html
+@end macro
+
+@end ifhtml
+
+@ifnothtml
+
+@macro advanced{TEXT}
+@quotation
+@b{Advanced note:} \TEXT\
+@end quotation
+@end macro
+
+@end ifnothtml
+
@macro docMain
@cartouche
Per maggiori informazioni su come questo manuale si integra col resto
della documentazione, o per leggere questo manuale in altri formati, si veda
-@rweb{Manuals}.
+@rweb{Manuali}.
Se ti manca qualche manuale, puoi trovare la completa documentazione
all'indirizzo @w{@uref{http://@/www@/.lilypond@/.org/}}.
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo esempio mostra come realizzare una trascrizione moderna di musica
+gregoriana. La musica gregoriana non presenta suddivisione in misure né gambi;
+utilizza soltanto le teste della minima e della semiminima, e dei segni
+appositi che indicano pause di diversa lunghezza.
+
+"
+ doctitleit = "Modello per notazione antica -- trascrizione moderna di musica gregoriana"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Quando si trascrive musica mensurale, può essere utile inserire all'inizio del
+pezzo un incipit che indichi l'intonazione e il tempo originali. Le stanghette
+di battuta, a cui i musicisti di oggi sono abituati e che aiutano a riconoscere
+più velocemente gli schemi ritmici, durante l'epoca della musica mensurale non
+erano ancora state introdotte; infatti il metro cambiava spesso ogni poche
+note. Come compromesso, le stanghette vengono spesso inserite tra i righi
+invece che al loro interno.
+
+"
+ doctitleit = "Modello per notazione antica -- trascrizione moderna di musica mensurale"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello presenta un modo di impostare un salmo anglicano. Mostra
+anche come le strofe possono essere aggiunte come testo separato al di sotto
+della musica. Le due strofe sono scritte con stili diversi per illustrare
+le varie possibilità.
+
+"
+ doctitleit = "Modello per salmo anglicano"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Il codice seguente presenta un modo di impostare un inno in cui ogni verso
+inizia e finisce con una misura parziale. Mostra anche come aggiungere delle
+strofe come testo separato sotto la musica.
+
+"
+ doctitleit = "Modello per inno"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Ecco un modello piuttosto complesso, per un gruppo jazz. Si noti che tutti
+gli strumenti sono in @code{\\key c \\major}. Si tratta della tonalità
+reale; sarà trasposta automaticamente includendo la
+musica all'interno di una sezione @code{\\transpose}.
+
+"
+ doctitleit = "Modello per combo jazz"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello mostra come usare i contesti annidati @code{StaffGroup} e
+@code{GrandStaff} per creare sottogruppi degli strumenti dello stesso
+tipo. Mostra anche come usare @code{\\transpose} in modo che le variabili
+mantengano la musica per gli strumenti traspositori nell'intonazione reale.
+
+"
+ doctitleit = "Modello per orchestra, coro e pianoforte"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Ecco un comune doppio pentagramma per pianoforte con un po' di note.
+
+"
+ doctitleit = "Modello per pianoforte (semplice)"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Molti spartiti per pianoforte hanno le dinamiche poste al centro dei due righi.
+Il contesto @code{Dynamics}, se collocato tra i righi, posiziona automaticamente
+le dinamiche in modo corretto.
+
+"
+ doctitleit = "Modello per pianoforte con dinamiche al centro"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Invece di destinare un rigo a parte alla linea melodica e al suo testo, è
+possibile collocare il testo al centro di un doppio pentagramma per pianoforte.
+
+"
+ doctitleit = "Modello per pianoforte con testo al centro"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Ecco un tipico formato per canzoni: un rigo con linea melodica e testo,
+e sotto l'accompagnamento per pianoforte.
+
+"
+ doctitleit = "Modello per pianoforte con melodia e testo"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Modello per coro SATB (quattro righi)
+
+"
+ doctitleit = "Modello per coro SATB - quattro righi"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Ecco il modello di un comune spartito semplificato (lead sheet): include
+linea melodica, testo vocale, sigle degli accordi e relativi diagrammi
+per chitarra.
+
+"
+ doctitleit = "Modello di rigo singolo con note, testo, accordi e tasti"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Vuoi preparare uno spartito semplificato (lead sheet) con melodia e
+accordi? La tua ricerca è finita!
+
+"
+ doctitleit = "Modello di rigo singolo con note e accordi"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo piccolo modello presenta una semplice linea melodica con un testo. Copialo
+e incollalo, aggiungi le note e le parole. Questo esempio disabilita la
+disposizione automatica delle travature, come è consuetudine per le parti
+vocali. Per usare la disposizione automatica delle travature, cambia o
+commenta la relativa linea di codice.
+
+"
+ doctitleit = "Modello di rigo singolo con note e testo"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello molto semplice mette a disposizione un rigo con delle note ed è
+quindi adatto per uno strumento non accompagnato o per un frammento
+melodico. Copialo e incollalo in un file, aggiungi le note e hai finito!
+
+"
+ doctitleit = "Modello di rigo singolo con solo note"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello presenta un semplice quartetto d'archi. Impiega anche una
+sezione @code{\\global} per definire il tempo e l'armatura di chiave.
+
+"
+ doctitleit = "Modello per quartetto d'archi (semplice)"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Il frammento di codice del @qq{Modello per quartetto d'archi} crea un bel
+quartetto, ma cosa fare se si ha bisogno di creare le singole parti? Questo
+nuovo modello mostra come usare la funzionalità @code{\\tag} per dividere
+facilmente un pezzo in parti staccate.
+
+Occorre dividere questo modello in file separati; i nomi dei file sono
+indicati nei commenti all'inizio di ogni file. @code{piece.ly}
+contiene tutte le definizioni musicali. Gli altri file – @code{score.ly},
+@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} e @code{vlc.ly} –
+creano ciascuna parte.
+
+
+Non dimenticare di togliere i commenti quando usi i file separati!
+
+"
+ doctitleit = "Modello per quartetto d'archi con parti separate"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello aggiunge una riduzione automatica per pianoforte alla tipica
+partitura vocale SATB illustrata in @qq{Modello per complesso vocale}. Si
+dimostra così uno dei punti di forza di LilyPond – è possibile usare una
+definizione musicale più di una volta. Qualsiasi modifica venga fatta alle note
+delle voci (ad esempio, @code{tenorMusic}) verrà applicata anche alla riduzione
+per pianoforte.
+"
+ doctitleit = "Modello per gruppo vocale con automatica riduzione per pianoforte"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello è fondamentalmente analogo al semplice modello @qq{Complesso vocale},
+con l'unica differenza che qui tutti i versi del testo sono posizionati
+usando @code{alignAboveContext} e @code{alignBelowContext}.
+
+"
+ doctitleit = "Modello per gruppo vocale con testo allineato sotto e sopra i righi"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Questo modello crea una partitura che inizia con una sezione solistica e
+prosegue in un ritornello a due voci. Illustra anche l'uso delle
+pause spaziatrici all'interno della variabile @code{\\global} per definire
+i cambi di tempo (e altri elementi comuni a tutte le parti) nel corso di
+tutta la partitura.
+"
+ doctitleit = "Modello per gruppo vocale con strofa e ritornello"
--- /dev/null
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Ecco una tipica partitura corale a quattro parti, SATB. Se il complesso è più
+ampio, è spesso comodo scrivere gli elementi comuni in un'unica sezione, che
+verrà poi inclusa in tutte le parti. Ad esempio, l'indicazione di tempo e
+l'armatura di chiave sono quasi sempre le stesse per tutte le parti. Come nel
+modello dell'@qq{Inno}, le quattro voci sono ripartite in due soli righi.
+"
+ doctitleit = "Modello per complesso vocale"
@end html
@end ifhtml
-@emph{Last updated Thu Mar 24 14:52:33 UTC 2011
+@emph{Last updated Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@ifhtml
@html
-<span style="background-color: #dfef77">partially (93 %)</span>
+<span style="background-color: #1fff1f">yes</span>
@end html
@end ifhtml
@ifnothtml
-partially (93 %)
+yes
@end ifnothtml
@tab
@ifhtml
@html
-<span style="background-color: #2cff20">partially</span>
+<span style="background-color: #1fff1f">yes</span>
@end html
@end ifhtml
@ifnothtml
-partially
+yes
@end ifnothtml
@tab pre-GDP
@item
@ifhtml
@html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #1fff1f">yes</span>
@end html
@end ifhtml
@ifnothtml
-partially
+yes
@end ifnothtml
@tab pre-GDP
@item
@ifhtml
@html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #1fff1f">yes</span>
@end html
@end ifhtml
@ifnothtml
-partially
+yes
+@end ifnothtml
+@tab pre-GDP
+@item
+A Modelli
+@*
+225
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
@end ifnothtml
@tab pre-GDP
@end multitable
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@headitem
-LilyPond -- Notazione musicale per tutti
+LilyPond: manuale d'uso del programma
@tab Translators
@tab Translation checkers
@tab Translated
@item
Section titles
@*
-585
+135
@tab Federico Bruni
@tab Luca Rossetto Casel
@tab
@ifhtml
@html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #1fff1f">yes</span>
@end html
@end ifhtml
@ifnothtml
-partially
+yes
@end ifnothtml
@tab pre-GDP
@item
@tab
@ifhtml
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
+@item
+1 Eseguire @command{lilypond}
+@*
+3622
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
+@item
+2 Aggiornare i file con @command{convert-ly}
+@*
+1189
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
+@item
+3 Eseguire @command{lilypond-book}
+@*
+3952
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
+@item
+4 Programmi esterni
+@*
+2170
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
+@item
+5 Consigli su come scrivere i file
+@*
+2694
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab pre-GDP
+@end multitable
+
+
+@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
+
+@headitem
+LilyPond -- Notazione musicale per tutti
+@tab Translators
+@tab Translation checkers
+@tab Translated
+@tab Up to date
+@tab Other info
+@item
+Section titles
+@*
+585
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">yes</span>
+@end html
+@end ifhtml
+@ifnothtml
+yes
+@end ifnothtml
+@tab
+@ifhtml
+
@html
<span style="background-color: #25fe1f">partially</span>
@end html
@end ifnothtml
@tab pre-GDP
@item
-Introduzione
+LilyPond --- \TITLE\
@*
-4506
+1139
@tab Federico Bruni
@tab Luca Rossetto Casel
@tab
@end ifnothtml
@tab pre-GDP
@item
-Download
+Introduzione
@*
-1183
+4564
@tab Federico Bruni
@tab Luca Rossetto Casel
@tab
@tab
@ifhtml
+@html
+<span style="background-color: #25fe1f">partially</span>
+@end html
+@end ifhtml
+@ifnothtml
+partially
+@end ifnothtml
+@tab pre-GDP
+@item
+Download
+@*
+1195
+@tab Federico Bruni
+@tab Luca Rossetto Casel
+@tab
+@ifhtml
+
@html
<span style="background-color: #1fff1f">yes</span>
@end html
@ifnothtml
yes
@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #25fe1f">partially</span>
+@end html
+@end ifhtml
+@ifnothtml
+partially
+@end ifnothtml
@tab pre-GDP
@item
Manuali
@*
-1200
+1203
@tab Federico Bruni
@tab Luca Rossetto Casel
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">yes</span>
+<span style="background-color: #25fe1f">partially</span>
@end html
@end ifhtml
@ifnothtml
-yes
+partially
@end ifnothtml
@tab pre-GDP
@item
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+
+@ignore
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.13.36"
+
+@node Programmi esterni
+@chapter Programmi esterni
+@translationof External programs
+
+LilyPond può interagire con altri programmi in vari modi.
+
+@menu
+* Punta e clicca::
+* LilyPond e gli editor di testo::
+* Conversione da altri formati::
+* Inclusione di partiture LilyPond in altri programmi::
+* Inclusioni indipendenti::
+@end menu
+
+
+@node Punta e clicca
+@section Punta e clicca
+@translationof Point and click
+
+@cindex punta e clicca
+
+Il "punta e clicca" (@emph{point and click}) permette di individuare gli elementi
+musicali nell'input cliccando su di essi nel lettore PDF. In questo modo è più
+facile trovare la parte dell'input responsabile di un errore nello spartito.
+
+Quando questa funzionalità è attiva, LilyPond aggiunge dei collegamenti
+ipertestuali al file PDF. Questi collegamenti vengono inviati al browser web,
+che apre un editor di testo col cursore posizionato nel punto giusto.
+
+Perché questo procedimento funzioni è necessario configurare il lettore PDF
+in modo che segua i collegamenti ipertestuali usando lo script @file{lilypond-invoke-editor}
+fornito insieme a LilyPond.
+
+Per Xpdf su UNIX, occorre inserire la seguente linea nel file
+@file{xpdfrc}@footnote{Su UNIX, questo file si trova in
+@file{/etc/xpdfrc} o come @file{.xpdfrc} nella propria directory home.}
+
+@example
+urlCommand "lilypond-invoke-editor %s"
+@end example
+
+@file{lilypond-invoke-editor} è un piccolo programma di supporto. Lancia un
+editor per gli URI @code{textedit} e un browser web per altri URI. Valuta
+la variabile d'ambiente @code{EDITOR} in base a questi schemi,
+
+@table @code
+@item emacs
+ verrà quindi lanciato il comando
+@example
+emacsclient --no-wait +@var{line}:@var{column} @var{file}
+@end example
+@item gvim
+ verrà quindi lanciato il comando
+@example
+gvim --remote +:@var{line}:norm@var{column} @var{file}
+@end example
+
+@item nedit
+ verrà quindi lanciato il comando
+@example
+ nc -noask +@var{line} @var{file}'
+@end example
+@end table
+
+La variabile d'ambiente @code{LYEDITOR} ha la precedenza sulla variabile
+@code{EDITOR}. Contiene il comando per lanciare l'editor, dove @code{%(file)s},
+@code{%(column)s}, @code{%(line)s} vengono sostituiti rispettivamente dal file,
+dalla colonna e dalla riga. L'impostazione
+
+@example
+emacsclient --no-wait +%(line)s:%(column)s %(file)s
+@end example
+
+@noindent
+per @code{LYEDITOR} è equivalente alla chiamata standard emacsclient.
+
+
+@cindex file size, output
+
+I collegamenti "punta e clicca" appesantiscono sensibilmente i file di output. Per
+ridurre la dimensione dei file PDF e PS, è possibile disattivare il "punta e
+clicca" inserendo
+
+@example
+\pointAndClickOff
+@end example
+
+@noindent
+in un file @file{.ly}. Il "punta e clicca" può essere abilitato esplicitamente con
+
+@example
+\pointAndClickOn
+@end example
+
+Si può disabilitare il "punta e clicca" anche con un'opzione da linea di
+comando:
+
+@example
+lilypond -dno-point-and-click file.ly
+@end example
+
+@warning{Occorre sempre disattivare il "punta e clicca" nei file LilyPond
+che si vogliano diffondere, per evitare di includere nel file .pdf delle informazioni
+sui percorsi del proprio computer: questo infatti può costituire un rischio di
+sicurezza.}
+@node LilyPond e gli editor di testo
+@section LilyPond e gli editor di testo
+@translationof Text editor support
+
+@cindex editor
+@cindex vim
+@cindex emacs
+@cindex modalità, editor
+@cindex sintassi, colorazione
+@cindex colorazione della sintassi
+
+Vari editor di testo hanno funzionalità specifiche per LilyPond.
+
+@menu
+* Modalità di Emacs::
+* Modalità di Vim::
+* Altri editor::
+@end menu
+
+@node Modalità di Emacs
+@unnumberedsubsec Modalità di Emacs
+@translationof Emacs mode
+
+Emacs ha una modalità @file{lilypond-mode}, che fornisce il completamento
+delle parole, l'indentazione, le parentesi automatiche e la colorazione
+della sintassi specifiche di LilyPond, comode scorciatoie per la compilazione e
+la possibilità di leggere i manuali di LilyPond usando Info. Se @file{lilypond-mode}
+non è installato nel tuo computer, vedi sotto.
+
+Una modalità Emacs per inserire la musica e eseguire LilyPond è presente
+nell'archivio dei sorgenti nella directory @file{elisp}. Lancia @command{make
+install} per installarla in @var{elispdir}. Il file @file{lilypond-init.el}
+deve essere messo in @var{load-path}@file{/site-start.d/} o aggiunto a
+@file{~/.emacs} oppure @file{~/.emacs.el}.
+
+Come utente normale, puoi aggiungere il percorso dei sorgenti (ad esempio @file{~/site-lisp/})
+al tuo @var{load-path} aggiungendo la seguente riga (modificata di conseguenza)
+al file @file{~/.emacs}
+
+@c any reason we do not advise: (push "~/site-lisp" load-path)
+@example
+(setq load-path (append (list (expand-file-name "~/site-lisp")) load-path))
+@end example
+
+
+@node Modalità di Vim
+@unnumberedsubsec Modalità di Vim
+@translationof Vim mode
+
+Per @uref{http://@/www@/.vim@/.org,Vim}, sono disponibili le seguenti funzionalità
+per LilyPond: un plugin di riconoscimento del tipo di file, una modalità di indentazione e di
+evidenziazione della sintassi. Per abilitarle, crea (o modifica) il file
+@file{$HOME/.vimrc} in modo che contenga queste tre righe, in questo ordine:
+
+@example
+filetype off
+set runtimepath+=/usr/local/share/lilypond/current/vim/
+filetype on
+@end example
+
+@noindent
+Se LilyPond non è installato nella directory @file{/usr/local/},
+modifica il percorso in modo adeguato. Questo argomento è trattato in
+@rlearning{Other sources of information}.
+
+
+@node Altri editor
+@unnumberedsubsec Altri editor
+@translationof Other editors
+
+Altri editor (sia testuali che grafici) supportano LilyPond, ma i loro
+specifici file di configurazione non sono distribuiti insieme a
+LilyPond. Consulta la documentazione di questi programmi per maggiori
+informazioni. Questi editor sono elencati in @rweb{Easier editing}.
+
+
+@node Conversione da altri formati
+@section Conversione da altri formati
+@translationof Converting from other formats
+
+È possibile inserire la musica anche importandola da altri formati. Questo
+capitolo documenta gli strumenti inclusi nella distribuzione che svolgono
+questo compito. Esistono altri strumenti che producono l'input di LilyPond, ad
+esempio i sequencer ad interfaccia grafica e i convertitori XML. Per maggiori
+dettagli consulta il @uref{http://@/lilypond@/.org,sito web}.
+
+Si tratta di programmi separati da @command{lilypond} e sono eseguiti
+dalla linea di comando; si veda @ref{Command-line usage} per maggiori
+informazioni. Se usi MacOS 10.3 o 10.4 e hai problemi a
+eseguire alcuni di questi script, ad esempio @code{convert-ly}, vedi
+@rweb{MacOS X}.
+
+
+@knownissues
+Purtroppo non abbiamo le risorse per mantenere questi programmi; prendeteli
+@qq{così come sono}! Accettiamo con piacere le @emph{patch}, ma ci sono
+poche possibilità che i bug vengano risolti.
+
+@menu
+* Utilizzo di midi2ly:: Importare MIDI.
+* Utilizzo di musicxml2ly:: Importare MusicXML.
+* Utilizzo di abc2ly:: Importare ABC.
+* Utilizzo di etf2ly:: Importare Finale.
+* Altri formati::
+@end menu
+
+
+
+@node Utilizzo di midi2ly
+@subsection Utilizzo di @command{midi2ly}
+@translationof Invoking midi2ly
+
+@cindex MIDI
+
+@command{midi2ly} trasforma un file MIDI Type@tie{}1 in un file sorgente
+di LilyPond.
+
+Il protocollo MIDI (Music Instrument Digital Interface) è uno standard per gli
+strumenti digitali: fornisce le specifiche per la connessione via cavo, un
+protocollo seriale e un formato di file. Il formato MIDI è uno standard de
+facto per esportare la musica da altri programmi, dunque questa capacità diventa
+utile quando si importano file creati con un programma che converta
+direttamente in questo formato.
+
+@command{midi2ly} converte le tracce presenti nei contesti @rinternals{Staff} e
+i canali dei contesti @rinternals{Voice}. Per indicare le altezze viene usata
+la modalità relativa, mentre le durate sono precisate solo quando necessario.
+
+È possibile registrare un file MIDI usando una tastiera digitale e poi
+convertirlo in file @file{.ly}. Tuttavia, la conversione da MIDI a LY non
+è banale: l'esecuzione umana non sarà mai sufficientemente precisa dal punto di vista
+ritmico. Se lanciata con la quantizzazione (opzioni @code{-s} e @code{-d})
+@command{midi2ly} cerca di compensare questi errori di tempo, ma non è
+molto efficace. Dunque non si raccomanda l'uso di @command{midi2ly}
+per i file midi generati a partire da un'esecuzione umana.
+
+
+Si lancia dalla linea di comando in questo modo:
+@example
+midi2ly [@var{opzione}]@dots{} @var{file-midi}
+@end example
+
+Attenzione: per @q{linea di comando} si intende la linea di comando
+del sistema operativo. Si veda @ref{Converting from other formats} per
+maggiori informazioni su questo argomento.
+
+@command{midi2ly} accetta le seguenti opzioni.
+
+@table @code
+@item -a, --absolute-pitches
+Crea altezze assolute.
+
+@item -d, --duration-quant=@var{DUR}
+Quantizza la durata delle note di @var{DUR}.
+
+@item -e, --explicit-durations
+Crea durate esplicite.
+
+@item -h,--help
+Mostra una sintesi dell'utilizzo del programma.
+
+@item -k, --key=@var{acc}[:@var{minor}]
+Imposta la tonalità predefinita. @math{@var{acc} > 0} imposta il numero di
+diesis; @math{@var{acc} < 0} imposta il numero di bemolle. Una tonalità
+minore si indica con @code{:1}.
+
+@item -o, --output=@var{file}
+Scrive l'output in @var{file}.
+
+@item -s, --start-quant=@var{DUR}
+Quantize note starts on @var{DUR}.
+
+@item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN}
+Consente l'inserimento di gruppi irregolari @var{DUR}*@var{NUM}/@var{DEN}.
+
+@item -v, --verbose
+Mostra un output dettagliato.
+
+@item -V, --version
+Mostra il numero di versione.
+
+@item -w, --warranty
+Mostra la garanzia e il copyright.
+
+@item -x, --text-lyrics
+Interpreta il testo come liriche.
+@end table
+
+
+@knownissues
+
+Le note sovrapposte in un arpeggio non sono rese correttamente: viene letta
+solo la prima nota, mentre le altre vengono ignorate. Assegna a tutte la stessa
+durata e introduci le opportune indicazioni di fraseggio o di pedalizzazione.
+
+
+@node Utilizzo di musicxml2ly
+@subsection Utilizzo di @code{musicxml2ly}
+@translationof Invoking musicxml2ly
+
+@cindex MusicXML
+
+@uref{http://@/www.@/musicxml@/.org/,MusicXML} è un dialetto di XML
+che viene usato per rappresentare la notazione musicale.
+
+@command{musicxml2ly} estrae le note, le articolazioni, la struttura della
+partitura, il testi, etc. da file MusicXML organizzati in parti; quindi li
+scrive in un file @file{.ly}. Si usa dalla linea di comando.
+
+
+Si lancia dalla linea di comando nel modo seguente,
+@example
+musicxml2ly [@var{opzione}]@dots{} @var{file-xml}
+@end example
+
+Attenzione: per @q{linea di comando} si intende la linea di comando
+del sistema operativo. Si veda @ref{Converting from other formats} per
+maggiori informazioni su questo argomento.
+
+Se il nome del file è @file{-}, @command{musicxml2ly} legge l'input
+dalla linea di comando.
+
+@command{musicxml2ly} accetta le seguenti opzioni:
+
+@table @code
+@item -a, --absolute
+converte le altezze relative in assolute.
+
+@item -h,--help
+mostra una sintesi dell'utilizzo e delle opzioni.
+
+@item -l, --language=LANG
+usa LANG per i nomi delle altezze, ad esempio 'deutsch' per i nomi delle note
+in tedesco.
+
+@item --lxml
+usa il pacchetto Python lxml.etree per l'analisi della sintassi XML; usa meno
+memoria e tempo del processore.
+
+@item --nd --no-articulation-directions
+non converte le direzioni (@code{^}, @code{_} o @code{-}) per
+articolazioni, dinamiche, etc.
+
+@item --no-beaming
+ignora le informazioni relative alle travature, impiegando la disposizione
+automatica delle travature fornita da LilyPond.
+
+@item -o,--output=@var{file}
+imposta il nome del file di output su @var{file}. Se @var{file} è @file{-}, l'output
+sarà salvato su stdout. Se non specificato, verrà usato @var{file-xml}@file{.ly}.
+
+@item -r,--relative
+converte le altezze in modalità relativa (predefinito).
+
+@item -v, --verbose
+Mostra un output dettagliato.
+
+@item --version
+Mostra informazioni sulla versione.
+
+@item -z,--compressed
+il file di input è un file MusicXML compresso in un archivio ZIP.
+@end table
+
+
+@node Utilizzo di abc2ly
+@subsection Utilizzo di @code{abc2ly}
+@translationof Invoking abc2ly
+
+@warning{Questo programma non è supportato e potrebbe essere rimosso
+dalle future versioni di LilyPond.}
+
+@cindex ABC
+
+ABC è un semplice formato basato su ASCII. È descritto nel sito di ABC:
+
+@quotation
+@uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}.
+@end quotation
+
+@command{abc2ly} traduce dal formato ABC al formato LilyPond. Viene lanciato
+nel modo seguente:
+
+@example
+abc2ly [@var{opzione}]@dots{} @var{file-abc}
+@end example
+
+@command{abc2ly} accetta le seguenti opzioni:
+
+@table @code
+@item -b,--beams=None
+preserva le regole di disposizione delle travature di ABC
+@item -h,--help
+mostra questo messaggio di aiuto
+@item -o,--output=@var{file}
+imposta il nome del file di output su @var{file}.
+@item -s,--strict
+imposta una modalità di interpretazione letterale per effettuare una conversione stretta
+@item --version
+mostra informazioni sulla versione.
+@end table
+
+Esiste una rudimentale funzione per aggiungere codice LilyPond nel
+file sorgente ABC. Se scrivi:
+
+@example
+%%LY voices \set autoBeaming = ##f
+@end example
+
+il testo che segue la parola chiave @q{voices} verrà inserito
+nella voce in uso del file di output LilyPond.
+
+Analogalmente,
+
+@example
+%%LY slyrics more words
+@end example
+
+fa sì che il testo che segue la parola chiave @q{slyrics} venga inserito
+nella riga corrente del testo.
+
+
+@knownissues
+
+Lo standard ABC standard non è molto @q{standard}. Per le funzionalità più
+avanzate (ad esempio, la musica polifonica) esistono diversi tipi di convenzioni.
+
+Un file che contiene più di un brano non può essere convertito.
+
+ABC allinea le parole e le note all'inizio di una riga; @command{abc2ly} non
+lo fa.
+
+@command{abc2ly} ignora la disposizione delle travature fatta da ABC.
+
+
+@node Utilizzo di etf2ly
+@subsection Utilizzo di @command{etf2ly}
+@translationof Invoking etf2ly
+
+@warning{Questo programma non è supportato e potrebbe essere rimosso
+dalle future versioni di LilyPond.}
+
+@cindex ETF
+@cindex enigma
+@cindex Finale
+@cindex Coda Technology
+
+ETF (Enigma Transport Format) è un formato usato da Finale, un prodotto di Coda
+Music Technology. @command{etf2ly} converte parte di un file ETF
+in un file LilyPond pronto all'uso.
+
+Si lancia dalla linea di comando nel modo seguente.
+
+@example
+etf2ly [@var{opzione}]@dots{} @var{file-etf}
+@end example
+
+Attenzione: per @q{linea di comando} si intende la linea di comando
+del sistema operativo. Si veda @ref{Converting from other formats} per
+maggiori informazioni su questo argomento.
+
+@command{etf2ly} accetta le seguenti opzioni:
+
+@table @code
+@item -h,--help
+mostra questo messaggio di aiuto
+@item -o,--output=@var{FILE}
+imposta il nome del file di output su @var{FILE}
+@item --version
+mostra informazioni sulla versione
+@end table
+
+
+@knownissues
+
+La lista degli script per gestire le articolazioni è incompleta. Le misure vuote
+confondono @command{etf2ly}. Le sequenze di abbellimenti non sono risolte correttamente.
+
+
+@node Altri formati
+@subsection Altri formati
+@translationof Other formats
+
+@cindex Programmi esterni, generare file LilyPond
+
+LilyPond non supporta la conversione da altri formati, ma esistono alcuni
+strumenti esterni che possono generare file LilyPond. L'elenco si trova
+in @rweb{Easier editing}.
+
+
+
+@node Inclusione di partiture LilyPond in altri programmi
+@section Inclusione di partiture LilyPond in altri programmi
+@translationof LilyPond output in other programs
+
+Questa sezione presenta dei metodi per integrare testo e musica diversi
+dal metodo automatizzato di @command{lilypond-book}.
+
+@menu
+* Tante citazioni da una grande partitura::
+* Inserire l'output di LilyPond in OpenOffice.org::
+* Inserire l'output di LilyPond in altri programmi::
+@end menu
+
+@node Tante citazioni da una grande partitura
+@unnumberedsubsec Tante citazioni da una grande partitura
+@translationof Many quotes from a large score
+
+Per inserire molti frammenti di una grande partitura, si può usare anche
+la funzione di ritaglio dei sistemi; si veda @ruser{Extracting fragments of music}.
+
+
+@node Inserire l'output di LilyPond in OpenOffice.org
+@unnumberedsubsec Inserire l'output di LilyPond in OpenOffice.org
+@translationof Inserting LilyPond output into OpenOffice.org
+
+@cindex OpenOffice.org
+
+La notazione di LilyPond può essere aggiunta a OpenOffice.org con
+@uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}.
+
+
+@node Inserire l'output di LilyPond in altri programmi
+@unnumberedsubsec Inserire l'output di LilyPond in altri programmi
+@translationof Inserting LilyPond output into other programs
+
+Per inserire l'output di LilyPond in altri programmi, si usa @code{lilypond}
+invece di @code{lilypond-book}. Bisogna creare ogni esempio singolarmente
+e aggiungerlo al documento; consulta la documentazione del realtivo
+programma. La maggior parte dei programmi può inserire l'output di LilyPond
+in formato @file{PNG}, @file{EPS} o @file{PDF}.
+
+Per ridurre lo spazio bianco intorno alla partitura LilyPond, si usano
+le seguenti opzioni
+
+@example
+\paper@{
+ indent=0\mm
+ line-width=120\mm
+ oddFooterMarkup=##f
+ oddHeaderMarkup=##f
+ bookTitleMarkup = ##f
+ scoreTitleMarkup = ##f
+@}
+
+@{ c1 @}
+@end example
+
+Per creare un file @file{EPS}, si usa
+
+@example
+lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts miofile.ly
+
+@file{PNG}:
+lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png miofile.ly
+@end example
+
+
+@node Inclusioni indipendenti
+@section @code{include} indipendenti
+@translationof Independent includes
+
+Alcuni hanno scritto ampi (e utili!) frammenti di codice che possono
+essere condivisi da progetti diversi. Questo codice potrebbe alla fine
+entrare a far parte di LilyPond, ma finché questo non avviene occorre
+scaricarlo e includerlo manualmente con @code{\include}.
+
+
+@menu
+* Articolazione MIDI::
+@end menu
+
+
+@node Articolazione MIDI
+@subsection Articolazione MIDI
+@translationof MIDI articulation
+
+LilyPond permette di generare l'output MIDI, che consente di
+@qq{verificare a orecchio} quanto è stato scritto. Tuttavia l'output
+contiene solo la dinamica, i segni di tempo espliciti, le note e le loro
+durate.
+
+Il progetto @emph{articulate} costituisce un tentativo di inviare al file
+MIDI maggiori informazioni sulla partitura. Il suo funzionamento si basa
+sull'abbreviazione delle note prive di legatura di portamento, in
+modo da @q{articolare} le note. Questa riduzione dipende dai segni di
+articolazione attaccati a una nota: staccato dimezza il valore della nota, tenuto
+assegna alla nota la sua intera durata, e così via. Lo script è consapevole anche dei
+trilli e dei gruppetti; può essere esteso per elaborare altri ornamenti come i
+mordenti.
+
+@example
+@uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate}
+@end example
+
+@knownissues
+
+La sua principale limitazione è che può agire solo sugli elementi che
+conosce: qualsiasi cosa che sia del semplice testo (invece di una proprietà
+della nota) viene dunque ignorato.
+
+
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+
+@ignore
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.13.36"
+
+@c Note: keep this node named so that `info lilypond-book' brings you here.
+@node lilypond-book
+@chapter Eseguire @command{lilypond-book}
+
+Se si desidera aggiungere a un documento illustrazioni musicali, si può
+semplicemente fare nello stesso modo in cui si farebbe con altri tipi di
+immagini: prima si creano le immagini separatamente, in formato PostScript o
+PNG, poi le si includono in un documento @LaTeX{} o HTML.
+
+@command{lilypond-book} offre la possibilità di automatizzare tale procedimento: questo
+programma estrae i frammenti musicali dal documento, esegue @command{lilypond}
+su di essi e crea un nuovo documento contenente le illustrazioni musicali così
+ottenute. Le definizioni relative alla larghezza del rigo e alle dimensioni
+dei caratteri vengono regolate per adeguarsi alla formattazione del documento.
+
+Si tratta di un programma separato da @command{lilypond} e viene lanciato
+dalla linea di comando; per maggiori informazioni, si veda @ref{Command-line
+usage}. Chi usa MacOS 10.3 o 10.4 e non riesce ad eseguire
+@code{lilypond-book} veda @rweb{MacOS X}.
+
+Questo procedimento può essere applicato ai documenti @LaTeX{}, HTML, Texinfo
+o DocBook.
+
+@cindex texinfo
+@cindex latex
+@cindex texinfo
+@cindex texi
+@cindex html
+@cindex docbook
+@cindex documenti, aggiungere musica ai
+@cindex HTML, musica in
+@cindex Texinfo, musica in
+@cindex DocBook, musica in
+@cindex @LaTeX{}, musica in
+
+@menu
+* Un esempio di documento musicologico::
+* Integrare musica e testo::
+* Opzioni dei frammenti musicali::
+* Utilizzo di lilypond-book::
+* Estensioni dei nomi di file::
+* Modelli per lilypond-book::
+* Condividere l'indice::
+* Metodi alternativi per combinare testo e musica::
+@end menu
+
+
+@node Un esempio di documento musicologico
+@section Un esempio di documento musicologico
+@translationof An example of a musicological document
+
+@cindex musicologia
+Alcuni testi contengono degli esempi musicali: si tratta di
+trattati musicologici, canzonieri o manuali come questo. È possibile
+crearli a mano, semplicemente importando un'immagine PostScript
+nell'elaboratore di testo. Tuttavia esiste una procedura automatizzata
+che permette di ridurre il carico di lavoro richiesto dai documenti in
+formato HTML, @LaTeX{}, Texinfo e DocBook.
+
+Uno script chiamato @code{lilypond-book} estrarrà i frammenti musicali, li
+formatterà e restituirà la notazione risultante. Ecco un piccolo esempio
+da usare con @LaTeX{}. L'esempio contiene anche del testo esplicativo,
+dunque non è necessario entrare nei dettagli.
+
+@subheading Input
+
+@quotation
+@verbatim
+\documentclass[a4paper]{article}
+
+\begin{document}
+
+I documenti per \verb+lilypond-book+ possono combinare liberamente musica e testo.
+Ad esempio,
+
+\begin{lilypond}
+\relative c' {
+ c2 e2 \times 2/3 { f8 a b } a2 e4
+}
+\end{lilypond}
+
+Le opzioni vengono specificate tra parentesi quadre.
+
+\begin{lilypond}[fragment,quote,staffsize=26,verbatim]
+ c'4 f16
+\end{lilypond}
+
+Se l'esempio è più grande, è possibile metterlo in un file separato e inserirlo
+con \verb+\lilypondfile+.
+
+\lilypondfile[quote,noindent]{screech-boink.ly}
+
+(Se vuoi provare, sostituisci @file{screech-boink.ly} con qualsiasi file @file{.ly}
+che si trovi nella stessa directory di questo file.)
+
+\end{document}
+@end verbatim
+@end quotation
+
+@subheading Elaborazione
+
+Salva il codice precedente in un file chiamato @file{lilybook.lytex}, quindi
+esegui in un terminale
+
+@c keep space after @version{} so TeX doesn't choke
+@example
+lilypond-book --output=out --pdf lilybook.lytex
+@emph{lilypond-book (GNU LilyPond) @version{} }
+@emph{Lettura di lilybook.lytex...}
+@emph{..tagliato molto output..}
+@emph{Compilazione di lilybook.tex...}
+cd out
+pdflatex lilybook.tex
+@emph{..tagliato molto output..}
+xpdf lilybook.pdf
+@emph{(sostituisci @command{xpdf} col tuo lettore PDF preferito)}
+@end example
+
+L'esecuzione di @command{lilypond-book} e @command{pdflatex} crea molti file
+temporanei e questo potrebbe rendere disordinata la directory di lavoro. Per
+ovviare a questo inconveniente, è consigliabile usare l'opzione @code{--output=@var{dir}}. In questo
+modo i file verranno salvati in una sottodirectory @file{dir} separata.
+
+Infine ecco il risultato dell'esempio in @LaTeX{}.@footnote{Questo
+tutorial è elaborato da Texinfo, dunque l'esempio produce dei risultati
+leggermente diversi nella formattazione.} Si conclude qui la parte di
+tutorial.
+
+@page
+
+@subheading Output
+
+I documenti per \verb+lilypond-book+ possono combinare liberamente musica e testo.
+Ad esempio,
+
+@lilypond
+\relative c' {
+ c2 e2 \times 2/3 { f8 a b } a2 e4
+}
+@end lilypond
+
+Le opzioni vengono specificate tra parentesi quadre.
+
+@lilypond[fragment,quote,staffsize=26,verbatim]
+c'4 f16
+@end lilypond
+
+Se l'esempio è più grande, è possibile riportarlo in un file a parte e inserirlo
+con \verb+\lilypondfile+.
+
+@lilypondfile[quote,noindent]{screech-boink.ly}
+
+Perché sia visibile la @code{tagline}, predefinita o personalizzata, l'intero
+frammento deve essere compreso in un costrutto @code{\book @{ @}}.
+
+@lilypond[papersize=a8,verbatim]
+\book{
+ \header{
+ title = "Una scala in LilyPond"
+ }
+
+ \relative c' {
+ c d e f g a b c
+ }
+}
+@end lilypond
+
+@page
+
+@node Integrare musica e testo
+@section Integrare musica e testo
+@translationof Integrating music and text
+
+Questa sezione spiega come integrare LilyPond in vari formati di output.
+
+@menu
+* LaTeX::
+* Texinfo::
+* HTML::
+* DocBook::
+@end menu
+
+@node LaTeX
+@subsection @LaTeX{}
+
+@LaTeX{} costituisce lo standard de facto per le pubblicazioni nell'ambito
+delle scienze esatte. Si basa sul motore tipografico @TeX{}, che produce la
+migliore qualità tipografica possibile.
+
+Si veda
+@uref{http://@/www@/.ctan@/.org/@/tex@/-archive/@/info/@/lshort/@/english/,
+@emph{The Not So Short Introduction to @LaTeX{}}} per una panoramica
+sull'uso di @LaTeX{}.
+
+La musica si inserisce in vari modi:
+
+@example
+\begin@{lilypond@}[le,opzioni,vanno,qui]
+ CODICE LILYPOND
+\end@{lilypond@}
+@end example
+
+@noindent
+oppure
+
+@example
+\lilypondfile[le,opzioni,vanno,qui]@{@var{nomefile}@}
+@end example
+
+@noindent
+oppure
+
+@example
+\lilypond[le,opzioni,vanno,qui]@{ CODICE LILYPOND @}
+@end example
+
+Inoltre, @code{\lilypondversion} mostra la versione
+di lilypond impiegata.
+L'esecuzione di @command{lilypond-book} produce un file che può essere
+ulteriormente elaborato con @LaTeX{}.
+
+Vediamo alcuni esempi. L'ambiente @code{lilypond}
+
+@example
+\begin@{lilypond@}[quote,fragment,staffsize=26]
+ c' d' e' f' g'2 g'2
+\end@{lilypond@}
+@end example
+
+@noindent
+genera
+
+@lilypond[quote,fragment,staffsize=26]
+c' d' e' f' g'2 g'2
+@end lilypond
+
+La versione breve
+
+@example
+\lilypond[quote,fragment,staffsize=11]@{<c' e' g'>@}
+@end example
+
+@noindent
+genera
+
+@lilypond[quote,fragment,staffsize=11]{<c' e' g'>}
+
+@noindent
+Attualmente non è possibile includere @code{@{} o @code{@}} all'interno di
+@code{\lilypond@{@}}, dunque questo comando è utile solo se usato con
+l'opzione @code{fragment}.
+
+La lunghezza predefinita del rigo musicale sarà regolata in base ai
+comandi presenti nel preambolo del documento, ovvero la parte del documento
+che precede @code{\begin@{document@}}. Il comando @command{lilypond-book}
+li invia a @LaTeX{} per definire la larghezza del testo. La larghezza del
+rigo nei frammenti musicali è quindi regolato in base alla larghezza del
+testo. Si noti che questo algoritmo euristico può fallire facilmente; in
+questi casi occorre usare l'opzione @code{line-width} nel frammento musicale.
+
+@cindex titoli e lilypond-book
+@cindex \header nei documenti @LaTeX{}
+
+Ogni frammento chiamerà le seguenti macro se sono state definite
+dall'utente:
+
+@itemize @bullet
+@item @code{\preLilyPondExample} prima della musica,
+
+@item @code{\postLilyPondExample} dopo la musica,
+
+@item @code{\betweenLilyPondSystem[1]} tra i sistemi, se
+@code{lilypond-book} ha diviso il frammento in più file
+PostScript. Prende un parametro e riceve
+tutti i file già inclusi in questo frammento.
+Per impostazione predefinita inserisce semplicemente un @code{\linebreak}.
+@end itemize
+
+@ignore
+Broken stuff. :(
+
+@cindex Latex, feta symbols
+@cindex fetachar
+
+To include feta symbols (such as flat, segno, etc) in a LaTeX
+document, use @code{\input@{titledefs@}}
+
+@example
+\documentclass[a4paper]@{article@}
+
+\input@{titledefs@}
+
+\begin@{document@}
+
+\fetachar\fetasharp
+
+\end@{document@}
+@end example
+
+The font symbol names are defined in the file feta20.tex; to find
+the location of this file, use the command
+
+@example
+kpsewhich feta20.tex
+@end example
+
+@end ignore
+
+@snippets
+
+Talvolta si ha necessità di mostrare degli elementi musicali (ad esempio le
+legature di portamento e di valore) che proseguono dopo la fine del
+frammento. È possibile inserirli mandando il rigo a capo e
+impedendo l'inclusione del restante output di LilyPond.
+
+In @LaTeX{}, si definisce @code{\betweenLilyPondSystem} in modo tale che
+l'inclusione di altri sistemi venga terminata una volta incluso il
+numero di sistemi richiesti. Dato che @code{\betweenLilyPondSystem} viene
+chiamato la prima volta @emph{dopo} il primo sistema, includere solo il primo
+sistema è semplice.
+
+@example
+\def\betweenLilyPondSystem#1@{\endinput@}
+
+\begin@{lilypond@}[fragment]
+ c'1\( e'( c'~ \break c' d) e f\)
+\end@{lilypond@}
+@end example
+
+Se serve una maggior quantità di sistemi, occorre usare un condizionale
+@TeX{} prima di @code{\endinput}. In questo esempio, sostituisci @q{2} col
+numero di sistemi che desideri avere nell'output.
+
+@example
+\def\betweenLilyPondSystem#1@{
+ \ifnum#1<2\else\expandafter\endinput\fi
+@}
+@end example
+
+@noindent
+(Dato che @code{\endinput} arresta immediatamente l'elaborazione del file di
+input corrente, occorre usare @code{\expandafter} per ritardare la chiamata di
+@code{\endinput} e far sì che avvenga dopo l'esecuzione di @code{\fi}, in modo
+da bilanciare la condizione @code{\if}-@code{\fi}.)
+
+Ricorda che la definizione di @code{\betweenLilyPondSystem} è
+efficace finché @TeX{} esce dal gruppo attuale (ad esempio l'ambiente
+@LaTeX{}) o è sovrascritto da un'altra definizione (che vale, in
+gran parte dei casi, per il resto del documento). Per reimpostare
+la definizione, si scrive
+
+@example
+\let\betweenLilyPondSystem\undefined
+@end example
+
+@noindent
+nel sorgente @LaTeX{}.
+
+Si potrebbe semplificare la procedura creando una macro @TeX{}
+
+@example
+\def\onlyFirstNSystems#1@{
+ \def\betweenLilyPondSystem##1@{%
+ \ifnum##1<#1\else\expandafter\endinput\fi@}
+@}
+@end example
+
+@noindent
+e poi specificando prima di ogni frammento la quantità di sistemi desiderata,
+
+@example
+\onlyFirstNSystems@{3@}
+\begin@{lilypond@}...\end@{lilypond@}
+\onlyFirstNSystems@{1@}
+\begin@{lilypond@}...\end@{lilypond@}
+@end example
+
+
+@seealso
+Esistono opzioni specifiche da linea di comando per @command{lilypond-book} e
+altri dettagli da conoscere quando si elaborano documenti @LaTeX{}; si veda
+@ref{Invoking lilypond-book}.
+
+
+@node Texinfo
+@subsection Texinfo
+@translationof Texinfo
+
+Texinfo è il formato standard per la documentazione del progetto GNU. Un
+esempio di documento Texinfo è questo stesso manuale. Le versioni del manuale
+in formato HTML, PDF e Info vengono generate da un documento Texinfo.
+
+Nel file di input, la musica viene indicata con
+
+@example
+@@lilypond[options,go,here]
+ IL TUO CODICE LILYPOND
+@@end lilypond
+@end example
+
+@noindent
+oppure
+
+@example
+@@lilypond[le,opzioni,vanno,qui]@{ IL TUO CODICE LILYPOND @}
+@end example
+
+@noindent
+oppure
+
+@example
+@@lilypondfile[le,opzioni,vanno,qui]@{@var{nomefile}@}
+@end example
+
+Inoltre, @code{@@lilypondversion} mostra la versione di
+lilypond impiegata.
+
+Quando si esegue @command{lilypond-book} su di esso, il risultato è un
+file Texinfo (con estensione @file{.texi}) contenente degli elementi @code{@@image}
+per l'HTML, Info e l'output per la stampa. @command{lilypond-book} genera le
+immagini della musica in formati EPS e PDF per l'utilizzo nell'output per la
+stampa e in formato PNG per l'utilizzo nell'output HTML e Info.
+
+Vediamo due piccoli esempi. Un ambiente @code{lilypond}
+
+@example
+@@lilypond[fragment]
+c' d' e' f' g'2 g'
+@@end lilypond
+@end example
+
+@noindent
+genera
+
+@lilypond[fragment]
+c' d' e' f' g'2 g'
+@end lilypond
+
+La versione breve
+
+@example
+@@lilypond[fragment,staffsize=11]@{<c' e' g'>@}
+@end example
+
+@noindent
+genera
+
+@lilypond[fragment,staffsize=11]{<c' e' g'>}
+
+Diversamente da @LaTeX{}, @code{@@lilypond@{...@}} non genera un'immagine
+nel testo. Prende sempre un paragrafo proprio.
+
+
+@node HTML
+@subsection HTML
+@translationof HTML
+
+La musica si inserisce in questo modo
+
+@example
+<lilypond fragment relative=2>
+\key c \minor c4 es g2
+</lilypond>
+@end example
+
+@noindent
+@command{lilypond-book} genera quindi un file HTML con gli elementi appropriati
+per le immagini dei frammenti musicali:
+
+@lilypond[fragment,relative=2]
+\key c \minor c4 es g2
+@end lilypond
+
+Per le immagini in linea, si usa @code{<lilypond ... />}, dove le opzioni
+sono distinte dalla musica attraverso i due punti, ad esempio
+
+@example
+Un po' di musica in <lilypond relative=2: a b c/> una linea di testo.
+@end example
+
+Per includere file separati, si usa
+
+@example
+<lilypondfile @var{option1} @var{option2} ...>@var{filename}</lilypondfile>
+@end example
+
+Per una lista di opzioni da usare con gli elementi @code{lilypond} e
+@code{lilypondfile}, si veda @ref{Music fragment options}.
+
+Inoltre, @code{<lilypondversion/>} mostra la versione di
+lilypond impiegata.
+
+
+@cindex titoli in HTML
+@cindex immagine di anteprima
+@cindex miniatura
+
+@node DocBook
+@subsection DocBook
+@translationof DocBook
+
+Per inserire frammenti di codice LilyPond è una buona idea mantenere la
+conformità del documento DocBook, in modo da poter usare gli editor DocBook, la
+validazione, etc. Quindi non si usano elementi personalizzati, ma si
+specifica una convenzione basata sugli elementi DocBook standard.
+
+@subheading Convenzioni comuni
+
+Per inserire un frammento di qualsiasi tipo si usano gli elementi @code{mediaobject}
+e @code{inlinemediaobject}, in modo che il frammento possa essere formattato
+in linea o meno. Le opzioni di formattazione del frammento vengono sempre
+indicate nella proprietà @code{role} dell'elemento più interno (si vedano
+le prossime sezioni). Gli elementi sono scelti in modo da permettere agli editor
+DocBook di ottenere una formattazione ottimale. I file DocBook da
+elaborare con @command{lilypond-book} devono avere estensione @file{.lyxml}.
+
+@subheading Includere un file LilyPond
+
+Si tratta del caso più semplice. Bisogna usare l'estensione @file{.ly} per
+il file da includere e inserirlo come uno standard @code{imageobject}, con
+la seguente struttura:
+
+@example
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="music1.ly" role="printfilename" />
+ </imageobject>
+</mediaobject>
+@end example
+
+Nota che sei libero di usare @code{mediaobject} o @code{inlinemediaobject}
+come elemento più esterno.
+
+@subheading Includere codice LilyPond
+
+È possibile includere codice LilyPond all'interno di un elemento
+@code{programlisting} in cui il linguaggio sia impostato su @code{lilypond}
+e con la seguente struttura:
+
+@example
+<inlinemediaobject>
+ <textobject>
+ <programlisting language="lilypond" role="fragment verbatim staffsize=16 ragged-right relative=2">
+\context Staff \with @{
+ \remove Time_signature_engraver
+ \remove Clef_engraver@}
+ @{ c4( fis) @}
+ </programlisting>
+ </textobject>
+</inlinemediaobject>
+@end example
+
+Come si vede, l'elemento più esterno è @code{mediaobject} o
+@code{inlinemediaobject} e c'è un @code{textobject} che contiene al
+suo interno il @code{programlisting}.
+
+@subheading Elaborare il documento DocBook
+
+L'esecuzione di @command{lilypond-book} su un file @file{.lyxml} creerà un
+documento DocBook valido con estensione @file{.xml} che potrà essere
+ulteriormente elaborato. Usando
+@uref{http://@/dblatex@/.sourceforge@/.net@/,dblatex}, creerà automaticamente un file
+PDF da questo documento. Per generare l'HTML (HTML Help,
+JavaHelp etc.) si possono usare i fogli di stile DocBook XSL ufficiali;
+tuttavia è possibile che sia necessario modificarli un po'.
+
+
+@node Opzioni dei frammenti musicali
+@section Opzioni dei frammenti musicali
+@translationof Music fragment options
+
+Nelle pagine che seguono, per @q{comando LilyPond} si intende un qualsiasi
+comando descritto nelle sezioni precedenti che sia gestito da @command{lilypond-book}
+per produrre un frammento musicale. Per semplicità, i comandi LilyPond vengono
+mostrati soltanto nella sintassi @LaTeX{}.
+
+Nota che la stringa delle opzioni è analizzata da sinistra a destra; se un'opzione
+ricorre più di una volta, viene applicata nella sua ultima occorrenza.
+
+Sono disponibili le seguenti opzioni per i comandi LilyPond:
+
+@table @code
+@item staffsize=@var{altezza}
+Imposta la dimensione del pentagramma a @var{altezza}, misurata in punti.
+
+@item ragged-right
+Produce linee con margine destro irregolare e spaziatura naturale, ovvero
+viene aggiunto @code{ragged-right = ##t} al frammento LilyPond. Questa è
+l'impostazione predefinita per il comando @code{\lilypond@{@}} se non è presente
+un'opzione @code{line-width}. È anche l'impostazione predefinita per l'ambiente
+@code{lilypond} se viene usata l'opzione @code{fragment} senza specificare
+esplicitamente la larghezza della linea.
+
+@item noragged-right
+Per i frammenti di una sola linea, fa sì che la lunghezza del rigo venga estesa
+fino a coincidere con la larghezza della linea, ovvero viene aggiunto
+@code{ragged-right = ##f} al frammento LilyPond.
+
+@item line-width
+@itemx line-width=@var{dimensione}\@var{unità}
+Imposta la lunghezza della linea a @var{dimensione}, usando @var{unità} come
+unità di misura. @var{unità} può essere una delle seguenti stringhe: @code{cm},
+@code{mm}, @code{in} o @code{pt}. Questa opzione riguarda l'output LilyPond
+(ovvero, la lunghezza del rigo del frammento musicale), non la formattazione
+del testo.
+
+Se usato senza un argomento, imposta la lunghezza della linea a un valore
+predefinito (calcolato da un algoritmo euristico).
+
+Se non viene assegnata un'opzione @code{line-width}, @command{lilypond-book}
+cerca di indovinare un valore predefinito per gli ambienti @code{lilypond} che
+non usano l'opzione @code{ragged-right}.
+
+@item papersize=@var{stringa}
+Dove @var{stringa} è una delle dimensioni del foglio definite in @file{scm/paper.scm},
+ad esempio @code{a5}, @code{quarto}, @code{11x17} etc.
+
+I valori non definiti in @file{scm/paper.scm} saranno ignorati, sarà inviato
+un messaggio di avviso e al frammento sarà assegnata la dimensione predefinita,
+ovvero @code{a4}.
+
+@item notime
+Non viene visualizzata l'indicazione di tempo e disabilita i segni relativi alla scansione ritmica
+(segno di tempo, barre di divisione) nella partitura.
+
+@item fragment
+Fa sì che @command{lilypond-book} aggiunga del codice boilerplate in modo che
+sia possibile inserire semplicemente, ad esempio,
+
+@example
+c'4
+@end example
+
+@noindent
+senza @code{\layout}, @code{\score}, etc.
+
+@item nofragment
+Non aggiunge del codice ulteriore per completare il codice LilyPond nei frammenti
+musicali. Essendo l'impostazione predefinita, @code{nofragment} di norma
+è ridondante.
+
+@item indent=@var{dimensione}\@var{unità}
+Imposta l'indentazione del primo sistema musicale a @var{dimensione}, usando
+@var{unità} come unità di misura. @var{unità} è una delle seguenti stringhe:
+@code{cm}, @code{mm}, @code{in} o @code{pt}. Questa opzione riguarda
+LilyPond, non la formattazione del testo.
+
+@item noindent
+Imposta l'indentazione del primo sistema musicale su zero. Questa opzione
+interessa LilyPond, non la formattazione del testo. L'assenza di indentazione è
+l'impostazione predefinita, dunque normalmente @code{noindent} è ridondante.
+
+@item quote
+Riduce la lunghezza della linea di un frammento musicale di @math{2*0.4}@dmn{in}
+e inserisce l'output in un blocco per le citazioni. Il valore @q{0.4@dmn{in}}
+può essere controllato con l'opzione @code{exampleindent}.
+
+@item exampleindent
+Imposta la quantità di spazio con cui l'opzione @code{quote} indenta un
+frammento musicale.
+
+@item relative
+@itemx relative=@var{n}
+Usa la modalità di ottava relativa. Per impostazione predefinita, le altezze delle note
+sono riferite al Do@tie{}centrale. L'argomento opzionale del numero intero
+specifica l'ottava della nota iniziale: il valore predefinito @code{1} è il
+Do centrale. L'opzione @code{relative} funziona solo quando è impostata
+l'opzione @code{fragment}, quindi @code{fragment} è implicitamente sottinteso
+da @code{relative}, a prescindere dalla presenza dell'opzione @code{(no)fragment}
+nel sorgente.
+@end table
+
+LilyPond usa @command{lilypond-book} anche per produrre la propria
+documentazione. A questo scopo, esistono altre opzioni più complesse
+per i frammenti musicali.
+
+@table @code
+@item verbatim
+L'argomento di un comando LilyPond viene copiato nel file di output e racchiuso
+in un blocco di testo, seguito da qualsiasi testo assegnato con l'opzione
+@code{intertext} (non ancora implementato); quindi viene mostrata la musica
+vera e propria. Questa opzione non funziona bene con @code{\lilypond@{@}} se
+fa parte di un paragrafo.
+
+Se @code{verbatim} viene usato in un comando @code{lilypondfile}, è possibile
+includere il testo di una parte soltanto del file sorgente. Se il file
+sorgente ha un commento contenente @samp{begin verbatim} (senza
+virgolette), la citazione del sorgente nel blocco testuale inizierà dopo
+l'ultima occorrenza di tale commento; in modo analogo, la citazione del testo
+sorgente si fermerà proprio prima della prima occorrenza di un commento
+contenente @samp{end verbatim}, se presente. Nel seguente file sorgente di
+esempio, la musica viene interpretata in modalità relativa ma il blocco
+testuale non mostrerà il blocco @code{relative}, ovvero
+
+@example
+\relative c' @{ % begin verbatim
+ c4 e2 g4
+ f2 e % end verbatim
+@}
+@end example
+
+@noindent
+mostrerà il seguente blocco testuale
+
+@example
+ c4 e2 g4
+ f2 e
+@end example
+
+@noindent
+Se si desidera tradurre i commenti e i nomi delle variabili nell'output
+verbatim ma non nei sorgenti, si può impostare la variabile d'ambiente
+@code{LYDOC_LOCALEDIR} sul percorso di una directory; la directory deve
+contenere un albero dei cataloghi di messaggio @file{.mo} che hanno
+@code{lilypond-doc} come dominio.
+
+@item addversion
+(Solo per l'output Texinfo.) Aggiunge @code{\version
+@@w@{"@@version@{@}"@}} nella prima riga dell'output di @code{verbatim}.
+
+@item texidoc
+(Solo per l'output Texinfo.) Se @command{lilypond} viene lanciato con
+l'opzione @option{--header=@/texidoc} e il file da elaborare si
+chiama @file{foo.ly}, verrà creato un file @file{foo.texidoc} a patto che
+ci sia un campo @code{texidoc} nel blocco @code{\header}. L'opzione @code{texidoc}
+fa sì che @command{lilypond-book} includa tali file, aggiungendo il loro
+contenuto in forma di blocco di documentazione proprio prima del frammento
+di musica.
+
+Se il file @file{foo.ly} contiene
+
+@example
+\header @{
+ texidoc = "Questo file mostra il funzionamento di una singola nota."
+@}
+@{ c'4 @}
+@end example
+
+@noindent
+e il documento Texinfo @file{test.texinfo} contiene
+
+@example
+@@lilypondfile[texidoc]@{foo.ly@}
+@end example
+
+@noindent
+il seguente comando produce il risultato atteso
+
+@example
+lilypond-book --pdf --process="lilypond \
+ -dbackend=eps --header=texidoc" test.texinfo
+@end example
+
+Per la maggior parte, i documenti di test di LilyPond (nella directory @file{input}
+della distribuzione) sono piccoli file @file{.ly} che hanno esattamente questo
+aspetto.
+
+Ai fini della localizzazione, se il documento Texinfo document contiene
+@code{@@documentlanguage @var{LANG}} e l'header di @file{foo.ly}
+contiene un campo @code{texidoc@var{LANG}}, quando si lancia @command{lilypond}
+con l'opzione @option{--header=@/texidoc@var{LANG}} verrà incluso
+@file{foo.texidoc@var{LANG}} invece di @file{foo.texidoc}.
+
+@item lilyquote
+(Solo per l'output Texinfo.) Questa opzione è simile alla citazione, ma solo
+il frammento musicale (e l'opzionale blocco di testo sottinteso dall'opzione
+@code{verbatim}) vengono inseriti in un blocco di citazione. Questa opzione è
+utile se si vuole citare (@code{quote}) il frammento musicale ma non il
+blocco della documentazione @code{texidoc}.
+
+@item doctitle
+(Solo per l'output Texinfo.) Questa opzione funziona in modo simile
+all'opzione @code{texidoc}: se @command{lilypond} viene lanciato con
+l'opzione @option{--header=@/doctitle} e il file da elaborare si chiama
+@file{foo.ly} e contiene un campo @code{doctitle} nel blocco
+@code{\header}, viene creato un file @file{foo.doctitle}. Se si usa
+l'opzione @code{doctitle}, i contenuti di @file{foo.doctitle},
+che dovrebbero trovarsi su una singola linea di @var{text}, vengono inseriti
+nel documento Texinfo come @code{@@lydoctitle @var{text}}.
+@code{@@lydoctitle} è una macro definita nel documento Texinfo.
+Lo stesso discorso relativo all'elaborazione @code{texidoc} delle lingue
+localizzate si applica anche a @code{doctitle}.
+
+@item nogettext
+(Solo per l'output Texinfo.) Non tradurre i commenti e i nomi delle
+variabili nel blocco testuale del frammento citato.
+
+@item printfilename
+Se un file di input di LilyPond viene incluso con @code{\lilypondfile}, il
+nome del file viene mostrato immediatamente prima del frammento musicale. Per l'output
+HTML, questo nome è un collegamento. Viene mostrata solo la base del nome del
+file, ovvero viene tolta la parte che costituisce il percorso del file.
+
+@end table
+
+
+@node Utilizzo di lilypond-book
+@section Utilizzo di @command{lilypond-book}
+@translationof Invoking lilypond-book
+
+@command{lilypond-book} crea un file con una delle seguenti
+estensioni: @file{.tex}, @file{.texi}, @file{.html} o @file{.xml},
+a seconda del formato dell'output. Tutti i file @file{.tex}, @file{.texi} e
+@file{.xml} necessitano di un'ulteriore elaborazione.
+
+@subheading Istruzioni specifiche di ogni formato
+
+@subsubheading @LaTeX{}
+
+Esistono due modi di elaborare il documento @LaTeX{} per la stampa o la
+pubblicazione: generare direttamente un file PDF tramite PDF@LaTeX{} oppure
+generare un file PostScript tramite @LaTeX{}, attraverso un traduttore da DVI a
+PostScript come @command{dvips}. Il primo modo è più semplice e raccomandato@footnote{Nota
+che PDF@LaTeX{} e @LaTeX{} potrebbero non essere entrambi utilizzabili per compilare
+un qualsiasi documento @LaTeX{}: ecco perché vengono illustrati i due modi.}, e
+indipendentemente da quello che userai, puoi convertire facilmente PostScript e
+PDF con strumenti come @command{ps2pdf} e @command{pdf2ps} inclusi nel pacchetto
+Ghostscript.
+
+Per creare un file PDF con PDF@LaTeX{}, si usa
+
+@example
+lilypond-book --pdf tuofile.lytex
+pdflatex tuofile.tex
+@end example
+
+@cindex caratteri vettoriali
+@cindex type1, carattere
+@cindex dvips
+@cindex utilizzo di dvips
+Per produrre l'output PDF attraverso @LaTeX{}/@command{dvips}/@command{ps2pdf},
+bisogna usare questi comandi
+
+@example
+lilypond-book tuofile.lytex
+latex tuofile.tex
+dvips -Ppdf tuofile.dvi
+ps2pdf tuofile.ps
+@end example
+
+@noindent
+Il file @file{.dvi} creato da questa sequenza non conterrà le
+teste delle note. È normale; se si seguono le istruzioni, le teste
+verranno incluse nei file @file{.ps} e @file{.pdf}.
+
+L'esecuzione di @command{dvips} potrebbe generare dei messaggi di avviso
+relativi ai caratteri; questi messaggi sono innocui e possono
+essere ignorati. Se esegui @command{latex} in modalità due colonne, ricorda
+di aggiungere @code{-t landscape} alle opzioni di @command{dvips}.
+
+@subsubheading Texinfo
+
+Per generare un documento Texinfo (in qualsiasi formato di output), si seguono
+le normali procedure usate con Texinfo; ovvero, si lancia @command{texi2pdf} o
+@command{texi2dvi} o @command{makeinfo}, a seconda del formato di output
+che si vuole creare.
+@ifinfo
+@xref{Format with texi2dvi, , , texinfo, GNU Texinfo}, e @ref{Creating
+an Info File, , , texinfo, GNU Texinfo}.
+@end ifinfo
+@ifnotinfo
+Si veda la documentazione di Texinfo per ulteriori dettagli.
+@end ifnotinfo
+
+
+@subheading Opzioni da linea di comando
+
+@command{lilypond-book} accetta le seguenti opzioni da linea di comando:
+
+@table @code
+@item -f @var{formato}
+@itemx --format=@var{formato}
+Specifica il tipo di documento da elaborare: @code{html}, @code{latex},
+@code{texi} (il formato predefinito) o @code{docbook}. Se manca questa opzione,
+@command{lilypond-book} cerca di rilevare il formato automaticamente, si veda
+@ref{Filename extensions}. Attualmente, @code{texi} è equivalente a
+@code{texi-html}.
+
+@c This complicated detail is not implemented, comment it out -jm
+@ignore
+The @code{texi} document type produces a Texinfo file with music
+fragments in the printed output only. For getting images in the HTML
+version, the format @code{texi-html} must be used instead.
+@end ignore
+
+@item -F @var{filtro}
+@itemx --filter=@var{filtro}
+Convoglia i frammenti attraverso il @var{filtro}. @code{lilypond-book} non
+esegue contemporaneamente il filtro e l'elaborazione. Ad esempio,
+
+@example
+lilypond-book --filter='convert-ly --from=2.0.0 -' mio-libro.tely
+@end example
+
+@item -h
+@itemx --help
+Mostra un breve messaggio di aiuto.
+
+@item -I @var{dir}
+@itemx --include=@var{dir}
+Aggiunge @var{dir} al percorso di inclusione. @command{lilypond-book} cerca
+anche dei frammenti già compilati nel percorso di inclusione e non li riscrive
+nella directory di output, quindi in alcuni casi è necessario eseguire
+ulteriori comandi come @command{makeinfo} o @command{latex} con le stesse
+opzioni @code{-I @var{dir}}.
+
+@item -o @var{dir}
+@itemx --output=@var{dir}
+Salva i file generati nella directory @var{dir}. L'esecuzione di
+@command{lilypond-book} genera tanti piccoli file che LilyPond
+elaborerà. Per evitare tutto questo disordine nella directory dei
+sorgenti, si usa l'opzione da linea di comando @option{--output}
+e si entra in questa directory prima di eseguire @command{latex}
+o @command{makeinfo}.
+
+@example
+lilypond-book --output=out tuofile.lytex
+cd out
+...
+@end example
+
+@itemx --skip-lily-check
+Non si arresta se non viene trovato l'output di lilypond. Viene usata per la
+documentazione Info di LilyPond, che è priva di immagini.
+
+@itemx --skip-png-check
+Non si arresta se non vengono trovate immagini PNG per i file EPS. Viene usata
+per la documentazione Info di LilyPond, che è priva di immagini.
+
+@itemx --lily-output-dir=@var{dir}
+Scrive i file lily-XXX nella directory @var{dir}, crea un link nella
+directory @code{--output}. Si usa questa opzione per risparmiare tempo nella
+compilazione di documenti situati in directory diverse che condividono
+molti identici frammenti.
+
+@itemx --info-images-dir=@var{dir}
+Formatta l'output di Texinfo in modo che Info cerchi le immagini della musica
+in @var{dir}.
+
+@itemx --latex-program=@var{prog}
+Lancia l'eseguibile @command{prog} invece di @command{latex}. Questa opzione
+è utile, ad esempio, se il documento è elaborato con @command{xelatex}.
+
+@itemx --left-padding=@var{quantità}
+Crea una spaziatura corrispondente a questa quantità tra i riquadri EPS. @var{quantità} è
+misurata in millimetri e il valore predefinito è 3.0. Questa opzione si usa
+se i righi dello spartito oltrepassano il margine destro.
+
+La larghezza di un sistema molto denso può variare in base agli elementi
+della notazione attaccati al margine sinistro, come i numeri di battuta e
+i nomi degli strumenti. Questa opzione accorcia tutte le linee e le sposta a
+a destra della stessa quantità.
+
+@item -P @var{comando}
+@itemx --process=@var{comando}
+Elabora i frammenti di LilyPond con @var{comando}. Il comando predefinito è
+@code{lilypond}. @code{lilypond-book} non userà @code{--filter} e
+@code{--process} contemporaneamente.
+
+@item --pdf
+Crea file PDF da usare con PDF@LaTeX{}.
+
+@itemx --use-source-file-names
+Salva i file di output dei frammenti con lo stesso nome, esclusa l'estensione,
+dei sorgenti. Questa opzione funziona solo con i frammenti inclusi con
+@code{lilypondfile} e solo se le directory indicate da @code{--output-dir} e
+@code{--lily-output-dir} sono diverse.
+
+@item -V
+@itemx --verbose
+Mostra un output dettagliato.
+
+@item -v
+@itemx --version
+Mostra informazioni sulla versione.
+@end table
+
+@knownissues
+
+Il comando Texinfo @code{@@pagesizes} non viene inrerpretato. Allo stesso
+modo, i comandi @LaTeX{} che modificano i margini e la larghezza della linea
+dopo il preambolo vengono ignorati.
+
+Solo il primo @code{\score} di un blocco LilyPond viene elaborato.
+
+
+@node Estensioni dei nomi di file
+@section Estensioni dei nomi di file
+@translationof Filename extensions
+
+Si può usare qualsiasi estensione per il file di input, ma se non si usa
+l'estensione raccomandata per uno specifico formato potrebbe essere
+necessario specificare a mano il formato di output; per i dettagli si veda
+@ref{Invoking lilypond-book}. Altrimenti, @command{lilypond-book} sceglie
+automaticamente il formato di output in base all'estensione del file di input.
+
+@quotation
+@multitable @columnfractions .2 .5
+@item @strong{estensione} @tab @strong{formato di output}
+@item
+@item @file{.html} @tab HTML
+@item @file{.htmly} @tab HTML
+@item @file{.itely} @tab Texinfo
+@item @file{.latex} @tab @LaTeX{}
+@item @file{.lytex} @tab @LaTeX{}
+@item @file{.lyxml} @tab DocBook
+@item @file{.tely} @tab Texinfo
+@item @file{.tex} @tab @LaTeX{}
+@item @file{.texi} @tab Texinfo
+@item @file{.texinfo} @tab Texinfo
+@item @file{.xml} @tab HTML
+@end multitable
+@end quotation
+
+Se si usa per il file di input la stessa estensione che @command{lilypond-book}
+usa per il file di output e se il file di input è nella stessa directory
+in cui lavora @command{lilypond-book}, bisogna usare l'opzione @code{--output}
+per far sì che @command{lilypond-book} sia eseguito; altrimenti si ferma e
+mostra un messaggio di errore simile a @qq{L'output sovrascriverebbe il file di input}.
+
+
+@node Modelli per lilypond-book
+@section Modelli per lilypond-book
+@translationof lilypond-book templates
+
+Ecco alcuni modelli da usare con @code{lilypond-book}. Se non hai familiarità
+con questo programma, consulta @ref{lilypond-book}.
+
+@subsection LaTeX
+
+Si possono includere frammenti LilyPond in un documento LaTeX.
+
+@example
+\documentclass[]@{article@}
+
+\begin@{document@}
+
+Normale testo LaTeX.
+
+\begin@{lilypond@}
+\relative c'' @{
+ a4 b c d
+@}
+\end@{lilypond@}
+
+Altro testo LaTeX, seguito da alcune opzioni tra parentesi quadre.
+
+\begin@{lilypond@}[fragment,relative=2,quote,staffsize=26,verbatim]
+d4 c b a
+\end@{lilypond@}
+\end@{document@}
+@end example
+
+@subsection Texinfo
+
+Si possono includere frammenti LilyPond in Texinfo; infatti questo intero
+manuale è scritto in Texinfo.
+
+@example
+\input texinfo @c -*-texinfo-*-
+@@node Top
+@@top
+
+Testo Texinfo
+
+@@lilypond
+\relative c' @{
+ a4 b c d
+@}
+@@end lilypond
+
+Altro testo Texinfo, seguito dalle opzioni tra parentesi.
+
+@@lilypond[verbatim,fragment,ragged-right]
+d4 c b a
+@@end lilypond
+
+@@bye
+@end example
+
+
+@subsection html
+
+@example
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- header_tag -->
+<HTML>
+<body>
+
+<p>
+I documenti per lilypond-book possono combinare liberamente musica e testo. Ad
+esempio,
+<lilypond>
+\relative c'' @{
+ a4 b c d
+@}
+</lilypond>
+</p>
+
+<p>
+Ancora un po' di Lilypond, questa volta con delle opzioni:
+
+<lilypond fragment quote staffsize=26 verbatim>
+a4 b c d
+</lilypond>
+</p>
+
+</body>
+</html>
+
+
+@end example
+
+@subsection xelatex
+
+@verbatim
+\documentclass{article}
+\usepackage{ifxetex}
+\ifxetex
+%elementi specifici di xetex
+\usepackage{xunicode,fontspec,xltxtra}
+\setmainfont[Numbers=OldStyle]{Times New Roman}
+\setsansfont{Arial}
+\else
+%Questo può essere lasciato vuoto se non si usa pdftex
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{mathptmx}%Times
+\usepackage{helvet}%Helvetica
+\fi
+%Qui è possibile inserire tutti i pacchetti inclusi anche in pdftex
+\usepackage[ngerman,finnish,english]{babel}
+\usepackage{graphicx}
+
+\begin{document}
+\title{Un breve documento con LilyPond e xelatex}
+\maketitle
+
+I comandi abituali di \textbf{font} interni al \emph{testo} funzionano,
+perché \textsf{sono supportati da \LaTeX{} e XeteX.}
+Se vuoi usare comandi specifici come \verb+\XeTeX+, devi
+includerli nuovamente in un ambiente \verb+\ifxetex+.
+You can use this to print the \ifxetex \XeTeX{} command \else
+XeTeX command \fi which is not known to normal \LaTeX .
+
+Nel testo normale si possono usare semplicemente i comandi LilyPond, come in
+questo esempio:
+
+\begin{lilypond}
+{a2 b c'8 c' c' c'}
+\end{lilypond}
+
+\noindent
+e così via.
+
+I tipi di carattere dei frammenti inseriti con LilyPond devono essere impostati
+all'interno dei frammenti stessi. Si legga il manuale di Uso dell'applicazione per
+sapere come usare lilypond-book.
+
+\selectlanguage{ngerman}
+Auch Umlaute funktionieren ohne die \LaTeX -Befehle, wie auch alle
+anderen
+seltsamen Zeichen: __ ______, wenn sie von der Schriftart
+unterst__tzt werden.
+\end{document}
+@end verbatim
+
+
+@node Condividere l'indice
+@section Condividere l'indice
+@translationof Sharing the table of contents
+
+Queste funzioni sono già incluse nel pacchetto OrchestralLily:
+
+@example
+@url{http://repo.or.cz/w/orchestrallily.git}
+@end example
+
+Alcuni utenti
+preferiscono esportare l'indice da lilypond e leggerlo da dentro
+@LaTeX{} per la sua maggiore flessibilità nella gestione del testo.
+
+@subsubheading Esportare l'indice da LilyPond
+
+Per questo esempio si presume che lo spartito abbia vari movimenti nello stesso file
+di output di lilypond.
+
+@smallexample
+#(define (oly:create-toc-file layout pages)
+ (let* ((label-table (ly:output-def-lookup layout 'label-page-table)))
+ (if (not (null? label-table))
+ (let* ((format-line (lambda (toc-item)
+ (let* ((label (car toc-item))
+ (text (caddr toc-item))
+ (label-page (and (list? label-table)
+ (assoc label label-table)))
+ (page (and label-page (cdr label-page))))
+ (format #f "~a, section, 1, @{~a@}, ~a" page text label))))
+ (formatted-toc-items (map format-line (toc-items)))
+ (whole-string (string-join formatted-toc-items ",\n"))
+ (output-name (ly:parser-output-name parser))
+ (outfilename (format "~a.toc" output-name))
+ (outfile (open-output-file outfilename)))
+ (if (output-port? outfile)
+ (display whole-string outfile)
+ (ly:warning (_ "Unable to open output file ~a for the TOC information") outfilename))
+ (close-output-port outfile)))))
+
+\paper @{
+ #(define (page-post-process layout pages) (oly:create-toc-file layout pages))
+@}
+@end smallexample
+
+@subsubheading Importare l'indice in LaTeX
+
+In LaTeX l'intestazione deve includere:
+
+@c no, this doesn't require the smallexample, but since the other
+@c two blocks on this page use it, I figured I might as well
+@c user it here as well, for consistency. -gp
+@smallexample
+\usepackage@{pdfpages@}
+\includescore@{nameofthescore@}
+@end smallexample
+
+@noindent
+dove @code{\includescore} viene definito in questo modo:
+
+@smallexample
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \includescore@{PossibleExtension@}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Read in the TOC entries for a PDF file from the corresponding .toc file.
+% This requires some heave latex tweaking, since reading in things from a file
+% and inserting it into the arguments of a macro is not (easily) possible
+
+% Solution by Patrick Fimml on #latex on April 18, 2009:
+% \readfile@{filename@}@{\variable@}
+% reads in the contents of the file into \variable (undefined if file
+% doesn't exist)
+\newread\readfile@@f
+\def\readfile@@line#1@{%
+@{\catcode`\^^M=10\global\read\readfile@@f to \readfile@@tmp@}%
+\edef\do@{\noexpand\g@@addto@@macro@{\noexpand#1@}@{\readfile@@tmp@}@}\do%
+\ifeof\readfile@@f\else%
+\readfile@@line@{#1@}%
+\fi%
+@}
+\def\readfile#1#2@{%
+\openin\readfile@@f=#1 %
+\ifeof\readfile@@f%
+\typeout@{No TOC file #1 available!@}%
+\else%
+\gdef#2@{@}%
+\readfile@@line@{#2@}%
+\fi
+\closein\readfile@@f%
+@}%
+
+
+\newcommand@{\includescore@}[1]@{
+\def\oly@@fname@{\oly@@basename\@@ifmtarg@{#1@}@{@}@{_#1@}@}
+\let\oly@@addtotoc\undefined
+\readfile@{\oly@@xxxxxxxxx@}@{\oly@@addtotoc@}
+\ifx\oly@@addtotoc\undefined
+\includepdf[pages=-]@{\oly@@fname@}
+\else
+\edef\includeit@{\noexpand\includepdf[pages=-,addtotoc=@{\oly@@addtotoc@}]
+@{\oly@@fname@}@}\includeit
+\fi
+@}
+@end smallexample
+
+
+@node Metodi alternativi per combinare testo e musica
+@section Metodi alternativi per combinare testo e musica
+@translationof Alternate methods of mixing text and music
+
+Altri modi per combinare testo e musica (senza usare
+@command{lilypond-book}) sono trattati in
+@ref{LilyPond output in other programs}.
+
+
@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: cff226053d927e433473697fe743bdfd721d2607
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
questo argomento se non si conosce la linea di comando.
@menu
-* Invocare lilypond::
+* Utilizzo di lilypond::
* Opzioni della linea di comando per lilypond::
* Variabili d'ambiente::
* LilyPond in una gabbia chroot::
@end menu
-@node Invocare lilypond
-@unnumberedsubsec Invocare @command{lilypond}
+@node Utilizzo di lilypond
+@unnumberedsubsec Utilizzo di @command{lilypond}
@translationof Invoking lilypond
L'eseguibile @command{lilypond} può essere lanciato dalla linea di comando
@unnumberedsubsec Opzioni della linea di comando per @command{lilypond}
@translationof Command line options for lilypond
-@cindex Invocare @command{lilypond}
+@cindex Utilizzo di @command{lilypond}
@cindex opzioni della linea di comando per @command{lilypond}
@cindex linea di comando, opzioni di
@cindex switches
-@c -*- coding: utf-8; mode: texinfo; -*-
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@translationof Suggestions for writing files
Ora puoi iniziare a scrivere file di input di LilyPond più grandi --
-non più i piccoli esempi del tutorial, ma brani completi.
+non più i piccoli esempi del tutorial, ma pezzi completi.
Ma qual è il modo migliore di farlo?
Finché LilyPond comprende i file di input e produce l'output che
desideri, non importa quale aspetto abbiano i file di input. Tuttavia,
-ci sono altre questioni da tenere a mente quando si scrivono
+ci sono altri aspetti da tenere a mente quando si scrivono
file di input di LilyPond.
@itemize
-@item Se fai un errore? La struttura di un file LilyPond può rendere
-l'individuazione di certi errori più facile (o più difficile).
-
-@item Se vuoi inviare i tuoi file di input a qualcuno? E se vuoi modificare
-i tuoi file di input dopo qualche anno? Alcuni file di input di LilyPond sono
-comprensibili a prima vista; altri ti possono lasciare perplesso per un'ora.
-
-@item Se vuoi aggiornare il tuo file per poterlo usare
-con una versione più recente di LilyPond? La sintassi di input cambia di
-tanto in tanto mentre LilyPond si evolve. Alcune modifiche possono essere
-fatte in automatico con @code{convert-ly}, ma altre potrebbero richiedere
+@item Che fare in caso di errore? La struttura data a un file LilyPond può
+rendere l'individuazione di certi tipi di errore più facile (o più difficile).
+
+@item Che fare se vuoi inviare i tuoi file di input a qualcuno? E se decidi di
+modificare i tuoi file di input dopo qualche anno? Alcuni file di input di
+LilyPond sono comprensibili a prima vista; altri ti possono lasciare a grattarti
+la testa per un'ora.
+
+@item Che fare se vuoi aggiornare il tuo file per poterlo usare con una
+versione più recente di LilyPond? Con l'evolversi di LilyPond, la sintassi di
+input si trova soggetta a occasionali cambiamenti. Alcune modifiche possono
+essere fatte in automatico con @code{convert-ly}, ma altre potrebbero richiedere
un intervento manuale. I file di input di LilyPond possono essere strutturati
-per poter essere aggiornati in modo più semplice (o più difficile).
+in moda da essere poi aggiornati in modo più semplice (o più difficile).
@end itemize
* Scrivere musica esistente::
* Grandi progetti::
* Risoluzione dei problemi::
-* Make e Makefiles::
+* Make e Makefile::
@end menu
@section Consigli generali
@translationof General suggestions
-Ecco alcuni consigli che possono aiutarti ad evitare o risolvere
+Ecco alcuni consigli che possono aiutarti a evitare o risolvere
i problemi:
@itemize
@item @strong{Includi il numero di @code{\version} in ogni file}. Nota che tutti
i modelli contengono l'informazione su @code{\version}. Si consiglia vivamente
di includere sempre @code{\version}, non importa quanto piccolo possa essere
-il file. Per esperienza personale, è piuttosto frustrante cercare di ricordare
-quale versione di LilyPond si usava alcuni anni prima. @command{convert-ly}
+il file. L'esperienza personale insegna come sia frustrante cercare di ricordare
+quale versione di LilyPond si usava alcuni anni prima! @command{convert-ly}
richiede che si dichiari la versione di LilyPond utilizzata.
@item @strong{Includi i controlli}: @ruser{Bar and bar number checks},
-@ruser{Octave checks}. Se includi i controlli ogni tanto, allora se
-fai un errore lo puoi individuare più rapidamente. Cosa si intende per
-@q{ogni tanto}? Dipende dalla complessità della musica.
-Se la musica è molto semplice, magari solo una o due volte. Se la musica
-è molto complessa, ad ogni battuta.
+@ruser{Octave checks}. Includendo i controlli ogni tanto, se fai
+un errore lo puoi individuare più rapidamente. Cosa si intende per
+@q{ogni tanto}? Dipende dalla complessità della musica. Se la musica
+è molto semplice, anche solo una volta o due. Se la musica è molto
+complessa, a ogni battuta.
@item @strong{Una battuta per ogni linea di testo}. Se c'è qualcosa di
complicato, nella musica stessa o nell'output che desideri, di solito è
preferibile scrivere una sola battuta per linea. Risparmiare spazio sullo
-schermo concentrando otto battute per ogni riga non conviene affatto
+schermo concentrando otto battute per ogni riga non è affatto conveniente
se poi devi fare il @q{debug} dei file di input.
@item @strong{Inserisci dei commenti nei file di input}. Puoi usare i numeri
aver bisogno dei commenti mentre scrivi il brano la prima volta, ma se due
o tre anni dopo vuoi cambiare qualcosa o se vuoi dare il sorgente a un amico,
sarà molto più difficile capire le tue intenzioni e la struttura del file
-se non sono presenti dei commenti.
+se mancano i commenti.
@item @strong{Indenta le parentesi graffe}. Molti problemi sono causati
-da uno squilibrio nel numero di @code{@{} e @code{@}}.
+da mancata corrispondenza tra le quantità di @code{@{} e di @code{@}}.
@item @strong{Esplicita le durate} all'inizio delle sezioni e delle
-variabili. Se specifichi @code{c4 d e} all'inizio di un fraseggio
-(innvece di @code{c d e} soltanto) puoi evitare alcuni problemi
-quando riarrangi la musica successivamente.
+variabili. Se specifichi @code{c4 d e} all'inizio di una frase
+(invece di @code{c d e} soltanto) puoi evitare l'insorgere di problemi
+al momento di rimetter mano alla musica.
@item @strong{Separa le modifiche manuali (tweak)} dalle definizioni
musicali. Vedi @rlearning{Ridurre l’input grazie a variabili e funzioni}, e
@section Scrivere musica esistente
@translationof Typesetting existing music
-Se stai scrivendo della musica da una partitura esistente (ovvero il brano
-di uno spartito già scritto),
+Se stai riportando della musica da una partitura esistente (ovvero il brano
+contenuto in uno spartito già scritto),
@itemize
@item Inserisci in LilyPond le note del manoscritto (la copia fisica della
musica) un sistema alla volta (ma sempre una battuta per linea di testo),
-e controlla ogni sistema quando ne completi uno. Puoi usare le proprietà
+e controlla ogni sistema completato. Puoi usare le proprietà
@code{showLastLength} o @code{showFirstLength} per velocizzare
l'elaborazione -- vedi @ruser{Skipping corrected music}.
riga. Così LilyPond potrà inserire le interruzioni dove ritiene stiano
meglio.
-@item Quando si inserisce una parte per uno strumento traspositore in una
-variabile, si consiglia di avvolgere le note tra parentesi
+@item Quando si inserisce una parte per strumento traspositore all'interno
+di una variabile, è consigliabile racchiudere le note tra parentesi graffe
@example
\transpose c altezza-naturale @{...@}
@end example
@noindent
-(dove @code{altezza-naturale} è l'altezza dello strumento) in modo
-che la musica contenuta nella variabile sia effettivamente in Do. Puoi trasporla
-all'indietro quando la variabile viene usata, se richiesto, ma potresti non
-desiderarlo (ad esempio quando si stampa una partitura in intonazione reale,
-quando si converte una parte per trombone dalla chiave di Sol alla chiave di
-basso, etc.). Errori nelle trasposizioni sono meno probabili se tutta la musica
-contenuta nelle variabili è ad un'altezza costante.
-
-Inoltre, trasponi sempre verso/dal Do. Questo significa che le uniche altre
-tonalità che userai sono le altezze naturali degli strumenti - bes
+(dove @code{altezza-naturale} corrisponde all'intonazione di base dello
+strumento) così che la musica contenuta nella variabile sia effettivamente
+scritta in Do. La puoi presentare trasposta quando la variabile viene usata,
+se necessario, ma potresti non desiderarlo (ad esempio quando si stampa una
+partitura in intonazione reale, quando si traspone una parte per trombone
+dalla chiave di Sol alla chiave di basso, etc.). Errori nelle trasposizioni
+sono meno probabili se tutta la musica contenuta nelle variabili è ad
+un'altezza costante.
+
+Inoltre, trasponi sempre in relazione al Do. Questo significa che le uniche
+altre tonalità che userai saranno le altezze naturali degli strumenti - bes
per una tromba in Si bemolle, aes per un clarinetto in La bemolle, etc.
@end itemize
@item @strong{Usa una variabile per ogni voce}, con un minimo di
struttura nella definizione. La struttura della sezione
-@code{\score} è la parte che più probabilmente cambierà;
-la definizione di @code{violin} è molto improbabile che cambi
+@code{\score} è la parte più probabilmente soggetta a cambiamenti;
+è invece molto improbabile che la definizione di @code{violin} cambi
in una nuova versione di LilyPond.
@example
@end example
@item @strong{Separa le modifiche manuali (tweak) dalle definizioni musicali}. Questo
-punto è stato menzionato prima, ma nei grandi progetti diventa di vitale
+punto è stato menzionato prima; nei grandi progetti diventa di vitale
importanza. Potrebbe essere necessario modificare la definizione
di @code{fthenp}, ma si dovrebbe farlo una volta sola e senza toccare
niente in @code{violin}.
Prima o poi ti capiterà di scrivere un file che LilyPond non
riesce a compilare. I messaggi inviati da LilyPond potrebbero aiutarti
-a trovare l'errore, ma in molti casi devi fare qualche ricerca
+a trovare l'errore, ma in molti casi sarà necessario fare qualche ricerca
per individuare l'origine del problema.
-Gli strumenti più potenti per questo scopo sono il commento della
+Gli strumenti più potenti a questo riguardo sono il commento della
linea singola (indicato da @code{%}) e il commento di blocco
-(indicato da @code{%@{ ... %@}}). Se non sai dove sta il problema,
+(indicato da @code{%@{ ... %@}}). Se non sai dove sia il problema,
inizia col commentare ampie parti del file di input. Dopo aver commentato
una sezione, prova a compilare di nuovo il file. Se funziona, allora il
problema deve trovarsi nella parte che hai appena commentato. Se non
-funziona, continua a commentare il materiale finché non hai qualcosa
-che funziona.
+funziona, continua a commentare il materiale finché non ottieni un codice
+funzionante.
-Nel caso più estremo, potresti finire con soltanto
+Nel caso estremo, potresti finire con soltanto
@example
\score @{
@noindent
(in altre parole, un file senza musica)
-Se accade questo, non rinunciare. Decommenta un pezzetto -- ad esempio,
+Se dovesse succedere, non rinunciare. Decommenta un pezzetto -- ad esempio,
la parte di basso -- e vedi se funziona. Se non funziona,
allora commenta tutta la musica del basso (ma lascia
@code{\bass} in @code{\score} non commentato).
@}
@end example
-Ora inizia piano piano a decommentare la parte di
+Ora inizia a decommentare mano a mano la parte di
@code{bass} finché non trovi la linea che causa il problema.
Un'altra tecnica di debug molto utile consiste nel creare
@rweb{Esempi minimi}.
-@node Make e Makefiles
-@section Make e Makefiles
+@node Make e Makefile
+@section Make e Makefile
@translationof Make and Makefiles
-@cindex makefiles
+@cindex makefile
@cindex make
Tutte le piattaforme su cui Lilypond può essere installato supportano un
software chiamato @code{make}. Questo software legge un file speciale chiamato
-@code{Makefile} che definisce quali file dipendono da quali altri file e quali
-comandi bisogna dare al sistema operativo per produrre un file da un
-altro. Ad esempio makefile può spiegare come generare
+@code{Makefile} che definisce quali file dipendono da quali altri e quali
+comandi occorra dare al sistema operativo per produrre un file da un
+altro. Ad esempio Makefile può spiegare come generare
@file{ballad.pdf} e @file{ballad.midi} da @file{ballad.ly} eseguendo
Lilypond.
-Ci sono situazioni in cui è una buona idea creare un @code{Makefile}
+In alcune situazioni, è una buona idea creare un @code{Makefile}
per il proprio progetto, per proprio comodo o come cortesia
-per altri che potrebbero avere accesso ai file sorgente.
+per quanti altri possano avere accesso ai file sorgente.
Questo vale per i progetti molto ampi con tanti file inclusi e
diverse opzioni di output (ad esempio, partitura completa, parti, partitura
-del direttore, riduzione per pianoforte, etc.), o per progetti che
+del direttore, riduzione per pianoforte, etc.) o per progetti che
richiedono comandi difficili per la compilazione (come i progetti che
-usano @code{lilypond-book}). Makefiles variano molto in complessità
+usano @code{lilypond-book}). I Makefile variano molto in complessità
e flessibilità, in base alle necessità e alle abilità degli autori.
Il programma GNU Make è installato nelle distribuzioni GNU/Linux
e su MacOS X ed è disponibile anche per Windows.
Si veda il @strong{Manuale di GNU Make} per conoscere in dettaglio l'uso di
-@code{make}, dato che quel che segue dà solo un'idea quel che può fare.
+@code{make}, dato che quel che segue dà solo un'idea delle sue potenzialità.
-I comandi per definire delle regole in un makefile cambiano in base
-alla piattaforma; ad esempio le varie forme di Linux e
+I comandi per definire delle regole in un Makefile cambiano in base
+alla piattaforma; ad esempio le varie distribuzioni di Linux e
MacOS usano @code{bash}, mentre Windows usa @code{cmd}. Nota che su
-MacOS X bisogna configurare il sistema per usare l'interprete da linea
-di comando. Di seguito alcuni makefile di esempio, con versioni sia per
+MacOS X è necessario configurare il sistema per usare l'interprete da linea
+di comando. Di seguito alcuni Makefile di esempio, con versioni sia per
Linux/MacOS sia per Windows.
-Il primo esempio è per un'opera per orchestra in quattro
-movimenti e ha la seguente struttura di directory:
+Il primo esempio è per una composizione per orchestra in quattro
+movimenti e presenta una directory strutturata come segue:
@example
Symphony/
\include ../Notes/cello.ily
@end example
-Il makefile avrà i target di @code{score} (l'intero brano in partitura
-completa), @code{movements} (movimenti individuali in partitura completa),
-e @code{parts} (parti individuali per i musicisti). C'è anche un
+Il Makefile avrà i target di @code{score} (l'intero brano in partitura
+completa), @code{movements} (singoli movimenti in partitura completa),
+e @code{parts} (singole parti per i musicisti). C'è anche un
target @code{archive} che creerà un archivio compresso dei file sorgenti,
utile per la condivisione via web o email. Ecco un esempio di
-makefile per GNU/Linux e MacOS X. Dovrebbe essere salvato col
+Makefile per GNU/Linux e MacOS X. Dovrebbe essere salvato col
nome @code{Makefile} nella directory principale del progetto:
@warning{Quando si definisce un target o una regola di pattern, le
@end example
-Ci sono complicazioni specifiche nella piattaforma Windows. Dopo aver
+Ci sono alcune complicazioni specifiche della piattaforma Windows. Dopo aver
scaricato e installato GNU Make per Windows, bisogna impostare il percorso
corretto nelle variabili d'ambiente di sistema perché la
shell DOS possa trovare il programma Make. Per farlo, clicca col tasto destro
C:\Program Files\GnuWin32\bin
@end example
-Lo stesso makefile deve essere modificato per gestire diversi comandi
+Lo stesso Makefile deve essere modificato per gestire diversi comandi
shell e gli spazi che sono presenti in alcune directory predefinite
di sistema. Il target @code{archive} target viene tolto perché Windows
non ha il comando @code{tar}; inoltre Windows ha una diversa estensione
@c TODO: make this thing work on Windows
-Il makefile precedente non funziona su Windows. Un'alternativa per
+Il Makefile precedente non funziona su Windows. Un'alternativa per
gli utenti Windows consiste nel creare un semplice file batch
contenente i comandi per la compilazione. Questo file non terrà
-traccia delle dipendenze come fa invece un makefile, ma almeno riduce
+traccia delle dipendenze come fa invece un Makefile, ma almeno riduce
il processo di compilazione a un solo comando. Salva il codice
seguente come @command{build.bat} o @command{build.cmd}.
Il file batch può essere eseguito nel prompt DOS o semplicemente con
@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
@ignore
- Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+ Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@menu
* Perché la sintassi cambia?::
-* Invocare convert-ly::
+* Utilizzo di convert-ly::
* Opzioni da linea di comando per convert-ly::
* Problemi nell'eseguire convert-ly::
* Conversioni manuali::
aggiornare a mano i vecchi file di input di LilyPond.
-@node Invocare convert-ly
-@section Invocare @command{convert-ly}
+@node Utilizzo di convert-ly
+@section Utilizzo di @command{convert-ly}
@translationof Invoking convert-ly
@command{convert-ly} usa la dichiarazione @code{\version} nel file di input
@end html
@end ifhtml
-@emph{最終更新日 Thu Mar 24 14:52:33 UTC 2011
+@emph{最終更新日 Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
4 出力を調整する
@*
-15408
+15393
@tab Yoshiki Sawada
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
@end html
@end ifhtml
@ifnothtml
-はい
+partially
@end ifnothtml
@tab post-GDP
@item
1.1 ピッチ
@*
-4479
+4502
@tab Yoshiki Sawada
@tab
@tab
@ifhtml
@html
-<span style="background-color: #25fe1f">partially</span>
+<span style="background-color: #2cff20">partially</span>
@end html
@end ifhtml
@ifnothtml
@end ifnothtml
@tab post-GDP
@item
-1.3 表現記号
+1.3 発想記号
@*
1726
@tab Yoshiki Sawada
@item
1.4 繰り返し
@*
-930
+945
+@tab Yoshiki Sawada
+@tab
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">はい</span>
+@end html
+@end ifhtml
+@ifnothtml
+はい
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #39ff22">partially</span>
+@end html
+@end ifhtml
+@ifnothtml
+partially
+@end ifnothtml
+@tab post-GDP
+@item
+1.5 同時進行する音符
+@*
+2216
+@tab Yoshiki Sawada
+@tab
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">はい</span>
+@end html
+@end ifhtml
+@ifnothtml
+はい
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #83fe2c">partially</span>
+@end html
+@end ifhtml
+@ifnothtml
+partially
+@end ifnothtml
+@tab post-GDP
+@item
+1.6 譜の記譜法
+@*
+2345
+@tab Yoshiki Sawada
+@tab
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">はい</span>
+@end html
+@end ifhtml
+@ifnothtml
+はい
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #9eff30">partially</span>
+@end html
+@end ifhtml
+@ifnothtml
+partially
+@end ifnothtml
+@tab post-GDP
+@item
+1.7 編集者の注釈
+@*
+931
+@tab Yoshiki Sawada
+@tab
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">はい</span>
+@end html
+@end ifhtml
+@ifnothtml
+はい
+@end ifnothtml
+@tab
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">はい</span>
+@end html
+@end ifhtml
+@ifnothtml
+はい
+@end ifnothtml
+@tab post-GDP
+@item
+1.8 テキスト
+@*
+2716
@tab Yoshiki Sawada
@tab
@tab
@item
3 @command{lilypond-book}: Integrating text and music
@*
-3764
+3952
@tab Yoshiki Sawada
@tab
@tab
@ifhtml
@html
-<span style="background-color: #91ff2e">partially</span>
+<span style="background-color: #97ff2f">partially</span>
@end html
@end ifhtml
@ifnothtml
@item
導入部
@*
-4506
+4564
@tab Yoshiki Sawada
@*
Yoshinobu Ishizaki
@item
ダウンロード
@*
-1183
+1195
@tab Yoshiki Sawada
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
@end html
@end ifhtml
@ifnothtml
-はい
+partially
@end ifnothtml
@tab pre-GDP
@item
マニュアル
@*
-1200
+1203
@tab Yoshiki Sawada
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">はい</span>
+<span style="background-color: #25fe1f">partially</span>
@end html
@end ifhtml
@ifnothtml
-はい
+partially
@end ifnothtml
@tab pre-GDP
@item
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
-Here's a further example taken from the opening of the left-hand
-staff of Chopin's Prelude Op 28 No. 2. We see that the beam
-collides with the upper notes:
+Here's a further example. We see that the beams
+collide with the ties:
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
+ \time 4/2
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
}
@end lilypond
@noindent
This can be resolved by manually moving both ends of the beam
-up from their position at 2 staff-spaces above the center line to,
-say, 3:
+up from their position at 1.81 staff-spaces below the center line to,
+say, 1:
@cindex Beam, example of overriding
@cindex positions property, example
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
+ \time 4/2
<<
- \override Beam #'positions = #'(3 . 3)
- { b,8 ais, b, g, }
- \\
- { e,8 g e, g }
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ {
+ \override Beam #'positions = #'(-1 . -1)
+ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
+ }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
}
@end lilypond
@noindent
Note that the override continues to apply in the first voice of
-the second block of quavers, but not to any of the beams in the
+the second measure of eighth notes, but not to any of the beams in the
second voice.
@subheading force-hshift property
@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
@ignore
- Translation of GIT committish: b275aa092642adb798079f7853309e2f5e4383ce
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c double \\ required because this is inside a macro!
@example
-\\version "@w{@version{}}"
+\\version "@w{@versionStable{}}"
@{
c' e' g' e'
@}
Je ziet dan iets dat lijkt op:
@example
-GNU LilyPond @w{@version{}}
+GNU LilyPond @w{@versionStable{}}
Verwerken van `test.ly'
Ontleden...
Vertolken van muziek...
@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
@ignore
- Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Terminologie: @rglos{accidental}, @rglos{key signature},
@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
-@rglos{transposition}.
+@rglos{transposition}, @rglos{Pitch names}.
Om uit te maken of er wel of geen @notation{toevallig teken}
geprint moet worden, onderzoekt LilyPond de toonhoogten en
@ruser{Automatic accidentals},
@ruser{Key signature}.
-Terminologie:
-@rglos{Pitch names}.
-
@node Overbindingen en legatobogen
@translationof Ties and slurs
@funindex GrandStaff
@funindex ChoirStaff
-Terminologie: @rglos{brace}.
+Terminologie:
+@rglos{brace},
+@rglos{staff},
+@rglos{system}.
Pianomuziek wordt meestal genoteerd op twee notenbalken die
verbonden zijn door een @notation{accolade}. Het afdrukken
@translationof Combining notes into chords
@subsection Het combineren van noten tot accoorden
+Terminologie: @rglos{chord}.
+
@cindex accoorden
@cindex nootlengten in accoorden
@funindex >
@funindex < ... >
-Terminologie: @rglos{chord}.
-
We zagen eerder hoe noten kunnen worden gecombineerd tot
@notation{accoorden} door aan te geven dat ze tegelijk
klinken door ze tussen dubbele gehoekte haken te zetten.
worden geplaatst buiten de hoekige haken.
@lilypond[verbatim,quote,relative=2]
-r4 <c e g>8[ <c f a>]~ <c f a>2 |
-r4 <c e g>8( <c e g>\> <c e g>4 <c f a>\!) |
+r4 <c e g>~ <c f a>2 |
+<c e g>8[ <c f a> <c e g> <c f a>] <c e g>\>[ <c f a> <c f a> <c e g>]\! |
+r4 <c e g>8.\p <c f a>16( <c e g>4-. <c f a>) |
@end lilypond
+@seealso
+Notatiehandleiding:
+@ruser{Chorded notes}.
+
@node Polyfonie binnen een notenbalk
@translationof Single staff polyphony
>>
@end lilypond
-Merk de accolades op die zowel de muziek als de liedtekst
-afbakenen. Het is van essentiëel belang dat de laatste
+@warning{Het is van essentiëel belang dat de laatste
lettergreep van de afsluitende accolade gescheiden wordt
door een spatie of nieuwe regel, anders wordt aangenomen dat
de accolade nog deel uitmaakt van die lettergreep, wat een
obscure foutmelding oplevert, zie @rprogram{Apparent error
-in ../ly/init.ly}.
+in ../ly/init.ly}.}
-Merk tevens de hoekige haken @w{@code{<< ... >>}} op die om
+Merk de hoekige haken @w{@code{<< ... >>}} op die om
het hele stuk heen staan en aangeven dat de muziek en de
woorden tegelijk klinken.
inserted beam and end before the end of the beam -- not very
musical, perhaps, but possible:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
- { g8\( a b[ c b\) a] g4 }
+@lilypond[quote,verbatim,ragged-right,relative=2]
+g8\( a b[ c b\) a] g4
@end lilypond
In general, different kinds of brackets, bracket-like constructs,
extending into a tuplet, a tie crossing two tuplets, and a
phrasing slur extending out of a tuplet (lines 3 and 4).
-@lilypond[quote,verbatim,fragment,ragged-right]
-{
- r16[ g \times 2/3 { r16 e'8] }
- g16( a \times 2/3 { b16 d) e' }
- g8[( a \times 2/3 { b8 d') e'~] } |
- \times 4/5 { e'32\( a b d' e' } a'4.\)
-}
+@lilypond[quote,verbatim,ragged-right,relative=1]
+r16[ g \times 2/3 { r16 e'8] }
+g,16( a \times 2/3 { b16 d) e }
+g,8[( a \times 2/3 { b8 d) e~] } |
+\times 4/5 { e32\( a, b d e } a4.\)
@end lilypond
so when exactly are multiple voices needed? Look first at
this example of four chords:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
+@lilypond[quote,verbatim,ragged-right,relative=1]
\key g \major
<d g>4 <d fis> <d a'> <d g>
@end lilypond
Here's how we split the chords above into two voices and add both
the passing note and a slur:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
\key g \major
% Voice "1" Voice "2"
<< { g4 fis8( g) a4 g } \\ { d4 d d d } >>
Here's another simple example:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
\key d \minor
% Voice "1" Voice "2"
<< { r4 g g4. a8 } \\ { d,2 d4 g } >> |
@end lilypond
It is not necessary to use a separate @code{<< \\ >>} construct
-for each bar. For music with few notes in each bar this layout
+for each bar. For music with few notes in each bar this layout
can help the legibility of the code, but if there are many
notes in each bar it may be better to split out each voice
separately, like this:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,ragged-right,relative=2]
\key d \minor
<< {
% Voice "1"
@cindex voices, naming
@cindex voices crossing brackets
@cindex slurs crossing brackets
-@cindex ties crossing brackest
+@cindex ties crossing brackets
This example has just two voices, but the same construct may be
used to encode three or more voices by adding more back-slash
In each of these contexts, the vertical direction of slurs,
stems, ties, dynamics etc., is set appropriately.
-@lilypond[quote,verbatim,fragment]
+@lilypond[quote,verbatim]
\new Staff \relative c' {
% Main voice
c16 d e f
we have learnt, using the @code{<< \\ >>} construct to
enter the music of the first bar in three voices:
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
\new Staff \relative c'' {
\key aes \major
<<
voices downward ones. The stems for voices 1 and 2 are right,
but the stems in voice 3 should go down in this particular piece
of music. We can correct this by skipping voice three
-and placing the music in voice four. This is done by simply
+and placing the music in voice four. This is done by simply
adding another pair of @code{\\}.
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
\new Staff \relative c'' {
\key aes \major
<< % Voice one
in opposite directions, but the notes from the third and fourth voices
are displaced, if necessary, to avoid the note heads colliding. This
usually works well, but in this example the notes of the lowest voice
-are clearly not well placed by default. LilyPond provides several ways
+are clearly not well placed by default. LilyPond provides several ways
to adjust the horizontal placing of notes. We are not quite ready yet
to see how to correct this, so we shall leave this problem until a
-later section --- see the @code{force-hshift} property in @ref{Fixing
-overlapping notation}.
+later section --- see the @code{force-hshift} property in
+@ref{Fixing overlapping notation}.
@seealso
The @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, and
@code{\shiftOff} commands specify the degree to which notes and
chords of the voice should be shifted if a collision
-would otherwise occur. By default, the outer voices (normally
+would otherwise occur. By default, the outer voices (normally
voices one and two) have @code{\shiftOff} specified, while the
inner voices (three and four) have @code{\shiftOn} specified.
When a shift is applied, voices one and three are shifted to
the lyrics to the notes with @code{\lyricsto@{@}}, using the
name assigned to the Voice.
-@lilypond[quote,verbatim,fragment]
+@lilypond[quote,verbatim]
<<
\new Voice = "one" {
\relative c'' {
output. For example, compare the input and output of the
following example:
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
cis4 cis2. | a4 a2. |
@end lilypond
@code{Voice}). This command creates a new context, and starts
interpreting the @var{music-expression} within that context.
-(Note that a @code{\new Score} command is not normally required,
-as the essential top-level @code{Score} context is created
-automatically when the music expression within the @code{\score}
-block is interpreted. The only reason for creating a @code{Score}
-context explicitly using @code{\new Score} is to introduce a
-@code{\with} block in which one or more score-wide default values
-of context properties may be specified. Information on using
-@code{\with} blocks can be found under the heading
-@qq{Setting context properties with @code{\\with} } in
-@ref{Modifying context properties}.)
+@warning{@bs{}@code{new Score} should not be used as the essential
+top-level @code{Score} context is created automatically when the music
+expression within the @bs{}@code{score} block is interpreted. Score-wide
+default values of context properties can be changed within the
+@bs{}@code{layout} block. See @ref{Modifying context properties}}
You have seen many practical examples which created new
@code{Staff} and @code{Voice} contexts in earlier sections, but
other things) several times. The change is from the default
value, not the most recently set value.
-@lilypond[quote,verbatim,ragged-right,relative=1,fragment]
+@lilypond[quote,verbatim,ragged-right,relative=1]
c4 d
% make note heads smaller
\set fontSize = #-4
>>
@end lilypond
-Or, if the property override is to be applied to all staves
-within the score, it may be appended to an explicit
-@code{\new Score} command, like this:
-
-@lilypond[quote,verbatim,ragged-right]
-\score {
- \new Score \with { extraNatural = ##f } <<
- \new Staff {
- \relative c'' {
- gis4 ges aes ais
- }
- }
- \new Staff {
- \relative c'' {
- gis4 ges aes ais
- }
- }
- >>
-}
-@end lilypond
-
Properties set in this way may still be changed dynamically using
@code{\set} and returned to the default value set in the
@code{\with} block with @code{\unset}.
}
@end lilypond
+If the property override is to be applied to all staves
+within the score:
+
+@lilypond[quote,verbatim]
+\score {
+ <<
+ \new Staff {
+ \relative c'' {
+ gis4 ges aes ais
+ }
+ }
+ \new Staff {
+ \relative c'' {
+ gis4 ges aes ais
+ }
+ }
+ >>
+ \layout {
+ \context {
+ \Score extraNatural = ##f
+ }
+ }
+}
+@end lilypond
+
@noindent
Context properties set in this way may be overridden for particular
instances of contexts by statements in a @code{\with} block, and by
@code{\set} command in a @code{\context} block in the
same way.
-
@seealso
Notation Reference: @ruser{Modifying context plug-ins},
@ruser{Changing context default settings}.
+@knownissues
+The @code{Stem_engraver} and @code{Beam_engraver} attach their
+objects to note heads. If the @code{Note_heads_engraver} is removed
+no note heads are produced and therefore no stems or beams are created
+either.
+
@node Extending the templates
@section Extending the templates
@end lilypond
None of the templates provides this layout exactly. The nearest is
-@q{SATB vocal score and automatic piano reduction} -- see @ref{Vocal
-ensembles} -- but we need to change the layout and add a piano
+@q{SATB vocal score and automatic piano reduction} -- see
+@ref{Vocal ensembles} -- but we need to change the layout and add a piano
accompaniment which is not derived automatically from the vocal parts.
The variables holding the music and words for the vocal parts are
fine, but we shall need to add variables for the piano reduction.
@} % end Score context
@end example
+@cindex stretchability of staves
+@cindex staves, stretchability
+
+The above layout of the organ staves is almost perfect; however,
+there is a slight defect which is not visible by looking at just a
+single system: The distance of the pedal staff to the left hand staff
+should behave approximately the same as the right hand staff to the
+left hand staff. In particular, the stretchability of staves in a
+@code{PianoStaff} context is limited (so that the distance between
+the staves for the left and right hand can't become too large), and
+the pedal staff should behave similarly.
+
+@cindex sub-properties
+@cindex properties, sub-properties
+@cindex graphical objects
+@cindex objects, graphical
+@cindex grobs
+
+Stretchability of staves can be controlled with the
+@code{staff-staff-spacing} property of the
+@code{VerticalAxisGroup} @q{graphical object} (commonly called
+@q{grob}s within the lilypond documentation) -- don't worry about
+the details right now; this is fully explained later. For the
+curious, have a look at @ruser{Overview of modifying properties}.
+In this case, we want to modify the @code{stretchability}
+sub-property only. Again, for the curious, you can find the
+default values for the staff-staff-spacing property
+in file @file{scm/define-grobs.scm} by looking up the definition
+of the @code{VerticalAxisGroup} grob. The value for
+@code{stretchability} is taken from the definition of the
+@code{PianoStaff} context (in file @file{ly/engraver-init.ly})
+so that the values are identical.
+
+@example
+\score @{
+ << % PianoStaff and Pedal Staff must be simultaneous
+ \new PianoStaff <<
+ \new Staff = "ManualOne" <<
+ \keyTime % set key and time signature
+ \clef "treble"
+ \new Voice @{
+ \voiceOne
+ \ManualOneVoiceOneMusic
+ @}
+ \new Voice @{
+ \voiceTwo
+ \ManualOneVoiceTwoMusic
+ @}
+ >> % end ManualOne Staff context
+ \new Staff = "ManualTwo" \with @{
+ \override VerticalAxisGroup
+ #'staff-staff-spacing #'stretchability = 5
+ @} <<
+ \keyTime
+ \clef "bass"
+ \new Voice @{
+ \ManualTwoMusic
+ @}
+ >> % end ManualTwo Staff context
+ >> % end PianoStaff context
+ \new Staff = "PedalOrgan" <<
+ \keyTime
+ \clef "bass"
+ \new Voice @{
+ \PedalOrganMusic
+ @}
+ >> % end PedalOrgan Staff
+ >>
+@} % end Score context
+@end example
That completes the structure. Any three-staff organ music
will have a similar structure, although the number of voices
may vary. All that remains now
\ManualOneVoiceTwoMusic
}
>> % end ManualOne Staff context
- \new Staff = "ManualTwo" <<
+ \new Staff = "ManualTwo" \with {
+ \override VerticalAxisGroup
+ #'staff-staff-spacing #'stretchability = 5
+ } <<
\keyTime
\clef "bass"
\new Voice {
} % end Score context
@end lilypond
+@seealso
+Music Glossary:
+@rglos{system}.
@node Saving typing with variables and functions
@subsection Saving typing with variables and functions
>>
@end lilypond
-
@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
@ignore
- Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Terminologie: @rglos{time signature}.
-De @notation{maatsoort} kun je aangeven met het @code{\time}
-commando:
+De @notation{maatsoort} kun je aangeven met het @code{\time}-commando:
+
+@lilypond[verbatim,quote]
+\relative c'' {
+ \time 3/4
+ a4 a a
+ \time 6/8
+ a4. a
+ \time 4/4
+ a4 a a a
+}
+@end lilypond
+
+@subheading Tempo-aanduidingen
+
+@cindex tempo marks
+@cindex metronome marks
+
+@funindex \tempo
+@funindex tempo
+
+Terminologie: @rglos{tempo indication}, @rglos{metronome}.
+
+De @notation{tempo indication} en @notation{metronome mark} worden
+gezet met het @code{\tempo}-commando:
@lilypond[verbatim,quote]
\relative c'' {
\time 3/4
+ \tempo "Andante"
a4 a a
\time 6/8
+ \tempo 4. = 96
a4. a
\time 4/4
+ \tempo "Presto" 4 = 120
a4 a a a
}
@end lilypond
\relative c, {
\clef "bass"
\time 3/4
+ \tempo "Andante" 4 = 120
\clef "bass"
c2 e8 c'
g'2.
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 77c34ddc0877c0625a48e1b41049b6dbaae215e0
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
MACRO DEFINITIONS GUIDELINES
****************************
-This file should contain macro defintions which are common to all
+This file should contain macro definitions which are common to all
languages, i.e. all macro definitions which do not contain text that
should be translated (namely text visible in the output).
@end ifnothtml
+@c do not translate the following macro -- it is used in
+@c an untranslated manual.
+
+@ifhtml
+
+@macro advanced{TEXT}
+@html
+<div class="advanced">
+@end html
+@strong{Advanced note:} \TEXT\
+@c keep the space for proper nesting of </p>
+
+@html
+</div>
+@end html
+@end macro
+
+@end ifhtml
+
+@ifnothtml
+
+@macro advanced{TEXT}
+@quotation
+@b{Advanced note:} \TEXT\
+@end quotation
+@end macro
+
+@end ifnothtml
+
+
@macro docMain
@cartouche
Voor meer informatie over waar deze handleiding in de rest van de
<!--
- Translation of GIT committish: eef24b23f2bd35eb068584c2c459ba97227caf15
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.12 '
+ onSubmit="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.12 '
+ onMouseMove="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.12 '
+ onKeyUp="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Zoek met Google">
<input type="text" name="brute_query" onfocus="this.value=''" value="Zoek">
@end html
@end ifhtml
-@emph{Meest recente update Thu Mar 24 14:52:33 UTC 2011
+@emph{Meest recente update Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@ifhtml
@html
-<span style="background-color: #25fe1f">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@item
@ifhtml
@html
-<span style="background-color: #25fe1f">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@item
@ifhtml
@html
-<span style="background-color: #25fe1f">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@item
@ifhtml
@html
-<span style="background-color: #c0ff34">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab na-GDP
@item
@ifhtml
@html
-<span style="background-color: #25fe1f">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@item
Inleiding
@*
-4506
+4564
@tab Jan Nieuwenhuizen
@tab Tineke de Munnik
@tab
@ifhtml
@html
-<span style="background-color: #54ff26">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@item
Download
@*
-1183
+1195
@tab Jan Nieuwenhuizen
@tab Tineke de Munnik
@tab
@ifhtml
@html
-<span style="background-color: #54ff26">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@item
Handleidingen
@*
-1200
+1203
@tab Jan Nieuwenhuizen
@tab Tineke de Munnik
@tab
@ifhtml
@html
-<span style="background-color: #5bff27">gedeeltelijk</span>
+<span style="background-color: #1fff1f">ja</span>
@end html
@end ifhtml
@ifnothtml
-gedeeltelijk
+ja
@end ifnothtml
@tab voor-GDP
@end multitable
\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: nl -*-
@ignore
- Translation of GIT committish: 66dd932f6519b7913400a838c5efbc5407e06cd8
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@include macros.itexi
@include weblinks.itexi
-@afourpaper
-
@c don't remove this comment.
@ignore
@omfcreator Graham Percival and Patrick McCarty
@end quotation
@end copying
+@c Info files are no longer installed in a subdirectory, images are
+@c expected to be found in lilypond/ subdirectory.
+@dircategory GNU LilyPond --- the music typesetter
+@direntry
+* LilyPond Learning Manual: (lilypond-learning). Start here.
+* Music Glossary: (music-glossary). For non-English users.
+* LilyPond: (lilypond-notation). LilyPond Notation Reference.
+* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples.
+* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking.
+* LilyPond Application Usage: (lilypond-usage). Installing and running applications.
+* LilyPond Website: (lilypond-web). Preview of new website.
+* lilypond: (lilypond-usage)Running LilyPond. Invoking the LilyPond program.
+* abc2ly: (lilypond-usage)Invoking abc2ly. Importing ABC.
+* convert-ly: (lilypond-usage)Updating files with convert-ly. Older LilyPond versions.
+* etf2ly: (lilypond-usage)Invoking etf2ly. Importing Finale.
+* lilypond-book: (lilypond-usage)LilyPond-book. Integrating text and music.
+* midi2ly: (lilypond-usage)Invoking midi2ly. Importing MIDI.
+* musicxml2ly: (lilypond-usage)Invoking musicxml2ly. Importing MusicXML.
+@end direntry
@c TITLE PAGE
@ifnottex
@divId{quickSummary}
@subheading Wat is LilyPond?
-LilyPond is een muzieknotatie programma en beoogt het produceren van
+LilyPond is een muzieknotatieprogramma en beoogt het produceren van
bladmuziek van de hoogst mogelijke kwaliteit. Het integreert de
esthetiek van traditioneel gegraveerde bladmuziek in computer printouts.
LilyPond is vrije software en is onderdeel van het
@end ignore
-@c Info files are no longer installed in a subdirectory, images are
-@c expected to be found in lilypond/ subdirectory.
-@dircategory GNU LilyPond --- the music typesetter
-@direntry
-* LilyPond Learning Manual: (lilypond-learning). Start here.
-* Music Glossary: (music-glossary). For non-English users.
-* LilyPond: (lilypond-notation). LilyPond Notation Reference.
-* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples.
-* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking.
-* LilyPond Application Usage: (lilypond-usage). Installing and running applications.
-* LilyPond Website: (lilypond-web). Preview of new website.
-* lilypond: (lilypond-usage)Running LilyPond. Invoking the LilyPond program.
-* abc2ly: (lilypond-usage)Invoking abc2ly. Importing ABC.
-* convert-ly: (lilypond-usage)Updating files with convert-ly. Older LilyPond versions.
-* etf2ly: (lilypond-usage)Invoking etf2ly. Importing Finale.
-* lilypond-book: (lilypond-usage)LilyPond-book. Integrating text and music.
-* midi2ly: (lilypond-usage)Invoking midi2ly. Importing MIDI.
-* musicxml2ly: (lilypond-usage)Invoking musicxml2ly. Importing MusicXML.
-@end direntry
-
-
@c FIXME: this still doesn't solve the broken links in pdf and big
@c html; we'll need a bunch of @iftext and stuff in here. -gp
@c ****************** SPECIAL MACROS FOR WEB MANUAL ************
@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
@ignore
- Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@divClass{heading-center}
@ifclear web_version
- @c yes, we want verisonDevel here, since the online links
+ @c yes, we want versionDevel here, since the online links
@c for @version won't be up yet!
@heading Downloads voor LilyPond @versionDevel
@divEnd
+@divClass{link-headings}
+
@divClass{column-left-top}
@subheading Voor gebruikers
@itemize
@item
-@c TODO: duplicate to avoid underlined refs in HTML? icky.
+@c ref is duplicated to avoid underlining ref as image.
@ref{Unix, @sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}}
@ref{Unix, Unix (Linux en FreeBSD)}
@end itemize
@divEnd
+@divEnd
@divClass{column-center-bottom}
@subheading Sponsors
-Hartelijk dank aan @uref{http://www.vt.edu/, Virgina Tech} en
+Hartelijk dank aan @uref{http://www.vt.edu/, Virginia Tech} en
@uref{http://www.linuxaudio.org/, linuxaudio.org} voor het
sponsoren van onze bandbreedte.
uninstall-lilypond
@end example
-@divEnd
+@subsubheading Hulp
+
+Op de commandoregel, typ:
+@example
+sh lilypond-@versionStable{}-OS-TYPE.sh --help
+@end example
+@divEnd
@divClass{column-right-top}
@subheading Een bestand compileren
@item
@sourceimage{logo-fedora,,,}
@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.3}
+Fedora: LilyPond 2.14.1}
@item
@sourceimage{logo-ubuntu,,,}
@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
@item
@sourceimage{logo-slackware,,,}
@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.3}
+Slackware: LilyPond 2.14.1}
@item
@sourceimage{logo-debian,,,}
@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
@item
@sourceimage{logo-suse,,,}
@item
@sourceimage{logo-macosx,,,}
@downloadStableDarwinNormal
-Voor Intel processors (als je twijfelt, gebruik deze).
+Voor MacOS 10.4 of nieuwer, met Intel-processors (als je
+twijfelt, gebruik deze).
@item
@sourceimage{logo-macosx,,,}
@downloadStableDarwinPPC
-Voor G3 and G4 CPUs (oudere Apple computers).
+Voor MacOS 10.4 of nieuwer, met G3- en G4-processors (oudere
+Apple computers).
@end itemize
@item
Maak een bestand genaamd @command{lilypond} met als inhoud
-@help obvious css issue to be dealt with. :(
-@c we need a small font here to fit. -gp
-@smallexample
+@divClass{h-scroll-auto}
+@example
exec @var{MAP}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
-@end smallexample
+@end example
+@divEnd
@warning{@var{MAP} is normaal gesproken @code{/Applications/}}
Scripts kunnen ook worden uitgevoerd op de commandoregel
door ze direct aan te roepen:
+@divClass{h-scroll-auto}
@example
@var{pad/naar}/LilyPond.app/Contents/Resources/bin/lilypond
@end example
+@divEnd
Dat geldt ook voor alle andere scripts in die map, zoals
@command{lilypond-book} en @command{convert-ly}.
@item
@sourceimage{logo-windows,,,}
@downloadStableWindows
-Voor Windows ME, NT, 2000, XP, Vista, en Windows 7.
+Voor Windows 2000, XP, Vista, en Windows 7.
@end itemize
@include gpl.itexi
@divEnd
-
-
-
@c -*- coding: utf-8; mode: texinfo; documentlanguage: nl; fill-column: 60 -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@divEnd
+@divClass{link-headings}
+
@divClass{column-left-top}
@subheading Wat LilyPond doet
@end itemize
@divEnd
+@divEnd
+
+@c TRANSLATORS, translations are not yet compiled in Info format, so
+@c it's not worth translating the right column of the following
+@c menu. -JM
@divClass{hide}
@menu
* Functies:: What can LilyPond do?
is een indrukwekkende Schenker-analyse, gemaakt door Kris
Schaffer, voor een artikel in in
@uref{http://www.linuxjournal.com/article/8364 , Linux
-Journal.}. Voor de duidelijkheid zijn hier kleuren
+Journal}. Voor de duidelijkheid zijn hier kleuren
toegevoegd.
@exampleImage{bach-schenker}
muziek, beschikbaar voor directe download of ouderwets op papier.
@item
-@uref{http://theshadylanepublishing.com/, The Shady Lane
-Publishing}, een @qq{micro muziekuitgeverij} met als
-doelstelling het promoten van een nieuwe vorm van muzikale
-economie, die dichter bij de muzikanten en muziekliefhebbers
-staat.
+@uref{http://shadylane.fr, The Shady Lane Publishing},
+een @qq{micro muziekuitgeverij} met als doelstelling het
+promoten van een nieuwe vorm van muzikale economie, die
+dichter bij de muzikanten en muziekliefhebbers staat.
@end itemize
@divEnd
+@contactUsAbout{concerten of bladmuziek}
@divClass{column-center-bottom}
@subheading En nu?
@divClass{keep-bullets}
@itemize
+@item
+april 2011
+
+@uref{http://www.linux-magazine.com,Linux Magazine} publiceert een
+artikel getiteld
+@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf,
+Projects on the Move}. Het is een inleiding in MuseScore,
+
+LilyPond en Chordii. Auteur Carla Schroder schrijft
+@qq{LilyPond wordt aangestuurd vanaf de commandoregel, maar
+je niet afschrikken door het ontbreken van een GUI; LilyPond
+is gebruiksvriendelijk en gemakkelijk te leren}, en ze geeft
+een direct te gebruiken voorbeeld.
+
++@item
+mei 2010
+
+Peter Kirn, op de Create Digital Music website, publiceert een
+@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,LilyPond
+recentie}. Hij neemt een
+evenwichtig standpunt in over gebruik, prijst LilyPonds
+hoge kwaliteit van notatie en stelt voor het zelf uit te proberen.
+
@item
september 2009
@uref{http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/10/Digitaler-Notenschluessel,
artikel over LilyPond}.
+@item
+augustus 2009
+
+Ann Drinan, op de
+@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}
+website, presenteert opmerkingen van twee orkestbibliothekarissen
+die praten over het gebruik van software om hun bibliotheken te
+onderhouden.
+@item
+juni 2009
+
+In een @uref{http://news.lilynet.net/Free-Music-Now, artikel}
+gepubliceerd in het Franse @emph{National Conservatory Parent
+Association}'s jaarblad, legt de Franse componist en LilyPond-bijdrager
+Valentin Villenave uit waarom Vrije licenties, en in het bijzonder
+LilyPond-gegraveerde partituren, van instrumenteel belang zijn in
+het voor iedereen toegankelijk maken van genoteerde muziek.
+
@item
februari 2008
het wel niet heeft.}
@divEnd
+
+@divClass{testimonial-item}
+@subsubheading @uref{http://webusers.siba.fi/~mkuuskan/, Dr. Mika Kuuskankare}, onderzoeker aan de @uref{http://siba.fi, Sibelius Academy Finland}, componist en auteur van Expressive Notation Package (ENP)
+
+@qq{Ik heb het diepste respect voor LilyPond en haar
+scheppers en beheerders omdat ik uit persoonlijke ervaring
+weet hoe moeilijk dit soort software kan zijn.}
+@divEnd
+
+
+@divClass{testimonial-item}
+@subsubheading @uref{http://camerondh.blogspot.com, David Cameron}, Muzikant, professioneel typesetter en sinds lang SCORE-gebruiker
+
+@qq{Mijn hartelijke dank aan iedereen die bijdraagtaan dit
+project. Ik was een power SCORE-gebruiker voor grote
+zetwerk huizen lang geleden in de jaren '90, maar voor mijn
+gevoel maakt LilyPond het mogelijk om precies datgene op
+papier te krijgen wat ik wil, in het bijzonder als het niet
+"standaard" praktijk is.}
+@divEnd
+
@divEnd
+@contactUsAbout{nieuwsberichten of gebruikerservaringen}
+
@divClass{column-center-bottom}
@subheading En nu?
syntaxfouten in LilyPond-verfijningen (tweaks) worden
gehighlight in het tekstvenster.
-@warning{Denemo ondersteunt officieel de gedateerde Lilypond
-versie 2.8.7, die veel functies mist die sindsdien zijn
-toegevoegd. De Denemo-ontwikkelaars werken aktief aan
-ondersteunin van onze huidige stabiele 2.12-versie.}
@divEnd
@divClass{column-center-top}
-@subheading Tekst omgeving: Emacs en Vim
+@subheading Tekst omgeving
@sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}
Geïntegreerde Ontwikkel Omgeving (IDE). Er is een
@q{lilypond mode} die de taaldefinities voor het werken met
LilyPond-broncodebestanden levert. Verder heeft een van
-onze ontwikkelaars @uref{http://nicolas.sceaux.free.fr/
-lilypond/lyqi.html,lyqi} geschreven, een Emacs major mode.
-
+onze ontwikkelaars
+@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}
+geschreven, een Emacs major mode.
@uref{http://www.vim.org}
Meer informatie over instellingen voor Emacs en Vim is te
vinden in @rprogram{Text editor support}.
-@divEnd
-
-@ignore these may not need to be here at all, as they are purely
-MacOS scripts.
-
-@divClass{column-center-top}
-@subheading Andere programma's
-
-@subsubheading Tekstomgeving: TexShop
-
@sourceimage{logo-macosx,,,}
-
@uref{http://www.uoregon.edu/~koch/texshop}
De TexShop-editor voor MacOS@tie{}X kan uitgebreid worden
@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}
@end example
-@subsubheading TextMate
+@sourceimage{logo-macosx,,,}
+Er is een LilyPond bundel voor TextMate, een commerciële editor for MacOS.
+Die kan je installeren met:
+
+@example
+mkdir -p /Library/Application\ Support/TextMate/Bundles
+cd /Library/Application\ Support/TextMate/Bundles
+git clone http://github.com/textmate/lilypond.tmbundle.git
+
+@end example
@divEnd
-@end ignore
+
@divClass{column-center-top}
-@subheading Andere programma's die LilyPond-code kunnen exporteren
+@subheading Programma's die LilyPond-code kunnen exporteren
@subsubheading Score, tab en MIDI-editors:
@item
@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
-is gebaseerd op de @uref{http://cairographics.org, Cairo}
-bibliotheek en heeft experimentele LilyPond export
+een partituur editor gebaseerd op de @uref{http://cairographics.org, Cairo}
+bibliotheek en heeft experimentele LilyPond export.
@item
@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, een
partituur-beeld en tab-beeld en kan exporteren naar LilyPond.
@item
-@uref{http://musescore.org,MuseScore} heeft onvolledige
-LilyPond-export maar wordt actief ontwikkeld.
+@uref{http://musescore.org,MuseScore}, een partituur-editor,
+heeft onvolledige LilyPond-export maar wordt actief
+ontwikkeld.
@item
-@uref{http://canorus.org,Canorus} kan ook exporteren naar
-LilyPond, maar is nog beta-software. Testers zijn welkom.
+@uref{http://canorus.org,Canorus}, een partituur-editor, kan
+ook exporteren naar LilyPond, maar is nog beta-software.
+Testers zijn welkom.
@item
@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor},
een realtime monofonische MIDI naar LilyPond-vertaler.
+@item
+@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,
+NW2LY} een a C#-programma dat een
+@uref{http://www.noteworthysoftware.com/, NoteWorthy}-lied naar
+LilyPond converteert.
+
@end itemize
@subsubheading Gereedschappen voor de commandoregel
@itemize
@item
-@uref{http://strasheela.sourceforge.net, Strasheela} is
-@qq{een hoog-expressief constraint-gebaseerd muziek
-componeer systeem}.
+@uref{http://www.projectabjad.org/,Abjad}, een
+@uref{http://www.python.org/,Python} API voor Formalized
+Score Control, ontworpen om componisten ingewikkelde stukken
+LilyPond-notatie op te laten bouwen op een iteratieve en
+incrementele manier.
@item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, een LISP-bibliotheek
-voor het genereren van muzieknotatie.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, een
+LISP-bibliotheek voor het genereren van muzieknotatie vanuit
+computermuziek softwareomgevingen.
+
+@item
+@uref{http://strasheela.sourceforge.net,Strasheela}, een
+omgeving gebouwd bovenop de
+@uref{http://www.mozart-oz.org/, Mozart/Oz}
+constraint-gebaseerde programmeertaal.
+
@end itemize
@divEnd
@c -*- coding: utf-8; mode: texinfo; fill-column: 60 -*-
@ignore
- Translation of GIT committish: 303c4023fce97de0cfb2d27a7e689d1ad7c4752b
+ Translation of GIT committish: 6908517be0826a3386264cd6d26d742b18e3a227
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@spanEnd
@end macro
-
@divClass{heading-center}
@ifclear web_version
@heading Handleidingen voor LilyPond @version
@divEnd
-@c TODO: do we want these links to be in larger text / bold ? CSS.
+@divClass{link-headings}
@divClass{column-center-top}
@subheading Inleiding
@itemize
-@item @ref{Tekstinvoer}:
-LilyPond is een @strong{tekstgebaseerd} muzieknotatieprogramma. Lees
-dit eerst!
+@item
+@ref{Tekstinvoer}:
+LilyPond is een @strong{tekstgebaseerd}
+muzieknotatieprogramma. Lees dit eerst!
-@item @ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Beginnen}}
+@item
+@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Beginnen}}
een @qq{onmisbare} gebruiksvriendelijke inleiding in LilyPond.
@details{Beginnen}
-@item @ifWebLinks{@manualStableGlossarySplitNoName-nl,@rglosnamed{Top,Terminologie}}
+@item
+@ifWebLinks{@manualStableGlossarySplitNoName-nl,@rglosnamed{Top,Terminologie}}
@emph{(optioneel te lezen)}
muziektermen en vertalingen.
@details{Terminologie}
-@item @ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
+@item
+@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
@emph{(optioneel te lezen)}
achtergrondinformatie over muzieknotatie dmv de computer.
@details{Essay}
-
@end itemize
@divEnd
@itemize
-@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notatie}}
+@item
+@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notatie}}
syntax handleiding.
@details{Notatie}
-@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Gebruik}}
+@item
+@ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Gebruik}}
het draaien van alle programma's.
@details{Gebruik}
-@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippers}}
+@item
+@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippers}}
handige trucs en tips.
@details{Snippers}
@itemize
-@item @ref{FAQ}:
+@item
+@ref{FAQ}:
Veel gestelde vragen.
-@item @ref{Top, Web}:
+@item
+@ref{Top, Web}:
dit document.
@details{Web}
-@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Veranderingen}}
+@item
+@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Veranderingen}}
wat is nieuw?
@details{Veranderingen}
-@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Uitbreidingen}}
+@item
+@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Uitbreidingen}}
specialistische verfraaiingen (tweaks).
@details{Uitbreidingen}
-@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
+@item
+@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
tweaks-handleiding.
@details{Internals}
@itemize
-@item @ref{Vertaald}:
+@item
+@ref{Vertaald}:
status van de vertaling voor niet-Engelstaligen.
-@item @ref{Alles}:
-te downloaden handleidingen en oude handleidingen.
+@item
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippers Repository}:
+voorbeelden door gebruikers, hints en tips.
-@item @ref{Development}:
+@item
+@ref{Development}:
handleidingen voor de ontwikkelversie.
-@item @ref{FDL}:
+@item
+@ref{FDL}:
deze handleidingen zijn uitgegeven onder de GNU Free Documentation
License (GNU Vrije Documentatie Licentie).
@divEnd
+@divEnd
+
@divClass{hide}
@menu
@docLinks{Gebruik, usage,
@rprogramnamed{Top,Usage},
@manualStableUsageSplit,
- @manualStableUsageBig, 300 KB,
- @manualStableUsagePdf, 400 KB}
+ @manualStableUsageBig, 400 KB,
+ @manualStableUsagePdf, 600 KB}
@divEnd
@include fdl.itexi
@divEnd
-
-
The resulting collisions must be resolved manually, where necessary,
using the methods in @rlearning{Fixing overlapping notation}.
-@knownissues
-Beam collision avoidance does not work for automatic beams that end
-right before a change in staff. To make the latter work, use manual
-beaming.
-
@seealso
Learning Manual:
@rlearning{Fixing overlapping notation}.
@rinternals{Beam},
@rinternals{ContextChange}.
+@knownissues
+Beam collision avoidance does not work for automatic beams that end
+right before a change in staff. To make the latter work, use manual
+beaming.
+
@node Changing staff automatically
@unnumberedsubsubsec Changing staff automatically
@knownissues
The relative conversion will not affect @code{\transpose},
-@code{\chordmode} or @code{\relative} sections in its argument.
-To use relative mode within transposed music, an additional
-@code{\relative} must be placed inside @code{\transpose}.
+@code{\chordmode} or @code{\relative} sections in its argument. To use
+relative mode within transposed music, an additional @code{\relative}
+must be placed inside @code{\transpose}.
+
+Triple accidentals will not be printed if using @code{\transpose}. An
+@q{enharmonically equivalent} pitch will be used instead (e.g. d-flat
+rather than e-triple-flat).
+
@node Inversion
@unnumberedsubsubsec Inversion
Some special purpose clefs are described in @ref{Mensural clefs},
@ref{Gregorian clefs}, @ref{Default tablatures}, and @ref{Custom
-tablatures}.
+tablatures}. For mixing different clefs when using cue notes within a
+score, see the @code{\cueClef} and @code{\cueDuringWithClef} functions
+in @ref{Formatting cue notes}.
@snippets
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{tweaking-clef-properties.ly}
-
@seealso
Notation Reference:
@ref{Mensural clefs},
@ref{Gregorian clefs},
@ref{Default tablatures},
-@ref{Custom tablatures}.
+@ref{Custom tablatures},
+@ref{Formatting cue notes}.
Snippets:
@rlsr{Pitches}.
This rule corresponds to the common practice in the twentieth
century. It omits some extra natural signs, which were
-traditionally prefixed to accidentals that reduce or reverse
-the direction of a previous alteration. The @code{modern} rule
+traditionally prefixed to a sharp following a double sharp,
+or a flat following a double flat. The @code{modern} rule
prints the same accidentals as @code{default}, with
-two exceptions that serve to avoid ambiguity: after temporary
+two additions that serve to avoid ambiguity: after temporary
accidentals, cancellation marks are printed also in the following
measure (for notes in the same octave) and, in the same measure,
for notes in other octaves. Hence the naturals before
@funindex \partcombine
@funindex partcombine
-Automatic part combining is used to merge two parts of music onto
-a staff. It is aimed at typesetting orchestral scores. When the
-two parts are identical for a period of time, only one is shown.
-In places where the two parts differ, they are typeset as separate
-voices, and stem directions are set automatically. Also, solo and
-@notation{a due} parts are identified and marked by default.
+Automatic part combining is used to merge two separate parts of music
+onto a single staff. This can be especially helpful when typesetting
+orchestral scores. A single @code{Voice} is printed while the two parts
+of music are the same, but in places where they differ, a second
+@code{Voice} is printed. Stem directions are set up & down accordingly
+while Solo and @notation{a due} parts are also identified and marked
+appropriately.
-The syntax for part combining is:
+The syntax for automatic part combining is:
@example
\partcombine @var{musicexpr1} @var{musicexpr2}
@end example
-The following example demonstrates the basic functionality of the
-part combiner: putting parts on one staff and setting stem
-directions and polyphony. The same variables are used for the
-independent parts and the combined staff.
+The following example demonstrates the basic functionality, putting
+parts on a single staff as polyphony and setting stem directions
+accordingly. The same variables are used for the independent parts and
+the combined staff.
@lilypond[quote,verbatim]
instrumentOne = \relative c' {
- c4 d e f
- R1
- d'4 c b a
- b4 g2 f4
- e1
+ c4 d e f |
+ R1 |
+ d'4 c b a |
+ b4 g2 f4 |
+ e1 |
}
instrumentTwo = \relative g' {
- R1
- g4 a b c
- d c b a
- g f( e) d
- e1
+ R1 |
+ g4 a b c |
+ d4 c b a |
+ g4 f( e) d |
+ e1 |
}
<<
>>
@end lilypond
-The notes in the third measure appear only once, although they were
-specified in both parts. Stem, slur, and tie directions are set
-automatically, depending whether there is a solo or unison. When
-needed in polyphony situations, the first part (with context called
-@code{one}) always gets up stems, while the second (called @code{two})
-always gets down stems. In solo situations, the first and second
-parts get marked with @qq{Solo} and @qq{Solo II}, respectively. The
-unison (@notation{a due}) parts are marked by default with the text
-@qq{a2}.
-
-Both arguments to @code{\partcombine} will be interpreted as
-@code{Voice} contexts. If using relative octaves,
-@code{\relative} should be specified for both music expressions,
+Both parts have identical notes in the third measure, so only one
+instance of the notes is printed. Stem, slur, and tie directions are
+set automatically, depending on whether the parts are playing solo or in
+unison. When needed in polyphony situations, the first part (with
+context called @code{one}) gets @qq{up} stems, while the second (called
+@code{two}) always gets @qq{down} stems. In solo situations, the first
+and second parts get marked with @qq{Solo} and @qq{Solo II},
+respectively. The unison (@notation{a due}) parts are marked with the
+text @qq{a2}.
+
+Both arguments to @code{\partcombine} will be interpreted as separate
+@code{Voice} contexts, so if the music is being specified in relative
+mode then @emph{both} parts must contain a @code{\relative} function,
i.e.,
@example
@end example
@noindent
-A @code{\relative} section that is outside of @code{\partcombine}
-has no effect on the pitches of @code{@var{musicexpr1}} and
+A @code{\relative} section that encloses a @code{\partcombine} has no
+effect on the pitches of @code{@var{musicexpr1}} or
@code{@var{musicexpr2}}.
-In professional scores, voices are often kept apart for long periods,
-even if one or two notes actually coincide and could easily be printed
-as unison. Combining notes into a chord, or showing one voice as solo
-is therefore not ideal as the @code{\partcombine} function considers
-each note separately. For this reason, the @code{\partcombine} function
-can be overriden with the following commands:
+@funindex \partcombineChords
+@funindex partcombineChords
+@funindex \partcombineApart
+@funindex partcombineApart
+@funindex \partcombineUnisono
+@funindex partcombineUnisono
+@funindex \partcombineSoloI
+@funindex partcombineSoloI
+@funindex \partcombineSoloII
+@funindex partcombineSoloII
+@funindex \partcombineAutomatic
+@funindex partcombineAutomatic
+
+In professional scores, voices are often kept apart from each other for
+long passages of music even if some of the notes are the same in both
+voices, and could just as easily be printed as unison. Combining notes
+into a chord, or showing one voice as solo is, therefore, not ideal as
+the @code{\partcombine} function considers each note separately. In this
+case the @code{\partcombine} function can be overriden with the
+following commands:
+
+Commands ending in @code{...Once} apply only to the next note in the
+music expression.
@itemize
@item
-@code{\partcombineApart}, @code{\partcombineApartOnce}:
-Keep the notes as two separate voices, even if they can be combined to a
-chord or unison.
+@code{\partcombineApart} and @code{\partcombineApartOnce} keep the
+notes as two separate voices, even if they can be combined into a chord
+or unison.
@item
-@code{\partcombineChords}, @code{\partcombineChordsOnce}:
-Combine the notes to a chord.
+@code{\partcombineChords} and @code{\partcombineChordsOnce} combine the
+notes into a chord.
@item
-@code{\partcombineUnisono}, @code{\partcombineUnisonoOnce}:
-The two voices are unison.
+@code{\partcombineUnisono} and @code{\partcombineUnisonoOnce} combine
+both voices as @qq{unison}.
@item
-@code{\partcombineSoloI}, @code{\partcombineSoloIOnce}:
-Show only voice one and mark it as solo.
+@code{\partcombineSoloI} and @code{\partcombineSoloIOnce} print only
+voice one, and mark it as a @qq{Solo}.
@item
-@code{\partcombineSoloII}, @code{\partcombineSoloIIOnce}:
-Show only voice two and mark it as solo.
+@code{\partcombineSoloII} or @code{\partcombineSoloIIOnce} print only
+voice two and mark it as a @qq{Solo}.
@item
-@code{\partcombineAutomatic}, @code{\partcombineAutomaticOnce}:
-Ends the effect of the special commands above, and returns to the default
-part combining mechanism.
-
+@code{\partcombineAutomatic} and @code{\partcombineAutomaticOnce} end
+the functions of the commands above, and revert back to the standard
+@code{\partcombine} functionality.
@end itemize
-All commands ending in @code{...Once} apply only to the following note.
-
@lilypond[quote,verbatim]
instrumentOne = \relative c' {
\partcombineApart c2^"apart" e |
- \partcombineAutomatic e^"auto" e |
- \partcombineChords e'^"chord" e |
- \partcombineAutomatic c^"auto" c |
- \partcombineApart c^"apart" \partcombineChordsOnce e^"chord once" |
- c c |
+ \partcombineAutomatic e2^"auto" e |
+ \partcombineChords e'2^"chord" e |
+ \partcombineAutomatic c2^"auto" c |
+ \partcombineApart c2^"apart" \partcombineChordsOnce e^"chord once" |
+ c2 c |
}
instrumentTwo = \relative c' {
c2 c |
@rinternals{PartCombineMusic},
@rinternals{Voice}.
-
@knownissues
-@code{\partcombine} can only accept two voices.
-
-When @code{printPartCombineTexts} is set, if the two voices play
-the same notes on and off, the part combiner may typeset @code{a2}
-more than once in a measure.
-
-@code{\partcombine} cannot be inside @code{\times}.
-
-@code{\partcombine} cannot be inside @code{\relative}.
-
-Internally, the @code{\partcombine} interprets both arguments as
-@code{Voice}s and decides when the parts can be combined. When they have
-different durations they cannot be combined and are given the names
-@code{one} and @code{two}. Consequently, if the arguments switch to
-differently named @rinternals{Voice} contexts, the events in those will
-be ignored. Likewise, partcombining isn't designed to work with lyrics;
-when one of the voices is explicitly named in order to attach lyrics to
-it, the partcombining stops working.
-
-@code{\partcombine} only observes onset times of notes. It cannot
-determine whether a previously started note is playing or not, leading
-to various problems.
+All @code{\partcombine...} functions can only accept two voices and are
+not designed to work with lyrics; such that when one of the voices is
+explicitly named in order to attach lyrics to it, the partcombiner will
+stop working.
+
+@code{\partcombine...} functions cannot be placed inside a @code{\times}
+or @code{\relative} block.
+
+If @code{printPartCombineTexts} is set and the two voices play the same
+notes @qq{on and off}, in the same measure, the part combiner may
+typeset @code{a2} more than once in that measure.
+
+@code{\partcombine} only knows when a note starts in a @code{Voice}; it
+cannot, for example, remember if a note in one @code{Voice} has already
+started when combining notes that have just started in the other
+@code{Voice}. This can lead to a number of unexpected issues including
+@qq{Solo} or @qq{Unison} marks being printed incorrectly.
+
+@code{\partcombine} keeps all spanners (slurs, ties, hairpins etc.) in
+the same @code{Voice} so that if any such spanners start or end in a
+different @code{Voice}, they may not be printed properly or at all.
+
+If the @code{\partcombine} function cannot combine both music
+expressions (i.e. when both voices have different durations), it will
+give the voices, internally, its own custom names: @code{one} and
+@code{two} respectively. This means if there is any @qq{switch} to a
+differently named @code{Voice} context, the events in that differently
+named @code{Voice} will be ignored.
+
+Refer also to @emph{Known issues and warnings} when using
+@code{\partcombine} with tablature in @ref{Default tablatures} and the
+@emph{Note} in @ref{Automatic beams} when using automatic beaming.
@node Writing music in parallel
}
@end lilypond
+@cindex note-event
+@cindex articulation-event
+@cindex dynamic-event
+@cindex rest-event
+@cindex slur-event
+@cindex crescendo-event
+
+@funindex quotedEventTypes
+@funindex quotedCueEventTypes
+
By default quoted music will include all articulations, dynamics,
markups, etc., in the quoted expression. It is possible to choose which
of these objects from the quoted music are displayed by using the
Quotes can also be tagged, see @ref{Using tags}.
-@snippets
-
-@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
-{quoting-another-voice-with-transposition.ly}
-
-@cindex note-event
-@cindex articulation-event
-@cindex dynamic-event
-@cindex rest-event
-
-@funindex quotedEventTypes
-@funindex quotedCueEventTypes
-
-@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
-{quoting-another-voice.ly}
-
-
@seealso
Notation Reference:
@ref{Instrument transpositions},
@knownissues
-
Only the contents of the first @code{Voice} occurring in an
-@code{\addQuote} command will be considered for quotation, so
-@code{@var{music}} cannot contain @code{\new} and
-@code{\context Voice} statements that would switch to a different
-Voice.
-
-Quoting grace notes is broken and can even cause LilyPond to
-crash.
-
-Quoting nested triplets may result in poor notation.
-
-In earlier versions of LilyPond (pre 2.11), @code{addQuote} was
-written entirely in lower-case letters: @code{\addquote}.
+@code{\addQuote} command will be considered for quotation, so the music
+expression must not contain @code{\new} and @code{\context Voice}
+statements which would switch to a different Voice. Quoting grace notes
+is unsupported and may cause LilyPond to crash whereas quoting nested
+triplets may result in poor notation.
@node Formatting cue notes
@unnumberedsubsubsec Formatting cue notes
-@cindex cues
@cindex cue notes
-@cindex cue notes, formatting
@cindex fragments
-@cindex quoting other voices
-@cindex cues, formatting
+@cindex cue notes, formatting
+@cindex formatting, cue notes
+@cindex voices, quoting
+
@funindex \cueDuring
@funindex cueDuring
+@funindex \cueClef
+@funindex cueClef
@funindex \cueDuringWithClef
@funindex cueDuringWithClef
@funindex \quoteDuring
@funindex quoteDuring
-The previous section explains how to create quotations. The
-@code{\cueDuring} command is a more specialized form of
-@code{\quoteDuring}, being particularly useful for inserting cue
-notes into a part. The syntax is as follows:
+@cindex notes, smaller
+@cindex smaller notes
+@cindex CueVoice
+
+The simplest way to format cue notes is to explicitly create a
+@code{CueVoice} context within the part.
+
+@lilypond[verbatim,relative=1]
+R1
+<<
+ { e2\rest r4. e8 }
+ \new CueVoice {
+ \stemUp d'8^"flute" c d e fis2
+ }
+>>
+d,4 r a r
+@end lilypond
+
+The @code{\cueClef} command can also be used with an explict
+@code{CueVoice} context if a change of clef is required and will print
+an appropriately sized clef for the cue notes. The @code{\cueClefUnset}
+command can then be used to switch back to the original clef, again with
+an appropriately sized clef.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+<<
+ { e2\rest r4. \cueClefUnset e,8 }
+ \new CueVoice {
+ \cueClef "treble" \stemUp d''8^"flute" c d e fis2
+ }
+>>
+d,,4 r a r
+@end lilypond
+
+The @code{\cueClef} and @code{\cueClefUnset} command can also be used
+without a @code{CueVoice} if required.
+
+@lilypond[verbatim,noragged-right,relative=1]
+\clef "bass"
+R1
+\cueClef "treble"
+d'8^"flute" c d e fis2
+\cueClefUnset
+d,,4 r a r
+@end lilypond
+
+For more complex cue note placement, e.g including transposition, or
+inserting cue notes from multiple music sources the @code{\cueDuring} or
+@code{\cueDuringWithClef} commands can be used. These are more
+specialized form of @code{\quoteDuring}, see @ref{Quoting other voices}
+in the previous section.
+
+The syntax is:
@example
-\cueDuring #@var{partname} #@var{voice} @var{music}
+\cueDuring #@var{quotename} #@var{direction} #@var{music}
@end example
-This command copies only the notes and rests from the
-corresponding measures from @code{@var{partname}} into a
-@code{CueVoice} context. The @code{CueVoice} is created
-implicitly, and occurs simultaneously with @code{@var{music}},
-which creates a polyphonic situation. The @code{@var{voice}}
-argument determines whether the cue notes should be notated as a
-first or second voice; @code{UP} corresponds to the first voice,
-and @code{DOWN} corresponds to the second.
+and
+
+@example
+\cueDuringWithClef #@var{quotename} #@var{direction} #@var{clef} #@var{music}
+@end example
+
+The music from the corresponding measures of the @code{@var{quote name}}
+is added as a @code{CueVoice} context and occurs simultaneously with the
+@code{@var{music}}, which then creates a polyphonic situation. The
+@code{@var{direction}} takes the argument @code{UP} or @code{DOWN}, and
+corresponds to the first and second voices respectively, determining how
+the cue notes are printed in relation to the other voice.
@lilypond[verbatim,quote]
-oboe = \relative c'' {
- r2 r8 d16(\f f e g f a)
- g8 g16 g g2.
+fluteNotes = \relative c'' {
+ r2. c4 | d8 c d e fis2 | g2 d |
}
-\addQuote "oboe" { \oboe }
-\new Voice \relative c'' {
- \cueDuring #"oboe" #UP { R1 }
+oboeNotes = \relative c'' {
+ R1
+ s1*0^\markup { \tiny "flute" }
+ \cueDuring #"flute" #UP { R1 }
g2 c,
}
+
+\addQuote "flute" { \fluteNotes }
+
+\new Staff {
+ \oboeNotes
+}
@end lilypond
@noindent
fluteNotes = \relative c'' {
r2. c4 d8 c d e fis2 g2 d2
}
+
bassoonNotes = \relative c {
\clef bass
R1
\clef bass
g4. b8 d2
}
+
\addQuote "flute" { \fluteNotes }
+
\new Staff {
\bassoonNotes
}
fluteNotes = \relative c'' {
r2. c4 d8 c d e fis2 g2 d2
}
+
bassoonNotes = \relative c {
\clef bass
R1
\cueDuringWithClef #"flute" #UP #"treble" { R1 }
g4. b8 d2
}
+
\addQuote "flute" { \fluteNotes }
+
\new Staff {
\bassoonNotes
}
c8 c c e g2
c4 g g2
}
+
bassClarinetNotes = \relative c' {
\key d \major
\transposition bes,
>>
@end lilypond
-@cindex notes, smaller
-@cindex smaller notes
-
-A @code{CueVoice} context may be created explicitly if notes of a
-smaller size are required, for example to set an alternative
-sequence of notes more suitable for a higher or lower voice.
-
-@lilypond[verbatim,relative=2]
-\time 12/8
-\key ees \major
-g4 ees8 f4 g8
-\stemDown
-<<
- { d4. bes4 c8 }
- \new CueVoice
- { g'4. f4 ees8 }
->>
-\stemUp
-d2. d2.
-@end lilypond
-
-@cindex removing cues
@cindex removing cue notes
@cindex cue notes, removing
@funindex \killCues
@funindex killCues
+@funindex \addInstrumentDefinition
+@funindex addInstrumentDefinition
The @code{\killCues} command removes cue notes from a music
expression, so the same music expression can be used to produce
fluteNotes = \relative c'' {
r2. c4 d8 c d e fis2 g2 d2
}
+
bassoonNotes = \relative c {
\clef bass
R1
\tag #'part \clef bass
g4. b8 d2
}
+
\addQuote "flute" { \fluteNotes }
\new Staff {
\bassoonNotes
}
+
\new StaffGroup <<
\new Staff {
\fluteNotes
Alternatively, Clef changes and instrument labels can be
collected into an instrument definition for repeated use, using
-@code{\addInstrumentDefinition} described in
-@ref{Instrument names}.
+@code{\addInstrumentDefinition} described in @ref{Instrument names}.
@seealso
Notation Reference:
+@ref{Quoting other voices},
@ref{Instrument transpositions},
@ref{Instrument names},
+@ref{Clef},
@ref{Musical cues},
@ref{Using tags}.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "keyboards"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los símbolos específicos de acordeón discanto se escriben mediante
@code{\\markup}. Se puede trucar la colocación vertical de los
\header {
lsrtags = "chords, ancient-notation, contexts-and-engravers"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
\header {
lsrtags = "pitches, staff-notation, vocal-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Añadir un ámbito por voz"
texidoces = "
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
\header {
lsrtags = "staff-notation, contexts-and-engravers, breaks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al añadir un pentagrama nuevo en un salto de línea, por desgracia
se añade un espacio adicional al final de la línea antes del salto
\header {
lsrtags = "staff-notation, contexts-and-engravers"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede añadir (posiblemente de forma temporal) un pentagrama
nuevo una vez que la pieza ha comenzado.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para añadir indicaciones de línea divisoria dentro del contexto de
los nombres de acorde @code{ChordNames}, incluya el grabador
\header {
lsrtags = "rhythms, expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La sintaxis de LilyPond puede implicar muchas colocaciones poco
comunes para los paréntesis, corchetes, etc, que a veces se tienen
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "rhythms, percussion"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Mediante la utilización de las potentes herramientas preconfiguradas
como la función @code{\\drummode} y el contexto @code{DrumStaff}, la
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para añadir digitaciones a las tablaturas, utilice una combinación de
@code{\\markup} y @code{\\finger}.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "staff-notation, vocal-music"
\header {
lsrtags = "staff-notation, vocal-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo muestra una forma de simplificar la adición de muchas
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La función @code{\\parenthesize} es un truco especial que encierra
objetos entre paréntesis. El grob asociado es @code{ParenthesesItem}.
\header {
lsrtags = "text, titles"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Con algo de código de Scheme, se puede añadir fácilmente la fecha
actual a una partitura.
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El grabador @code{Volta_engraver} reside de forma predeterminada
dentro del contexto de @code{Score}, y los corchetes de la repetición
\header {
lsrtags = "simultaneous-notes"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Voces adicionales para evitar colisiones"
texidoces = "
En ciertos casos de polifonía compleja, se necesitan voces adicionales
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede ajustar la separación entre las notas de adorno utilizando la
propiedad @code{spacing-increment} de @code{Score.GraceSpacing}.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.42
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Puede ser necesario trucar la propiedad
@code{shortest-duration-space} para poder ajustar el tamaño de las
\header {
lsrtags = "text, paper-and-layout, titles"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad @code{Staff.InstrumentName
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los números de compás se alinean de forma predeterminada por la
\header {
lsrtags = "text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si están especificadas, las marcas de texto se pueden alinear con
objetos de notación distintos a las líneas divisorias. Entre estos
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las cifras de digitación orientadas verticalmente se colocan de forma
\header {
lsrtags = "pitches, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede variar la longitud de las plicas de las figuras unidas por
una barra mediante la sobreescritura de la propiedad
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
\header {
lsrtags = "pitches, vocal-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Ámbitos con varias voces"
texidoces = "
La adición del grabador @code{Ambitus_engraver} al contexto de
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada se añaden corchetes de análisis sencillos
debajo del pentagrama. El ejemplo siguiente muestra una manera de
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "ancient-notation"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aquí se muestran muchos de (¿o quizá todos?) los símbolos que
están contemplados por la capacidad de LilyPond para la música
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
#(set-global-staff-size 15)
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo esempio mostra come realizzare una trascrizione moderna di musica
+gregoriana. La musica gregoriana non presenta suddivisione in misure né gambi;
+utilizza soltanto le teste della minima e della semiminima, e dei segni
+appositi che indicano pause di diversa lunghezza.
+
+"
+ doctitleit = "Modello per notazione antica -- trascrizione moderna di musica gregoriana"
+
lsrtags = "vocal-music, ancient-notation, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Quando si trascrive musica mensurale, può essere utile inserire all'inizio del
+pezzo un incipit che indichi l'intonazione e il tempo originali. Le stanghette
+di battuta, a cui i musicisti di oggi sono abituati e che aiutano a riconoscere
+più velocemente gli schemi ritmici, durante l'epoca della musica mensurale non
+erano ancora state introdotte; infatti il metro cambiava spesso ogni poche
+note. Come compromesso, le stanghette vengono spesso inserite tra i righi
+invece che al loro interno.
+
+"
+ doctitleit = "Modello per notazione antica -- trascrizione moderna di musica mensurale"
+
lsrtags = "ancient-notation, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al transcribir música mensural, es útil un «incipit» al compienzo
de la pieza para indicar la tonalidad y el tempo
\header {
lsrtags = "ancient-notation"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las indicaciones de compás también se pueden grabar en estilo antiguo.
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello presenta un modo di impostare un salmo anglicano. Mostra
+anche come le strofe possono essere aggiunte come testo separato al di sotto
+della musica. Le due strofe sono scritte con stili diversi per illustrare
+le varie possibilità.
+
+"
+ doctitleit = "Modello per salmo anglicano"
+
lsrtags = "vocal-music, template"
+
+
+
%% Translation of GIT committish: 144cd434d02e6d90b2fb738eeee99119a7c5e1d2
texidocde = "
\header {
lsrtags = "pitches, editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
texidoces = "
La propiedad @code{shapeNoteStyles} se puede usar para definir varios
\header {
lsrtags = "world-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para las improvisaciones o @emph{taqasim} que son libres durante unos
momentos, se puede omitir la indicación de compás y se puede usar
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede hacer que una ligadura de expresión sea asimétrica para
adaptarse mejor a un patrón asimétrico de notas.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden subdividir las barras automáticamente. Estableciendo la
propiedad @code{subdivideBeams}, las barras se subdividen en
\header {
lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las reglas de final de barra especificadas en el contexto
@code{Score} se aplican a todos los pentagramas, pero se pueden
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
No está especificada ninguna agrupación predeterminada automática
de las barras para el compás de 7/8, de forma que si se requieren
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Normalmente están prohibidos los saltos de línea si las barras
atraviesan las líneas divisorias. Se puede cambiar este
\header {
lsrtags = "editorial-annotations, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La instrucción @code{\\whiteout} intercala un rectángulo blanco
debajo de un elemento de marcado. Este rectángulo blanco no tapa
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para hacer invisibles partes de un regulador de crescendo, se usa
el método de dibujar un rectángulo blanco encima de la parte
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A veces se denota una «cesura» mediante una doble marca de respiración
parecida a las vías del tren, con un calderón encima. Este fragmento
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo proporciona una función para tipografiar un regulador con
texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
\header {
lsrtags = "expressive-marks, unfretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para hacer más pequeño el círculo de @code{\\flageolet} (armónico)
utilice la siguiente función de Scheme.
\header {
lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden modificar notas individuales de un acorde con la instrucción
@code{\\tweak}, alterando la propiedad @code{font-size}.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se insertan automáticamente barras en ángulo cuando se detecta un
intervalo muy grande entre las notas. Se puede hacer un ajuste
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede establecer el separador entre las distintas partes del
nombre de un acorde para que sea cualquier elemento de marcado.
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Cambiar la forma de los silencios multicompás"
texidoces = "
Si hay diez compases de silencio o menos, se imprime en el pentagrama
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "contexts-and-engravers, midi"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al producir una salida MIDI, el comportamiento predeterminado es que
cada pentagrama representa un canal MIDI, con todas las voces de dicho
\header {
lsrtags = "simultaneous-notes"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al utilizar la posibilidad de combinación automática de partes, se
puede modificar el texto que se imprime para las secciones de solo
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede modificar el texto empleado para los crescendos y
decrescendos modificando las propiedades de contexto
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Es posible ajustar la separación en las indicaciones de tesitura.
\header {
lsrtags = "expressive-marks, editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede cambiar el aspecto de las ligaduras de expresión de
continuas a punteadas o intermitentes.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El glifo de la marca de respiración se puede ajustar
sobreescribiendo la propiedad de texto del objeto de presentación
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La nomenclatura inglesa (predeterminada) para los acordes del cifrado
americano se puede cambiar por la alemana (@code{\\germanChords}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este código muestra cómo cambiar la cantidad de puntillos de una nota.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las alteraciones y los signos «más» pueden aparecer antes o
después de los números, según el valor de las propiedades
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "rhythms, tweaks-and-overrides, midi"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
\header {
lsrtags = "keyboards, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar @code{Staff.pedalSustainStrings} para fijar el texto de
las indicaciones de pisar pedal y levantar pedal. Observe que las
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La instrucción @code{\\time} establece las propiedades
@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Cambiar el número del grupo especial"
texidoces = "
\header {
lsrtags = "rhythms, contexts-and-engravers"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La propiedad @code{measureLength}, junto con
@code{measurePosition}, determina cuándo es necesario dibujar una
\header {
lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este tipo de notación se utiliza para el canto de los Salmos, en
que las estrofas no siempre tienen la misma longitud.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.53
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los deslizamientos para acordes se pueden indicar tanto en el contexto
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar la propiedad @code{chordNameExceptions} para
almacenar una lista de notaciones espaciales para acordes
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La presentación del acorde de séptima mayor se
puede ajustar mediante majorSevenSymbol.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede hacer que los diagramas de posiciones se muestren sólo
cuando el acorde cambia o al comienzo de una nueva línea.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
#(set-global-staff-size 15)
\paper {
chord-name-major7.ly
clusters.ly
controlling-the-placement-of-chord-fingerings.ly
+cross-staff-chords---beaming-problems-workaround.ly
displaying-complex-chords.ly
manually-break-figured-bass-extenders-for-only-some-numbers.ly
showing-chords-at-changes.ly
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este código muestra cómo recortar (extraer) fragmentos a partir de una
partitura completa.
\header {
lsrtags = "simultaneous-notes, chords, keyboards"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Ciertas indicaciones dinámicas pueden llevar textos (como @qq{più
forte} o @qq{piano subito}). Se pueden producir usando un bloque
\header {
lsrtags = "simultaneous-notes, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La herramienta de combinación de partes (instrucción
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Indicaciones de compases compuestos"
texidoces = "
Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La agrupación de pulsos dentro de un compás está controlada por la
propiedad de contexto @code{beatStructure}. Hay establecidos valores
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede tipografiar un gissando contemporáneo sin nota final
utilizando una nota oculta y temporalización de cadenza.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La visibilidad de los objetos de extensión que acaban en la primera
\header {
lsrtags = "editorial-annotations, chords, keyboards, fretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El orden vertical que ocupan las inscripciones gráficas está
controlado con la propiedad @code{'script-priority}. Cuanto más
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El comportamiento predeterminado de la visibilidad de los corchetes de
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La creación de un grupeto circular de anticipación entre dos notas,
donde la nota inferior del grupeto utiliza una alteración, requiere
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En una música que tenga muchas apariciones de la
misma secuencia de notas a distintas alturas, podría ser de
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede trazar un símbolo de arpegio entre notas de distintas
voces que están sobre el mismo pentagrama si el grabador
\header {
lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás @code{Bar_number_engraver}
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Dentro de un @code{PianoStaff}, es posible hacer que un arpegio
cruce entre los pentagramas ajustando la propiedad
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden crear arpegios que se cruzan entre pentagramas dentro de
contextos distintos a @code{GrandStaff}, @code{PianoStaff} y
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.12.2"
+\version "2.14.0"
\header {
lsrtags = "expressive-marks, staff-notation, editorial-annotations, tweaks-and-overrides"
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden crear indicaciones metronómicas nuevas en modo de
marcado, pero no cambian el tempo en la salida MIDI.
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aunque la manera más fácil de añadir paréntesis a una indicación
de dinámica es utilizar un bloque @code{\\markup}, este método
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
\header {
lsrtags = "expressive-marks, keyboards, unfretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En determinadas situaciones es necesario crear ligaduras de
expresión entre notas que están en voces distintas.
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan}
permiten la creación de elementos de extensión textuales tan
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.14.0"
+
+\header {
+ lsrtags = "chords, keyboards, tweaks-and-overrides"
+
+ texidoc = "
+Sometimes it is better to use stems from the upper staff for creating
+cross-staff chords, because no problems with automatic beam collision
+avoidance then arise. If the stems from the lower staff were used in
+the following example, it would be necessary to change the automatic
+beam collision avoidance settings so that it doesn't detect collisions
+between staves using @code{\\override Staff.Beam #'collision-voice-only
+= ##t}
+
+"
+ doctitle = "Cross-staff chords - beaming problems workaround"
+} % begin verbatim
+
+\new PianoStaff <<
+ \new Staff = up
+ \relative c' {
+ <<
+ { r4
+ \override Stem #'cross-staff = ##t
+ \override Stem #'length = #19 % this is in half-spaces,
+ % so it makes stems 9.5 staffspaces long
+ \override Stem #'Y-offset = #-6 % stems are normally lengthened
+ % upwards, so here we must lower the stem by the amount
+ % equal to the lengthening - in this case (19 - 7) / 2
+ % (7 is default stem length)
+ e e e }
+ { s4
+ \change Staff = "bottom"
+ c, c c
+ }
+ >>
+ }
+ \new Staff = bottom
+ \relative c' {
+ \clef bass
+ \voiceOne
+ g8 a g a g a g a
+ }
+>>
\header {
lsrtags = "repeats, keyboards"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden tipografiar «custos» en diferentes estilos.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones de acordes por medio de @code{'fret-diagram-details}.
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones a través de @code{'fret-diagram-details}. Para los
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La dirección predeterminada de las plicas sobre la tercera línea
del pentagrama está determinada por la propiedad
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.46
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden añadir diagramas de posiciones predefinidas para
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "midi"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si hay un solo pentagrama en un de los tipos de sistema
@code{ChoirStaff} o @code{StaffGroup}, el comportamiento
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
He aquí una forma de imprimir un acorde en el que suena la misma nota
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Alteraciones de estilo dodecafónico para todas las notas incluidas las naturales"
texidoces = "
En las obras de principios del s.XX, empezando por Schoenberg, Berg y
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Funciones postfijas para la creación de objetos de extensión de texto
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los objetos de extensión \cresc, \dim y \decresc ahora se pueden
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
\header {
lsrtags = "editorial-annotations, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede insertar códico PostScript directamente dentro de un
bloque @code{\\markup}.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.52
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Del problema central de la notación, esto es, crear un determinado
símbolo, se encargan los «plugins» o complementos añadidos. Cada
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Grabado manual de las ligaduras"
texidoces = "
Se pueden grabar a mano las ligaduras modificando la propiedad
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times"
texidoces = "
La propiedad @code{tupletSpannerDuration} establece cuánto debe durar
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
#(set-global-staff-size 15)
\paper {
\header {
lsrtags = "winds"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden conseguir símbolos especiales combinando glifos existentes,
lo que es de utilidad para la notación de instrumentos de viento.
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En este ejemplo se combinan las digitaciones de la mano izquierda,
indicaciones del número de cuerda y digitaciones de la mano
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Son posibles tanto los corchetes rectos sobre notas sueltas como
extremos de barra sueltos en figuras unidas, con una combinación de
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Forzar el desplazamiento horizontal de las notas"
\header {
lsrtags = "vocal-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si LilyPond no cree que haya sitio suficiente para un guión separador
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden crear tablas alternativas de diagramas de posiciones. Se
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
% INSPIRATIONAL HEADER FOR LILYPOND DOCUMENTATION fretted-strings %
% Passage from Johann Kaspar Mertz "Opern Revue, Op. 8, no. 17" %
% on melodies from Bellini's "Norma" %
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.49
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Armónicos sobre cuerdas pisadas (armónicos artificiales):
"
harmonics = {
%artificial harmonics (AH)
\textLengthOn
- <\parenthesize b b''\harmonic>4_\markup{ \teeny "AH 16" }
- <\parenthesize g g''\harmonic>4_\markup{ \teeny "AH 17" }
- <\parenthesize d' d'''\harmonic>2_\markup{ \teeny "AH 19" }
+ <\parenthesize b b'\harmonic>4_\markup{ \teeny "AH 16" }
+ <\parenthesize g g'\harmonic>4_\markup{ \teeny "AH 17" }
+ <\parenthesize d' d''\harmonic>2_\markup{ \teeny "AH 19" }
%pinched harmonics (PH)
\pinchedHarmonics
<a'\harmonic>2\startTextSpan
- <g'\harmonic>4
+ <d''\harmonic>4
<e'\harmonic>4\stopTextSpan
%tapped harmonics (TH)
<\parenthesize g\4 g'\harmonic>4_\markup{ \teeny "TH 17" }
\harmonicByFret #7 a4\5
%tapped harmonics (TH)
\harmonicByFret #5 d4\4
- \harmonicByFret #5 d4\4
- \harmonicByFret #4 g2\3
+ \harmonicByFret #7 d4\4
+ \harmonicByFret #5 g2\3
%touch harmonics (TCH)
a4 \harmonicByFret #9 g2.\3
}
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código basado en Scheme genera
24 notas aleatorias (o tantas como se necesiten), basándose en la
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En muchos casos, las llaves que no están en la columna central se
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede cambiar el aspecto de las líneas de rejilla
sobreescribiendo algunas de sus propiedades.
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden trazar líneas verticales normales entre pentagramas para
mostrar la relación entre notas; sin embargo, en caso de música
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los patrones de barrado se pueden alterar con la propiedad
@code{beatGrouping}:
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "rhythms, fretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
además de las notas de la melodía, acordes y diagramas de posiciones.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los reguladores pueden imprimirse en uno cualquiera de los estilos de
@code{line-interface}: discontinuo, punteado, línea, trino o zig-zag.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aquí se muestra la manera de ocultar las alteraciones de las notas
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los cambios de dinámica con estilo de texto (como cresc. y dim.)
se imprimen con una línea intermitente que muestra su alcance.
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Il codice seguente presenta un modo di impostare un inno in cui ogni verso
+inizia e finisce con una misura parziale. Mostra anche come aggiungere delle
+strofe come testo separato sotto la musica.
+
+"
+ doctitleit = "Modello per inno"
+
lsrtags = "vocal-music, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código muestra una forma de preparar un himno cuando
cada línea comienza con un compás parcial. También muestra cómo
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los «incipit» se pueden escribir utilizando el grob del nombre del
instruemento, pero manteniendo independientes las definiciones del
\header {
lsrtags = "keyboards"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Un corchete de arpegio puede indicar que se tienen que tocar con la
misma mano notas que están en dos pentagramas distintos. Para hacerlo,
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las marcas de cesura se pueden crear sobreescribiendo la propiedad
@code{'text} del objeto @code{BreathingSign}. También está disponible
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
También se pueden imprimir símbolos de porcentaje sueltos.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Ecco un modello piuttosto complesso, per un gruppo jazz. Si noti che tutti
+gli strumenti sono in @code{\\key c \\major}. Si tratta della tonalità
+reale; sarà trasposta automaticamente includendo la
+musica all'interno di una sezione @code{\\transpose}.
+
+"
+ doctitleit = "Modello per combo jazz"
+
lsrtags = "keyboards, percussion, fretted-strings, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
\header {
lsrtags = "pitches, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Cuando se produce un cambio de clave, el símbolo de clave se imprime a
un tamaño menor que la clave inicial. Esto se puede ajustar con
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
clusters.ly
controlling-the-placement-of-chord-fingerings.ly
creating-slurs-across-voices.ly
+cross-staff-chords---beaming-problems-workaround.ly
cross-staff-tremolos.ly
fine-tuning-pedal-brackets.ly
indicating-cross-staff-chords-with-arpeggio-bracket.ly
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La tablatura se puede formatear utilizando letras en lugar de números.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden aplicar puntas de flecha a los elementos de extensión de
texto y de línea (como el Glissando).
\header {
lsrtags = "text, vocal-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.47
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El «Makam» es un tipo de melodía de Turquía que
utiliza alteraciones microtonales de 1/9 de tono. Consulte el
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las ligaduras de expresión se pueden construir con patrones de
\header {
lsrtags = "staff-notation, editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede engrosar una línea del pentagrama con fines pedagógicos
(p.ej. la tercera línea o la de la clave de Sol). Esto se puede
\header {
lsrtags = "repeats, staff-notation, editorial-annotations"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
\header {
lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Utilice un texto de marcado para sustituir el glifo de clave (TAB) con
una fuente tipográfica moderna.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las abreviaturas se encuentran definidas dentro del archivo
@file{ly/script-init.ly}, donde las variables @code{dashHat},
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede ajustar la posición vertical de una ligadura de
expresión utilizando la propiedad @code{positions} del objeto
\header {
lsrtags = "rhythms, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los elementos de marcado aplicados a un silencio multicompás se
centran encima o debajo de éste. Los elementos de marcado extensos
\header {
lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede utilizar la propiedad
@code{systemStartDelimiterHierarchy} para crear grupos de
harmonics = {
%artificial harmonics (AH)
\textLengthOn
- <\parenthesize b b''\harmonic>4_\markup{ \teeny "AH 16" }
- <\parenthesize g g''\harmonic>4_\markup{ \teeny "AH 17" }
- <\parenthesize d' d'''\harmonic>2_\markup{ \teeny "AH 19" }
+ <\parenthesize b b'\harmonic>4_\markup{ \teeny "AH 16" }
+ <\parenthesize g g'\harmonic>4_\markup{ \teeny "AH 17" }
+ <\parenthesize d' d''\harmonic>2_\markup{ \teeny "AH 19" }
%pinched harmonics (PH)
\pinchedHarmonics
<a'\harmonic>2\startTextSpan
- <g'\harmonic>4
+ <d''\harmonic>4
<e'\harmonic>4\stopTextSpan
%tapped harmonics (TH)
<\parenthesize g\4 g'\harmonic>4_\markup{ \teeny "TH 17" }
\harmonicByFret #7 a4\5
%tapped harmonics (TH)
\harmonicByFret #5 d4\4
- \harmonicByFret #5 d4\4
- \harmonicByFret #4 g2\3
+ \harmonicByFret #7 d4\4
+ \harmonicByFret #5 g2\3
%touch harmonics (TCH)
a4 \harmonicByFret #9 g2.\3
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
LilyPond también proporciona funciones de formato para imprimir
números de grupo especial diferentes a la propia fracción, así
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Armaduras de tonalidad no tradicionales"
texidoces = "
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las cabezas de nota de notación fácil utilizan la propiedad
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.49
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Referencia para armónicos sobre cuerdas al aire (armónicos naturales):
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello mostra come usare i contesti annidati @code{StaffGroup} e
+@code{GrandStaff} per creare sottogruppi degli strumenti dello stesso
+tipo. Mostra anche come usare @code{\\transpose} in modo che le variabili
+mantengano la musica per gli strumenti traspositori nell'intonazione reale.
+
+"
+ doctitleit = "Modello per orchestra coro e pianoforte"
+
lsrtags = "pitches, staff-notation, vocal-music, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla muestra el uso de contextos @code{StaffGroup} y
@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo
\header {
lsrtags = "pitches, text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Internamente, @code{\\ottava} establece las propiedades
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "repeats, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden mostrar los contadores de las repeticiones del tipo
porcentaje a intervalos regulares mediante el establecimiento de
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las repeticiones de compases completos de más de dos repeticiones
pueden llevar un contador si se activa la propiedad adecuada, como se
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
texidoces = "
Este ejemplo artificial muestra cómo se pueden permitir tanto los
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Ecco un comune doppio pentagramma per pianoforte con un po' di note.
+
+"
+ doctitleit = "Modello per pianoforte (semplice)"
+
lsrtags = "keyboards, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Presentamos a continuación una plantilla de piano sencilla con algunas
notas.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Muchas partituras de piano tienen las indicaciones dinámicas centradas
entre los dos pentagramas. El contexto @code{Dynamics}, si se sitúa
う必要はありません。
"
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a428
+ texidocit = "
+Molti spartiti per pianoforte hanno le dinamiche poste al centro dei due righi.
+Il contesto @code{Dynamics}, se collocato tra i righi, posiziona automaticamente
+le dinamiche in modo corretto.
+
+"
+ doctitleit = "Modello per pianoforte con dinamiche al centro"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In der meisten Klaviernotation werden die Dynamikzeichen zwischen
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Invece di destinare un rigo a parte alla linea melodica e al suo testo, è
+possibile collocare il testo al centro di un doppio pentagramma per pianoforte.
+
+"
+ doctitleit = "Modello per pianoforte con testo al centro"
+
lsrtags = "text, keyboards, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Ecco un tipico formato per canzoni: un rigo con linea melodica e testo,
+e sotto l'accompagnamento per pianoforte.
+
+"
+ doctitleit = "Modello per pianoforte con melodia e testo"
+
lsrtags = "vocal-music, keyboards, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Es posible ejercer un mayor control sobre la colocación de las
digitaciones de la mano derecha estableciendo el valor de una
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La polifonía se crea de la misma forma en un @code{TabStaff} que
en una pauta normal.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si necesitamos alargar o acortar un símbolo de arpegio, podemos
modificar independientemente los extremos superior e inferior.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Cuando se colocan figuras sobre líneas adicionales, sus barras se
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al establecer la propiedad @code{'strict-grace-spacing} hacemos que
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Posicionar los silencios multicompás"
texidoces = "
A diferencia de los silencios normales, no existe una instrucción
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los elementos de marcado de texto deben tener la propiedad
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
texidoces = "
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
texidoces = "
\header {
lsrtags = "repeats, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede imprimir una línea divisoria de la forma @code{|:} al
principio de la pieza, sobreescribiendo la propiedad correspondiente:
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir los números de compás a intervalos regulares
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir reguladores con un círculo en la punta (notación
«al niente») estableciendo la propiedad @code{circled-tip} del objeto
\header {
lsrtags = "text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aunque normalmente las marcas de texto sólo se imprimen sobre el
pentagrama superior, también se pueden imprimir en otro pentagrama
\header {
lsrtags = "rhythms, expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada, las indicaciones metronómicas y las
letras de ensayo se imprimen encima del pentagrama. Para
\header {
lsrtags = "tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar el contexto @code{NoteNames} para imprimir el valor
textual de las notas. La propiedad @code{printOctaveNames} activa o
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada se suprime el número del primer compás de una
\header {
lsrtags = "pitches, staff-notation"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los pasajes citados tienen en cuenta la transposición de la fuente
tanto como la del destino. En este ejemplo, todos los
\header {
lsrtags = "staff-notation"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La propiedad @code{quotedEventTypes} determina los tipos de eventos
\header {
lsrtags = "winds"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El ejemplo siguiente muestra cómo se pueden realizar diagramas de
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los valores predeterminados para las notas de adorno están
\header {
lsrtags = "rhythms, contexts-and-engravers"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden eliminar completamente los números de compás quitando el
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada, las líneas divisorias en los grupos
StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.14.0"
+\version "2.15.2"
\header {
lsrtags = "staff-notation, tweaks-and-overrides, breaks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El primer pentagrama vacío también se puede suprimir de la
partitura estableciendo la propiedad @code{remove-first} de
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
\header {
lsrtags = "rhythms, ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Estilos de silencios"
texidoces = "
Los silencios se pueden imprimir en distintos estilos.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} sólo
es necesario modificar la estructura de pulsos:
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Modello per coro SATB (quattro righi)
+
+"
+ doctitleit = "Modello per coro SATB - quattro righi"
+
lsrtags = "vocal-music, template"
+
+
+
%% Translation of GIT committish: 144cd434d02e6d90b2fb738eeee99119a7c5e1d2
texidocde = "
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
lsrtags = "headwords"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si la nota que da fin a un regulador cae sobre la primera parte de
un compás, el regulador se detiene en la línea divisoria
\header {
lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Si los reguladores son demasiado cortos, se pueden alargar
modificando la propiedad @code{minimum-length} del objeto
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
De forma predeterminada, los corchetes de primera y segunda vez se
trazan encima de los finales alternativos completos, pero es posible
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir los acordes exclusivamente al comienzo de las
líneas y cuando cambia el acorde.
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
\header {
lsrtags = "chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Al juntar nombres de acorde en cifrado americano, melodía y letra,
obtenemos una hoja guía de acordes o «lead sheet»:
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Ecco il modello di un comune spartito semplificato (lead sheet): include
+linea melodica, testo vocale, sigle degli accordi e relativi diagrammi
+per chitarra.
+
+"
+ doctitleit = "Modello di rigo singolo con note testo accordi e tasti"
+
lsrtags = "vocal-music, chords, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
\header {
lsrtags = "vocal-music, chords, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Vuoi preparare uno spartito semplificato (lead sheet) con melodia e
+accordi? La tua ricerca è finita!
+
+"
+ doctitleit = "Modello di rigo singolo con note e accordi"
+
lsrtags = "chords, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
melodía y acordes? ¡No busque más!
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo piccolo modello presenta una semplice linea melodica con un testo. Copialo
+e incollalo, aggiungi le note e le parole. Questo esempio disabilita la
+disposizione automatica delle travature, come è consuetudine per le parti
+vocali. Per usare la disposizione automatica delle travature, cambia o
+commenta la relativa linea di codice.
+
+"
+ doctitleit = "Modello di rigo singolo con note e testo"
+
lsrtags = "vocal-music, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello molto semplice mette a disposizione un rigo con delle note ed è
+quindi adatto per uno strumento non accompagnato o per un frammento
+melodico. Copialo e incollalo in un file, aggiungi le note e hai finito!
+
+"
+ doctitleit = "Modello di rigo singolo con solo note"
+
lsrtags = "template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla simple prepara un pentagrama con notas, adecuado para
un instrumento solista o un fragmento melódico. Córtelo y péguelo en
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.49
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los deslizamientos se pueden componer tipográficamente tanto en los
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Marca de pizzicato de chasquido (`pizzicato de Bartók')"
texidoces = "
El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "catalan.ly"
#(set-global-staff-size 15)
\header {
lsrtags = "text"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Los textos independientes se pueden disponer en varias columnas
utilizando instrucciones @code{\\markup}:
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La dirección de las plicas se contola de la misma forma en la
tablatura que en la notación tradicional. Las barras se pueden
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello presenta un semplice quartetto d'archi. Impiega anche una
+sezione @code{\\global} per definire il tempo e l'armatura di chiave.
+
+"
+ doctitleit = "Modello per quartetto d'archi (semplice)"
+
lsrtags = "unfretted-strings, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
una sección @code{\\global} para el compás y la armadura
\version "2.14.0"
\header {
+%% Translation of GIT committish: 514674cb00c18629242dfcde0c1a4976758adc56
+ texidocit = "
+Il frammento di codice del @qq{Modello per quartetto d'archi} crea un bel
+quartetto, ma cosa fare se si ha bisogno di creare le singole parti? Questo
+nuovo modello mostra come usare la funzionalità @code{\\tag} per dividere
+facilmente un pezzo in parti staccate.
+
+Occorre dividere questo modello in file separati; i nomi dei file sono
+indicati nei commenti all'inizio di ogni file. @code{piece.ly}
+contiene tutte le definizioni musicali. Gli altri file – @code{score.ly},
+@code{vn1.ly}, @code{vn2.ly}, @code{vla.ly} e @code{vlc.ly} –
+creano ciascuna parte.
+
+
+Non dimenticare di togliere i commenti quando usi i file separati!
+
+"
+ doctitleit = "Modello per quartetto d'archi con parti separate"
+
+
lsrtags = "unfretted-strings, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El fragmento de código @qq{Plantilla de cuarteto de cuerda} produce un
resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\include "english.ly"
#(set-global-staff-size 15)
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A veces, la indicación de compás no debe imprimir la fracción completa
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
A modo de alternativa para obtener auténticos «incipit»
independientes de la partitura principal, se incluyen como
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Transportar música con el menor número de alteraciones"
texidoces = "
Este ejemplo utiliza código de Scheme para forzar las
\header {
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Trucaje de las propiedades de clave"
texidoces = "
La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
La disposición de las expresiones de adorno se puede cambiar a lo
creating-double-digit-fingerings.ly
creating-simultaneous-rehearsal-marks.ly
creating-text-spanners.ly
+cross-staff-chords---beaming-problems-workaround.ly
custodes.ly
customizing-fretboard-fret-diagrams.ly
customizing-markup-fret-diagrams.ly
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
% #!lilypond lcp-extract.ly -*- coding: utf-8; -*-
%%%
\header {
lsrtags = "staff-notation, contexts-and-engravers"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se puede usar el delimitador de comienzo de un sistema
@code{SystemStartSquare} estableciéndolo explícitamente dentro de
texidoc = "
The system start delimiter @code{SystemStartSquare} can be used by
-setting it explicitly in a @code{StaffGroup} or @code{ChoirStaffGroup}
+setting it explicitly in a @code{StaffGroup} or @code{ChoirStaff}
context.
"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Se pueden imprimir estilos alternativos del corchete o gancho de las
\header {
lsrtags = "expressive-marks, vocal-music"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El corchete de arpegios @code{arpeggioBracket} se puede usar para
indicar la división de voces cuando no hay plicas que puedan ofrecer
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Algunos compositores escriben dos ligaduras cuando quieren acordes
legato. Esto se puede conseguir estableciendo @code{doubleSlurs}.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Es posible aplicar la barrita que cruza la barra de las
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
fill
grestore" )
(cons 0 1.3125)
- (cons 0 0))
+ (cons -.75 .75))
myNoteHeads = \override NoteHead #'stencil = \parallelogram
normalNoteHeads = \revert NoteHead #'stencil
\normalNoteHeads
<f, \tweak #'stencil \parallelogram b e>4 d
}
-
-
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
doctitlees = "Uso de ligaduras en los arpegios"
texidoces = "
En ocasiones se usan ligaduras de unión para escribir los arpegios.
\header {
lsrtags = "tweaks-and-overrides, spacing"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor
adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Las expresiones dinámicas que se comienzan, terminan o se producen
en la misma nota se alinean verticalmente. Para asegurar que las
\header {
lsrtags = "vocal-music, tweaks-and-overrides, spacing"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Este fragmento de código muestra el uso de las propiedades de
contexto @code{alignBelowContext} y @code{alignAboveContext} para
\header {
lsrtags = "chords, tweaks-and-overrides"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
el establecimiento de @code{useBassFigureExtenders} al valor
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.47
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla añade una reducción de piano automática a la partitura
の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。
"
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello aggiunge una riduzione automatica per pianoforte alla tipica
+partitura vocale SATB illustrata in @qq{Modello per complesso vocale}. Si
+dimostra così uno dei punti di forza di LilyPond – è possibile usare una
+definizione musicale più di una volta. Qualsiasi modifica venga fatta alle note
+delle voci (ad esempio, @code{tenorMusic}) verrà applicata anche alla riduzione
+per pianoforte.
+"
+ doctitleit = "Modello per gruppo vocale con automatica riduzione per pianoforte"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In diesem Beispiel wird ein automatischer Klavierauszug zu der
\version "2.14.0"
\header {
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello è fondamentalmente analogo al semplice modello @qq{Complesso vocale},
+con l'unica differenza che qui tutti i versi del testo sono posizionati
+usando @code{alignAboveContext} e @code{alignBelowContext}.
+
+"
+ doctitleit = "Modello per gruppo vocale con testo allineato sotto e sopra i righi"
+
lsrtags = "text, vocal-music, contexts-and-engravers, template"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+
+
+
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla es, básicamente, la misma que la sencilla plantilla
@qq{Conjunto vocal}, excepto que aquí todas las líneas de letra se
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Esta plantilla crea una partitura que comienza con una estrofa para
doctitlees = "Estrofa para solista y estribillo a dos voces"
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Questo modello crea una partitura che inizia con una sezione solistica e
+prosegue in un ritornello a due voci. Illustra anche l'uso delle
+pause spaziatrici all'interno della variabile @code{\\global} per definire
+i cambi di tempo (e altri elementi comuni a tutte le parti) nel corso di
+tutta la partitura.
+"
+ doctitleit = "Modello per gruppo vocale con strofa e ritornello"
+
%% Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b
texidocde = "
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.47
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c
歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。"
+%% Translation of GIT committish: 4077120c18ac1dc490501b3d7d5886bc93e61a42
+ texidocit = "
+Ecco una tipica partitura corale a quattro parti, SATB. Se il complesso è più
+ampio, è spesso comodo scrivere gli elementi comuni in un'unica sezione, che
+verrà poi inclusa in tutte le parti. Ad esempio, l'indicazione di tempo e
+l'armatura di chiave sono quasi sempre le stesse per tutte le parti. Come nel
+modello dell'@qq{Inno}, le quattro voci sono ripartite in due soli righi.
+"
+ doctitleit = "Modello per complesso vocale"
+
%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocde = "
Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.47
+%% Note: this file works from version 2.14.0
\version "2.14.0"
#(set-global-staff-size 15)
\header {
lsrtags = "repeats, staff-notation, chords"
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Mediante la adición del grabador @code{Volta_engraver} al
pentagrama pertinente, se pueden poner los corchetes de primera y
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
#(set-global-staff-size 15)
\paper {
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.36
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.13.51
+%% Note: this file works from version 2.14.0
\version "2.14.0"
\header {
-%%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
+%%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
El fragmento de música que aparece a continuación presenta todos los
diagramas de viento madera que se encuentran definidos en LilyPond por
@end html
@end ifhtml
-@emph{Last updated Thu Mar 24 14:52:33 UTC 2011
+@emph{Last updated Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.5 0.5
@item
Section titles
@*
-(1464)
+(1779)
@tab Francisco Vila
@*
@item
1 Music engraving
@*
-(5297)
+(5296)
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #dfef77">partially translated (93 %)</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-partially translated (93 %)
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #2cff20">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@item
1 Tutorial
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@item
2 Common notation
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@item
3 Fundamental concepts
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@item
4 Tweaking output
@*
-(15408)
+(15393)
@tab Pavel Fric
@*
@ifhtml
@html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-not translated
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
1.1 Pitches
@*
-(4479)
+(4502)
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #47ff24">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #2cff20">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
@html
-<span style="background-color: #33ff21">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Frédéric Chiasson
@*
@item
1.4 Repeats
@*
-(930)
+(945)
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #39ff22">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
1.5 Simultaneous notes
@*
-(2163)
+(2216)
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #33ff21">partially up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
@html
-<span style="background-color: #33ff21">partially up to date</span>
+<span style="background-color: #7dff2b">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
@html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-not translated
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
1.6 Staff notation
@*
-(2056)
+(2345)
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #9eff30">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #9eff30">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-not translated
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #9eff30">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
1.7 Editorial annotations
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-not translated
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-not translated
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@item
2.2 Keyboard and other multi-staff instruments
@*
-(838)
+(864)
@tab Till Paala
@*
@item
2.4 Fretted string instruments
@*
-(2640)
+(2649)
@tab Till Paala
@*
@item
3 General input and output
@*
-(7069)
+(7671)
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (90 %)</span>
@end html
@end ifhtml
@ifnothtml
-translated
+partially translated (90 %)
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #83fe2c">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<span style="background-color: #dfef77">partially translated (83 %)</span>
@end html
@end ifhtml
@ifnothtml
-translated
+partially translated (83 %)
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #91ff2e">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@item
4 Spacing issues
@*
-(11017)
+(11087)
@tab Till Paala
@*
@end multitable
-@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
+@multitable @columnfractions 0.142857142857 0.142857142857 0.142857142857 0.142857142857 0.142857142857 0.142857142857 0.142857142857
@headitem
LilyPond Application Usage
@tab es
@tab fr
@tab hu
+@tab it
@tab ja
@item
Section titles
@ifnothtml
partially up to date
@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
@tab Yoshiki Sawada
@*
@ifnothtml
partially up to date
@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
@tab Yoshiki Sawada
@*
@ifnothtml
partially up to date
@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
@tab Yoshiki Sawada
@*
@ifnothtml
partially up to date
@end ifnothtml
-@tab Yoshiki Sawada
+@tab Federico Bruni
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">translated</span>
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Yoshiki Sawada
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
@item
3 Running @command{lilypond-book}
@*
-(3764)
+(3952)
@tab Reinhold Kainhofer
@*
@ifhtml
@html
-<span style="background-color: #d0f0f8">not translated</span>
+<span style="background-color: #1fff1f">translated</span>
@end html
@end ifhtml
@ifnothtml
-not translated
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
@end ifnothtml
@*
@ifhtml
@html
-<span style="background-color: #91ff2e">partially up to date</span>
+<span style="background-color: #97ff2f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
@html
<span style="background-color: #1fff1f">up to date</span>
@end html
@ifhtml
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #1fff1f">translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+translated
+@end ifnothtml
+@*
+
+@ifhtml
+
@html
<span style="background-color: #1fff1f">up to date</span>
@end html
@ifhtml
+@html
+<span style="background-color: #1fff1f">up to date</span>
+@end html
+@end ifhtml
+@ifnothtml
+up to date
+@end ifnothtml
+@tab Federico Bruni
+@*
+
+@ifhtml
+
+@html
+<small>Luca Rossetto Casel</small>
+@end html
+@end ifhtml
+@ifnothtml
+Luca Rossetto Casel
+@end ifnothtml
+@*
+
+@ifhtml
+
+@html
+<small></small>
+@end html
+@end ifhtml
+@ifnothtml
+
+@end ifnothtml
+@ifhtml
+
+@html
+<span style="background-color: #d0f0f8">not translated</span>
+@end html
+@end ifhtml
+@ifnothtml
+not translated
+@end ifnothtml
+@*
+
+@ifhtml
+
@html
<span style="background-color: #1fff1f">up to date</span>
@end html
@ifhtml
@html
-<span style="background-color: #c0ff34">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Ben Luo
@*
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #25fe1f">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Ben Luo
@*
@item
Introduction
@*
-(4506)
+(4564)
@tab Pavel Fric
@*
@ifhtml
@html
-<span style="background-color: #47ff24">partially up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #54ff26">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab
@ifhtml
@item
Download
@*
-(1183)
+(1195)
@tab Pavel Fric
@*
@ifhtml
@html
-<span style="background-color: #40fe23">partially up to date</span>
+<span style="background-color: #4efe25">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Francisco Vila
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Harmath Dénes
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Federico Bruni
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Jan Nieuwenhuizen
@*
@ifhtml
@html
-<span style="background-color: #54ff26">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Ben Luo
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
Manuals
@*
-(1200)
+(1203)
@tab Pavel Fric
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Till Paala
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Harmath Dénes
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Federico Bruni
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Yoshiki Sawada
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@tab Jan Nieuwenhuizen
@*
@ifhtml
@html
-<span style="background-color: #5bff27">partially up to date</span>
+<span style="background-color: #1fff1f">up to date</span>
@end html
@end ifhtml
@ifnothtml
-partially up to date
+up to date
@end ifnothtml
@tab Ben Luo
@*
@ifhtml
@html
-<span style="background-color: #1fff1f">up to date</span>
+<span style="background-color: #25fe1f">partially up to date</span>
@end html
@end ifhtml
@ifnothtml
-up to date
+partially up to date
@end ifnothtml
@item
A GNU Free Documentation License
@{ c1 @}
@end example
-To produce a useful @file{EPS} file, use
+To produce useful image files:
@example
-lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly
+EPS
+
+lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly
+
+PNG
-@file{PNG}:
lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly
+
+A transparent PNG
+
+lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts \
+ -dpixmap-format=pngalpha --png myfile.ly
@end example
@example
%%% top of file "symphony-cello.ly"
-\include ../definitions.ily
+\include ../symphonyDefs.ily
\include ../Notes/cello.ily
@end example
@divClass{column-center-top}
@subheading What are @qq{Tiny examples}?
-A tiny example is an example from which nothing can be removed.
+A tiny example is an example from which @strong{nothing} can be removed.
@divEnd
@divClass{column-left-bottom}
understand it and help you.
@item
-A simple example demonstrates that you have put effort towards
+A tiny example demonstrates that you have put effort towards
solving the problem yourself. When people send huge portions of
-input, it looks like they don't care how if we help them or not.
+input, it looks like they don't care if we help them or not.
@item
-Creating a tiny example forces you to understand what is
+Creating a tiny example helps you to understand what is
happening. Many false problem reports can be avoided by
attempting to create a tiny example; if you cannot replicate a
@qq{bug} in a tiny example, then the problem was probably an
@divClass{column-right-bottom}
-@subheading How do I create them?
+@subheading How to create them?
@divClass{keep-bullets}
@itemize
@item
-Include the \version number.
+Include the @code{\version} number.
@item
Make it small! Examples about spacing or page layout might
require many bars of music, but most issues can be reproduced
-using only a single measure.
+using less than a single measure.
@item
When trying to create an example, try commenting out @w{(@code{%}
-or @code{%@{ @dots{} %@}})} sections of your file. If you can
-comment something while still demonstrating the main idea, then
-remove the commented-material!
+or @code{%@{ @dots{} %@}})} sections of your file. If you
+can comment something while still demonstrating the main idea,
+then remove the commented-material.
@item
-Avoid using complicated notes, keys, or time signatures, unless
+Avoid using complicated notes, keys or time signatures, unless
the bug is about the behavior of those items.
@item
Do not use @code{\override} or @code{\set} commands unless the bug
-is about those particular commands.
+is about those specific commands.
+
+@item
+Optionally, attach an image showing the desired graphical output.
@end itemize
@divEnd
@divEnd
+@divClass{column-center-bottom}
+@subheading How tiny should they be?
+
+Is the code below a minimal example?
+
+@example
+\version "2.14.1"
+\include "english.ly"
+
+\score @{
+ \new Staff @{
+ \key d \major
+ \numericTimeSignature
+ \time 2/4
+ <cs' d'' b''>16 <cs' d'' b''>8.
+ %% Here: the tie on the D's looks funny
+ %% Too tall? Left-hand endpoint is not aligned with the B tie?
+ ~
+ <cs' d'' b''>8 [ <b d'' a''> ]
+ @}
+@}
+@end example
+Well, it is not very big, but a truly minimal example is here:
+
+@example
+\version "2.14.1"
+@{
+ % middle tie looks funny here:
+ <c' d'' b''>8. ~ <c' d'' b''>8
+@}
+@end example
+
+Very few tiny examples exceed 10 lines of code -
+quite often 4 lines are enough to demonstrate the problem!
+
+@divEnd
@node Bug reports
uninstall-lilypond
@end example
+@subsubheading Help
+
+In the shell, type:
+
+@example
+sh lilypond-@versionStable{}-OS-TYPE.sh --help
+@end example
+
@divEnd
@item
@sourceimage{logo-fedora,,,}
@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.3}
+Fedora: LilyPond 2.14.1}
@item
@sourceimage{logo-ubuntu,,,}
@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
@item
@sourceimage{logo-slackware,,,}
@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.3}
+Slackware: LilyPond 2.14.1}
@item
@sourceimage{logo-debian,,,}
@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
@item
@sourceimage{logo-suse,,,}
[@var{pre-set paths}];@var{DIR}\LilyPond\usr\bin
@end example
-@warning{@var{DIR} will generally be @code{C:\Program Files}.}
+@warning{@var{DIR} will generally be @code{C:@bs{}Program Files}.}
@noindent
and click @qq{OK} button to close the window.
@itemize
+@item
+@ref{All}:
+previous stable versions and current as a compressed archive.
+
@item
@ref{Translated}:
translation status for non-English readers.
@item
-@ref{All}:
-downloadable and old manuals.
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+user-created examples, hints and tips.
@item
@ref{Development}:
@c used for news about the upcoming release; see CG 10.2
-
@newsItem
-@subsubheading LilyPond 2.15.0 released! @emph{June 7, 2011}
+@subsubheading LilyPond 2.15.7 released! @emph{July 29, 2011}
-We are happy to announce the release of LilyPond 2.15.0. This is
-the beginning of a new unstable development effort, and adds the
-usual number of bugs.
+We are happy to announce the release of LilyPond 2.15.7. This
+release contains the usual number of bugfixes.
It is strongly recommended that normal users do @strong{not} use
this release, and instead use the stable 2.14 version.
@newsItem
-@subsubheading LilyPond 2.14.0 released! @emph{June 6, 2011}
-
-We are proud to announce the release of GNU LilyPond 2.14.
-LilyPond is a music engraving program, devoted to producing the
-highest-quality sheet music possible. It brings the aesthetics of
-traditionally engraved music to computer printouts.
-
-Many improvements have been made in the past two and a half years
-since the previous main stable version. A few major improvements
-are:
-
-@itemize
-@item
-LilyPond is now licensed under the GNU GPL v3 or higher.
-
-@item
-The vertical spacing engine has been drastically changed, making
-it much more flexible and easier to control.
-
-@item
-Automatic beaming is now more flexible, and beam collisions are
-avoided.
-
-@end itemize
-
-A full list of new features is given in:
-
-@example
-@uref{http://lilypond.org/doc/v2.13/Documentation/changes/index.html}
-@end example
-
-Happy music typesetting! LilyPond 2.14 was brought to you by...
-
-Main development team:
+@subsubheading LilyPond 2.15.6 released! @emph{July 26, 2011}
-Trevor Daniels, Reinhold Kainhofer, David Kastrup, Jonathan Kulp,
-Werner Lemberg, John Mandereau, Patrick McCarty, Joe Neeman,
-Han-Wen Nienhuys, Jan Nieuwenhuizen, Graham Percival, Mark
-Polesky, Neil Puttock, Mike Solomon, Carl Sorensen, Francisco
-Vila, Valentin Villenave.
+We are happy to announce the release of LilyPond 2.15.6. This
+release contains the usual number of bugfixes.
-Programming contributors:
-
-Sven Axelsson, Pál Benkő, Bertrand Bordage, Frédéric Bron, Peter Chubb, Hajo Dezelski, Richard
-Gay, Keith OHara, Andrew Hawryluk, Christian Hitz, Marc Hohl,
-Henning Hraban Ramm, Ian Hulin, Michael Käppler, Marek Klein,
-Kieren MacMillan, Thomas Morgan, Benjamin Peterson, Nathan Reed,
-Julien Rioux, Boris Shingarov, Patrick Schmidt, Owen Tuz, Jan Warchoł, Andrew
-Wilson, Rodolfo Zitellini.
-
-Font contributors:
-
-Keith OHara, Marc Hohl, Alexander Kobel, Carsten Steger.
-
-Documentation contributors:
-
-Colin Campbell, Andrew Hawryluk, James Lowe, Mike Moral, Ralph
-Palmer, David Pounder, Patrick Schmidt.
-
-Bug squad:
-
-James E. Bailey, Colin Campbell, Phil Holmes, Urs Liska, Ralph
-Palmer, Kieren MacMillan, Dmytro O. Redchuk.
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
-Binaries support contributors:
+@newsEnd
-Christian Hitz.
-Translation contributors:
+@newsItem
+@subsubheading LilyPond 2.14.2 released! @emph{July 25, 2011}
-Federico Bruni, Dénes Harmath, Jean-Charles Malahieude, Tineke de
-Munnik, Till Paala, Ralf Wildenhues, Yoshiki Sawada.
+We are happy to announce the release of LilyPond 2.14.2. This
+fixes a few minor bugs in the stable version, and should cause no
+problems. We recommend that everybody upgrade to this version.
@newsEnd
* don't duplicate entries from news-front.itexi
@end ignore
+
+
+@newsItem
+@subsubheading LilyPond 2.15.5 released! @emph{July 12, 2011}
+
+We are happy to announce the release of LilyPond 2.15.5. This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.15.4 released! @emph{July 4, 2011}
+
+We are happy to announce the release of LilyPond 2.15.4. This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.15.3 released! @emph{June 27, 2011}
+
+We are happy to announce the release of LilyPond 2.15.3. This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.15.2 released! @emph{June 18, 2011}
+
+We are happy to announce the release of LilyPond 2.15.2. This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.14.1 released! @emph{June 12, 2011}
+
+We are happy to announce the release of LilyPond 2.14.1. This
+fixes a few minor bugs in the stable version, and should cause no
+problems. We recommend that everybody upgrade to this version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.15.1 released! @emph{June 11, 2011}
+
+We are happy to announce the release of LilyPond 2.15.1. This is
+the beginning of a new unstable development effort, and adds the
+usual number of bugs.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.15.0 released! @emph{June 7, 2011}
+
+We are happy to announce the release of LilyPond 2.15.0. This is
+the beginning of a new unstable development effort, and adds the
+usual number of bugs.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.14.0 released! @emph{June 6, 2011}
+
+We are proud to announce the release of GNU LilyPond 2.14.
+LilyPond is a music engraving program, devoted to producing the
+highest-quality sheet music possible. It brings the aesthetics of
+traditionally engraved music to computer printouts.
+
+Many improvements have been made in the past two and a half years
+since the previous main stable version. A few major improvements
+are:
+
+@itemize
+@item
+LilyPond is now licensed under the GNU GPL v3 or higher.
+
+@item
+The vertical spacing engine has been drastically changed, making
+it much more flexible and easier to control.
+
+@item
+Automatic beaming is now more flexible, and beam collisions are
+avoided.
+
+@end itemize
+
+A full list of new features is given in:
+
+@example
+@uref{http://lilypond.org/doc/v2.13/Documentation/changes/index.html}
+@end example
+
+Happy music typesetting! LilyPond 2.14 was brought to you by...
+
+Main development team:
+
+Trevor Daniels, Reinhold Kainhofer, David Kastrup, Jonathan Kulp,
+Werner Lemberg, John Mandereau, Patrick McCarty, Joe Neeman,
+Han-Wen Nienhuys, Jan Nieuwenhuizen, Graham Percival, Mark
+Polesky, Neil Puttock, Mike Solomon, Carl Sorensen, Francisco
+Vila, Valentin Villenave.
+
+Programming contributors:
+
+Sven Axelsson, Pál Benkő, Bertrand Bordage, Frédéric Bron, Peter Chubb, Hajo Dezelski, Richard
+Gay, Keith OHara, Andrew Hawryluk, Christian Hitz, Marc Hohl,
+Henning Hraban Ramm, Ian Hulin, Michael Käppler, Marek Klein,
+Kieren MacMillan, Thomas Morgan, Benjamin Peterson, Nathan Reed,
+Julien Rioux, Boris Shingarov, Patrick Schmidt, Owen Tuz, Jan Warchoł, Andrew
+Wilson, Rodolfo Zitellini.
+
+Font contributors:
+
+Keith OHara, Marc Hohl, Alexander Kobel, Carsten Steger.
+
+Documentation contributors:
+
+Colin Campbell, Andrew Hawryluk, James Lowe, Mike Moral, Ralph
+Palmer, David Pounder, Patrick Schmidt.
+
+Bug squad:
+
+James E. Bailey, Colin Campbell, Phil Holmes, Urs Liska, Ralph
+Palmer, Kieren MacMillan, Dmytro O. Redchuk.
+
+Binaries support contributors:
+
+Christian Hitz.
+
+Translation contributors:
+
+Federico Bruni, Dénes Harmath, Jean-Charles Malahieude, Tineke de
+Munnik, Till Paala, Ralf Wildenhues, Yoshiki Sawada.
+
+@newsEnd
+
+
+
@newsItem
@subsubheading Release candidate 7 of 2.14 - LilyPond 2.13.63 released! @emph{May 30, 2011}
#RedirectMatch ^/development /doc/development
#old# default doc dir
-RedirectMatch ^/doc/*$ /doc/v2.12
+RedirectMatch ^/doc/*$ /doc/v2.14
# make attempt at `latest' symlink avoid ^v catch-all doc fix rule below
-RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.13/$1
-RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.13/$1
-RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.12/$1
-RedirectMatch ^/doc//*([^v].*)$ /doc/v2.12/$1
-RedirectMatch ^(/Documentation.*)$ /doc/v2.12$1
+RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.15/$1
+RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.15/$1
+RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.14/$1
+RedirectMatch ^/doc//*([^v].*)$ /doc/v2.14/$1
+RedirectMatch ^(/Documentation.*)$ /doc/v2.14$1
RedirectMatch ^/index$ /
# fix root calculation: no double slashes
@end html
@end ifhtml
-@emph{最近更新 Thu Mar 24 14:52:33 UTC 2011
+@emph{最近更新 Wed Jul 13 10:59:12 UTC 2011
}
@multitable @columnfractions 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667 0.166666666667
@item
简介
@*
-4506
+4564
@tab
@tab
@tab
@item
下载
@*
-1183
+1195
@tab Ben Luo
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">是</span>
+<span style="background-color: #25fe1f">部分地</span>
@end html
@end ifhtml
@ifnothtml
-是
+部分地
@end ifnothtml
@tab pre-GDP
@item
手册
@*
-1200
+1203
@tab Ben Luo
@tab
@tab
@ifhtml
@html
-<span style="background-color: #1fff1f">是</span>
+<span style="background-color: #25fe1f">部分地</span>
@end html
@end ifhtml
@ifnothtml
-是
+部分地
@end ifnothtml
@tab pre-GDP
@item
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=15
-PATCH_LEVEL=1
+PATCH_LEVEL=8
MY_PATCH_LEVEL=
-VERSION_STABLE=2.14.0
-VERSION_DEVEL=2.15.0
+VERSION_STABLE=2.14.2
+VERSION_DEVEL=2.15.7
--- /dev/null
+\version "2.14"
+
+\header {
+ texidoc = "
+A @code{\Voice} should be able to contain both an @code{Ambitus_engraver}
+and a @code{Mensural_ligature_engraver} without segfaulting.
+ "
+}
+
+\new Voice \with {
+ \consists Ambitus_engraver
+ \consists Mensural_ligature_engraver
+} {
+ \[ c'\longa c''\longa \]
+}
--- /dev/null
+
+\header {
+ texidoc = "Beams over skips do not cause a segfault."
+}
+
+\version "2.15.3"
+
+\layout { ragged-right = ##t }
+
+music = {
+ \clef bass r2 r4 r8 f,
+ r2 r4 g,8 r
+ r4 f, 8 r8 r2
+}
+
+beams = {
+ \repeat "unfold" 24 { s8[ s ] s[ s]}
+}
+
+\new Staff {
+ \context Voice << { \beams } { \music}>>
+}
--- /dev/null
+\version "2.15.2"
+
+\header {
+ texidoc = "Breathing signs are positioned correctly on custom staves
+which use @code{line-positions}."
+}
+
+\relative c' {
+ \override Staff.StaffSymbol #'line-positions = #'(-7 -5 -3 -1)
+ b2 \breathe b
+ \override BreathingSign #'direction = #DOWN
+ \breathe
+}
--- /dev/null
+\version "2.15.5"
+
+\header {
+ texidoc = "
+To calculate the total duration of chord tremolos, only real notes shall be
+counted, no other commands.
+"
+}
+
+right = \relative c'' {
+ s2
+}
+
+left = \relative c' {
+ % This tremolo contains just two notes (but three lilypond events/commands!)
+ \repeat tremolo 4 { f,16 \change Staff = "right" f'}
+}
+
+\score {
+ \new PianoStaff <<
+ \new Staff = "right" { \right }
+ \new Staff = "left" { \clef bass \left }
+ >>
+}
--- /dev/null
+\version "2.15.3"
+
+\header {
+ texidoc = "Clefs for cue notes should not influence the printed key signature."
+}
+
+vI = \relative c'' { \clef "treble" \repeat unfold 40 g4 }
+\addQuote vIQuote { \vI }
+\score {
+ \new Staff {
+ \clef "bass" \key g \major
+ \cueDuringWithClef #"vIQuote" #DOWN #"treble" { R1 } |
+ c1 |
+ \cueDuringWithClef #"vIQuote" #DOWN #"soprano" { R1 \break R1 }
+ c1 |
+ }
+}
-\version "2.14.0"
+\version "2.15.5"
#(use-modules (srfi srfi-13)
(ice-9 format))
\test "" ##[ \once \override Beam #'beam-thickness = #0.6 #]
\test "" ##[ \revert Staff . Stem #'thickness #] % RevertProperty
\test "" ##[ \revert Beam #'beam-thickness #]
+\test "NOT A BUG" ##[ \oneVoice #] % resetting a bunch of properties
+\test "" ##[ \override StaffGrouper #'(staff-staff-spacing basic-distance) = #7 #] % nested properties
+\test "" ##[ \revert StaffGrouper #'(staff-staff-spacing basic-distance) #] % nested properties
%% \applyOutput
\test "" ##[ \applyOutput #'Foo #(lambda (arg) (list)) #]
%% \ottava
\test "" ##[ \ottava #1 #] % OttavaMusic
+%% \tweak
+\test "" ##[ < \tweak #'duration-log #2 c > #]
+\test "" ##[ < c \tweak #'transparent ##t e > #]
+\test "" ##[ < \tweak #'color #'(1.0 0.0 0.0) \tweak #'duration-log #2 c > #]
+\test "" ##[ c-\tweak #'font-size #3 -> #]
+
%% end test.
#(read-hash-extend #\[ #f) %{ ] %}
--- /dev/null
+\version "2.15.7"
+
+\header {
+ texidoc = "If a dynamic has an explicit direction that differs from the
+dynamic line spanner's direction, automatically break the dynamic line spanner.
+"
+}
+
+\relative c' {
+ c1^\<
+ c1_\>
+ f,1\p
+
+ c'1^\<
+ c1_\p^\>
+ c1\!
+}
--- /dev/null
+\version "2.15.7"
+
+\header {
+ texidoc = "@code{\\breakDynamicSpan} shall also work if a
+dynamic spanner crosses a line break.
+"
+}
+
+\relative c' {
+ % spanner really crosses linebreak:
+ c1\<\breakDynamicSpan c'' \break
+ c,,1
+ % new spanner immediately after linebreak (with broken spanner):
+ c''1\>\breakDynamicSpan \break
+ c,,1\<
+ f,1\breakDynamicSpan\p
+}
--- /dev/null
+\version "2.15.7"
+
+\header {
+ texidoc = "@code{\\breakDynamicSpan} work whether it is placed together
+with the start or the end of a spanner. Both lines should be identical.
+"
+}
+
+\relative c {
+ c1\< c''
+ % break directly before and after \> :
+ c,1\breakDynamicSpan\>\breakDynamicSpan
+ f,1\p \break
+
+ c1\<\breakDynamicSpan c''
+ c,1\>
+ f,1\breakDynamicSpan\p
+}
--- /dev/null
+\version "2.15.7"
+
+\header {
+ texidoc = "@code{\\breakDynamicSpan} shall only have an effect on the current
+spanner, not on subsequent spanners.
+"
+}
+
+\relative c' {
+ % Check that the effect of \breakDynamic span is only for the current
+ % spanner and not for the following spanners, too.
+ c1\<\breakDynamicSpan c''
+ c,,1\>
+ f,1\p % <= the \> and the \p should be aligned!
+}
--- /dev/null
+\version "2.15.6"
+
+\header {
+ texidoc = "Setting the style of a @code{DynamicTextSpanner} to @code{'none}
+to hide the line altogether should also work over line breaks.
+"
+}
+
+\relative c'' {
+ \override DynamicTextSpanner #'style = #'none
+ c2\cresc g,2
+ \break
+ g2 c'2\f
+}
\tempo 4 = 96
a4\f d fis8-. a-. r4
- d16(\downbow cis b a) g4 \breathe e8\p( g) fis4
+ d16(\downbow cis b a) g4 \breathe e8\p( g) fis4 |
e4\< g8 fis g4-_\mp\>
\st "III"
b8-_\startTextSpan a-_\stopTextSpan
b4\p\<( d8 cis) d4(-. fis8-.^"II" e-.^"II")
fis16(\mf\downbow g a b c\> b a g) fis(\upbow e d c) b(\downbow a g fis)
- e8-.\mp\upbow r e'-.\upbow^"tip" r e,4->^"mb" r4
+ e16\mp\upbow ~ e-.\mp r8 e'-.\upbow^"tip" r e,4->^"mb" r4 |
\key d \minor
\time 3/4
\tempo 4 = 120
- d4.\f^"pizz." e8 f4
+ d4.\mf^"pizz." e8 f4
f'4. e8 d4
- d,4.\p c8 bes4
+ d,4.\mp c8 bes4 |
\tempo 4 = 88
- a16\mp e' a e' a,,32\f e' a e' r8 r4
+ a16\p e' a e' a,,32\f e' a e' r8 r4
d4^"arco"^"lh"\> \acciaccatura { c8 } bes4 \acciaccatura { a8 } g4
\st "III"
fis16\p\startTextSpan a_"II" g a_"II" a a_"II" bes a_"II"
c a_"II" bes a_"II"\stopTextSpan
- a4\breathe a,\breathe r4
+ a4\breathe a,\breathe r4 |
}
--- /dev/null
+\version "2.15.7"
+\header {
+ texidoc = "Lilypond does footnotes."
+}
+
+\paper {
+ footnote-numbering-function = #symbol-footnotes
+}
+
+#(set-default-paper-size "a6")
+\book {
+
+\markup {
+ a \footnote b c
+ \footnote d e
+ \footnote f g
+}
+
+\markup { h i }
+
+\relative c' {
+\autoFootnoteGrob #'NoteHead #'(1 . -1) \markup { j }
+a b c d }
+
+\pageBreak
+
+\markup { k \footnote l m }
+
+\relative c' { a1 }
+
+\relative c' {
+ d4 e
+ < f a-\autoFootnote #'(1 . -1) \markup { n } c >
+ \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
+ \autoFootnoteGrob #'Hairpin #'(1 . 1) \markup { p }
+ a8\< [ b c d ] a4 b c |
+ d a b c |
+ d a b c |
+ d a b c\f |
+}}
--- /dev/null
+\version "2.15.7"
+\header {
+ texidoc = "Lilypond does footnotes."
+}
+
+\paper {
+ reset-footnotes-on-new-page = ##f
+}
+
+#(set-default-paper-size "a6")
+\book {
+
+\markup {
+ a \footnote b c
+ \footnote d e
+ \footnote f g
+}
+
+\markup { h i }
+
+\relative c' {
+\autoFootnoteGrob #'NoteHead #'(1 . -1) \markup { j }
+a b c d }
+
+\pageBreak
+
+\markup { k \footnote l m }
+
+\relative c' { a1 }
+
+\relative c' {
+ d4 e
+ < f a-\autoFootnote #'(1 . -1) \markup { n } c >
+ \autoFootnoteGrob #'Beam #'(1 . 1) \markup { o }
+ \autoFootnoteGrob #'Hairpin #'(1 . 1) \markup { p }
+ a8\< [ b c d ] a4 b c |
+ d a b c |
+ d a b c |
+ d a b c\f |
+}}
#(set-default-paper-size "a6")
+\paper {
+ footnote-auto-numbering = ##f
+}
+
\book {
\new Staff \with { \consists "Footnote_engraver" }
#(set-default-paper-size "a6")
-\paper { ragged-last-bottom = ##f }
+\paper {
+ ragged-last-bottom = ##f
+ footnote-auto-numbering = ##f
+}
\book {
texidoc = "Lilypond does footnotes."
}
+\paper {
+ footnote-auto-numbering = ##f
+}
+
#(set-default-paper-size "a6")
\book {
--- /dev/null
+\header {
+ texidoc = "When broken, glissandi can span multiple lines."
+
+}
+\version "2.15.0"
+\paper {
+ ragged-right = ##t
+}
+
+\relative c'' {
+ \override Glissando #'breakable = ##t
+ \override Glissando #'after-line-breaking = ##t
+ d1\glissando
+ \break s1
+ \break s1
+ \break s1
+ c,1^\ff\trill
+ % Subsequent glissando prints correctly instead of
+ % using the Y positions from the previous one.
+ a'1\glissando
+ \break s1
+ \break s1
+ \break s1
+ e1^\ff\trill
+}
--- /dev/null
+\version "2.15.6"
+
+\header
+{
+ texidoc = "Create grace notes with slashed stem, but no slur. That can be used
+ when the grace note is tied to the next note.
+"
+}
+\relative {
+ \slashedGrace c16~ c1
+}
--- /dev/null
+\version "2.15.5"
+
+\header {
+ texidoc = "Horizontal brackets are created with the correct event-cause, ensuring
+tweaks are applied to the correct spanner."
+}
+
+\layout {
+ \context {
+ \Voice
+ \consists "Horizontal_bracket_engraver"
+ }
+}
+
+\relative c' {
+ c1-\tweak #'thickness #6 \startGroup
+ c1\startGroup
+ c1\stopGroup
+ c1\stopGroup
+}
--- /dev/null
+\version "2.15.4"
+\header {
+ texidoc = "For Voice-derived contexts like CueVoice, the lyrics should
+still start with the first note."
+}
+
+\score {
+ \new Staff <<
+ \new Voice \relative c'' {
+ g2
+ <<
+ { \voiceOne r2 }
+ \new CueVoice = "cue" { \voiceTwo g4 g }
+ >>
+ }
+ \context Lyrics \lyricsto "cue" { A B }
+ >>
+}
--- /dev/null
+\version "2.15.5"
+
+\header {
+
+ texidoc = "If lyrics are assigned to a non-existing voice, a warning should
+be printed. However, if the lyrics context does not contain any lyrics, then
+no warning should be printed."
+
+}
+
+#(ly:set-option 'warning-as-error #f)
+<<
+ \new Staff
+ \new Voice = "notes" {
+ c1
+ }
+ % This should not give a warning (empty lyrics, existing voice):
+ \new Lyrics \lyricsto "notes" \lyricmode { }
+ % This should give a warning (non-existing voice):
+ \new Lyrics \lyricsto "not-existing-notes" \lyricmode { Test }
+ % This should NOT give a warning (non-existing voice, but also no lyrics):
+ \new Lyrics \lyricsto "not-existing-notes" \lyricmode { }
+>>
--- /dev/null
+\version "2.15.7"
+
+\header {
+ texidoc = "Text markup using @code{center-align} or @code{center-column} shall
+still reserve space for its whole width and not overwrite the previous stencil."
+}
+
+\markup{\left-align { AAA BB }}
+\markup{\center-align { AAA BB }}
+\markup{\right-align { AAA BB }}
+
+% Here the two center-columns should not collide with the +
+\markup \line {
+ \center-column { \line {XXX} \line {Y} }
+ "+"
+ \center-column { \line {XXX} \line {Y}}
+}
--- /dev/null
+\version "2.15.6"
+
+\header {
+ texidoc = "Metronome marks aligned on notes do not interfere with
+the positioning of loose columns in other staves. Here the loose
+column supporting the clef is correctly placed immediately before
+the second note in the lower staff."
+}
+
+\score {
+ <<
+ \new Staff \relative c' {
+ c8 c c c
+ \tempo 4 = 60
+ c2
+ }
+ \new Staff \relative c' {
+ c2 \clef bass c2
+ }
+ >>
+ \layout {
+ \context {
+ \Score
+ \override NonMusicalPaperColumn #'stencil = #ly:paper-column::print
+ }
+ }
+}
--- /dev/null
+\header {
+ texidoc = "Only whole, breve, longa and maxima rests are used by default for multi-measure rests."
+}
+
+\version "2.15.2"
+
+\paper {
+ ragged-right = ##t
+ indent = 0
+}
+
+\new Staff {
+ \time 3/8 R4.
+ \time 2/4 R2
+ \time 2/2 R1
+ \time 2/1 R\breve
+ \break
+ \time 4/1 R\longa
+ \time 8/1 R\maxima
+}
--- /dev/null
+\header {
+ texidoc = "Multi-measure rests standard values can be tweaked."
+}
+
+\version "2.15.2"
+\new Staff {
+ \override MultiMeasureRest #'usable-duration-logs = #'(2 1)
+ \time 1/4 R4-"Use non-standard multi-measure rests."
+ \time 2/4 R2
+}
+\new Staff {
+ \override MultiMeasureRest #'round-to-longer-rest = ##t
+ \time 3/2 R1.-"Round to the longer rest." \time 7/2 R\breve..
+}
+++ /dev/null
-\version "2.14.0"
-\header{
-
- texidoc="For longer measure lengths, the breve rest is used."
-
-}
-
-\layout {
- \context {
- \Score
- skipBars = ##t
- }
- ragged-right = ##t
-}
-
-
-{
- \time 8/4
- R1*12
- \time 4/4
- R1*6
-}
-
-
\context {
\Score
\override VerticalAxisGroup #'staff-staff-spacing =
- #'((basic-distance . 20)
- (stretchability . 0))
+ #'((minimum-distance . 20))
}
}
--- /dev/null
+\version "2.15.4"
+
+#(ly:set-option 'warning-as-error #f)
+
+\header {
+ texidoc = "LilyPond does not support multiple concurrent phrasing slurs with the
+parentheses syntax. In this case, warnings will be given and the nested
+slur will not be generated. However, one can can create a second slur with
+a different spanner-id."
+}
+
+altPhSlur = #(make-music 'PhrasingSlurEvent 'span-direction START 'spanner-id "alt")
+altPhSlurEnd = #(make-music 'PhrasingSlurEvent 'span-direction STOP 'spanner-id "alt")
+
+\relative c'' {
+ % This will give warnings ("Already have phrasing slur" and "Cannot end phrasing slur")
+ c4\(\( d4\)\( e4\) f\) |
+ % This will give two overlapping slurs:
+ d\( d\altPhSlur e\) f\altPhSlurEnd |
+
+}
(ly:progress "\n\n~A properties, top ~a rounded to ~a\n\n~a"
what count rnd
(string-join
- (map (lambda (x) (format "~30a: ~6@a" (car x) (cdr x)))
+ (map (lambda (x) (format #f "~30a: ~6@a" (car x) (cdr x)))
(ly:truncate-list!
(sort alist prop-stats>?) count))
"\n"))))
--- /dev/null
+\version "2.15.6"
+
+\header {
+ texidoc = "@code{\\RemoveEmptyStaves} is defined separately from
+context definitions so it can be used outside of @code{\\layout} blocks."
+}
+
+\paper {
+ ragged-right = ##t
+}
+
+\new Staff \RemoveEmptyStaves {
+ c'1 \break
+ r1
+}
\version "2.14.0"
\header {
-texidoc = "Whole and half rests moving outside the staff should get
+texidoc = "Breve, whole and half rests moving outside the staff should get
ledger lines."
}
-\paper { ragged-right = ##t }
+\paper { ragged-right = ##t }
+
+rPos =
+#(define-music-function (parser location y) (number?)
+ #{ \override Rest #'staff-position = #$y #})
{
- \override Rest #'staff-position = #4
- r1 \override Rest #'staff-position = #5
- r1 \override Rest #'staff-position = #6
-
- r1 \override Rest #'staff-position = #-6
- r1 \override Rest #'staff-position = #-7
- r1 \override Rest #'staff-position = #-8
- r1
-
- \override Rest #'staff-position = #6
- r2 \override Rest #'staff-position = #7
- r2 \override Rest #'staff-position = #8
-
- r2 \override Rest #'staff-position = #-4
- r2 \override Rest #'staff-position = #-5
- r2 \override Rest #'staff-position = #-6
- r2
+ \set Score.timing = ##f
+ \rPos #2
+ r\breve \rPos #4
+ r \rPos #5
+ r \rPos #-4
+ r \rPos #-6
+ r \rPos #-7
+ r
+
+ \rPos #2
+ r1 \rPos #4
+ r \rPos #5
+ r \rPos #-6
+ r \rPos #-7
+ r \rPos #-8
+ r
+
+ \rPos #4
+ r2 \rPos #6
+ r \rPos #7
+ r \rPos #-4
+ r \rPos #-6
+ r \rPos #-7
+ r
}
(set! private-note-counter (1+ private-note-counter))
(let ((text (ly:engraver-make-grob engraver 'TextScript event)))
(ly:grob-set-property! text 'text
- (format "~a.~a" instance-id
+ (format #f "~a.~a" instance-id
private-note-counter))))))))))
}
}
--- /dev/null
+\version "2.15.7"
+
+\header {
+
+ texidoc = "@code{\once \set} should change a context property value for just one timestep
+and then return to the previous value."
+
+}
+\relative {
+ \set fingeringOrientations = #'(left)
+ <e-1>1 |
+ \once \set fingeringOrientations = #'(right)
+ <e-1> |
+ <e-1> -"left" |
+
+ \once \set fingeringOrientations = #'(right)
+ <e-1>
+ \once \set fingeringOrientations = #'(up)
+ <e-1>
+ <e-1>-"left"
+
+ \set fingeringOrientations = #'(left)
+ <e-1>
+ \once \set fingeringOrientations = #'(up)
+ \once \set fingeringOrientations = #'(right)
+ <e-1>-"right"
+
+ <e-1>-"left"
+}
--- /dev/null
+\version "2.15.4"
+
+\header {
+ texidoc = "Appoggiatura and acciaccaturas use a different slur than the
+default, so they produce a nested slur without warnings."
+}
+
+\relative c'' {
+ c4( \acciaccatura e8 d4 e4 f) |
+ c4( \appoggiatura e8 d4 e4 f) |
+ c4 \appoggiatura e8 d4 e4 f |
+}
--- /dev/null
+\version "2.15.5"
+
+#(ly:set-option 'warning-as-error #f)
+
+\header {
+ texidoc = "An additional opening slur during a running slur should be ignored
+(and a warning printed), but never influence the slur's extents."
+}
+
+\paper { ragged-right = ##t }
+
+\relative c' {
+ \key fis \major
+ c1(
+ \break
+ a2 b4 c)
+}
+
+\relative c' {
+ \key fis \major
+ c1(
+ \break
+ a2( b4 c)
+% ^ extra SlurEvent
+}
+%% END
\ No newline at end of file
--- /dev/null
+\version "2.15.5"
+
+#(ly:set-option 'warning-as-error #f)
+
+\header {
+ texidoc = "LilyPond does not support multiple concurrent slurs with the
+parentheses syntax. In this case, warnings will be given and the nested
+slur will not be generated. However, one can can create a second slur with
+a different spanner-id."
+}
+
+altSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "alt")
+altSlurEnd = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "alt")
+
+\relative c'' {
+ % This will give warnings ("Already have slur" and "Cannot end slur")
+ c4(( d4)( e4) f) |
+ % This will give two overlapping slurs:
+ d( d\altSlur e) f\altSlurEnd |
+
+}
\version "2.14.0"
\header {
- texidoc="Festival song synthesis output supports
+ texidoc = "Festival song synthesis output supports
lyrics which are not complete words.
"
}
\include "festival.ly"
-#(set! *skip-word* #f)
+#(*skip-word* #f)
\festival #"song-skip-noword.xml" { \tempo 4 = 100 }
-\relative c' { c c g' }
+\relative c' { c4 c g' }
\addlyrics {
twin -- \skip 4
kle
}
+
#(ly:progress "song-skip-noword")
#(ly:progress "~a" (ly:gulp-file "song-skip-noword.xml"))
+
+#(*skip-word* "-skip-")
-\version "2.14.0"
+\version "2.15.2"
-\header { texidoc = "Stanza numbers are put left of their lyric. They
-are aligned in a column." }
-
-\layout { ragged-right = ##t }
+\header {
+ texidoc = "Stanza numbers are put left of their lyric. They
+are aligned in a column."
+}
\relative c'' { r4 r4 c4 c4 }
\addlyrics {
}
\addlyrics {
\skip 2
- \set stanza = "2."
+ \set stanza = \markup { 2. }
FFFooooo8
}
-
-
-
--- /dev/null
+\version "2.15.6"
+\header{
+ texidoc="Stem tremolos count in a note column's horizontal skyline.
+"
+}
+
+
+\relative c'' {
+ \autoBeamOff
+ \override NoteHead #'stencil = #(ly:make-stencil '() '(0 . 0) '(0 . 0))
+ \repeat unfold 8 { b8:32 }
+}
--- /dev/null
+\version "2.15.6"
+
+\header {
+ texidoc = "When the staff-space is increased, the system-start delimiter
+should still be collapsed (i.e. the collapse-height should not give an absolute
+length, but a multiple of staff-spaces)."
+}
+
+\new Staff \with { \override StaffSymbol #'staff-space = #1.4 }
+{
+ a4 b c d
+}
--- /dev/null
+\version "2.15.2"
+
+\header {
+ texidoc = "Text spanners ending on full-measure rests do
+not stop prematurely on preceding note heads."
+}
+
+\relative c'' {
+ a1\startTextSpan
+ b1
+ R1\stopTextSpan
+}
--- /dev/null
+\version "2.15.5"
+
+\header {
+ texidoc = "The pitch of a pitched trill should not trigger a warning for
+ unterminated ties."
+}
+
+\relative c' {
+ \pitchedTrill
+ c1~\startTrillSpan d
+ c1\stopTrillSpan
+}
--- /dev/null
+\version "2.14.0"
+
+\header {
+ texidoc = "The direction of tuplet brackets is the direction
+of the majority of the stems under the bracket, with ties going
+to UP.
+"
+}
+
+\relative c'' {
+ \times 2/3 { r r r }
+ \times 2/3 { r c r }
+ \times 2/3 { r a r }
+ \times 2/3 { c' f,, r }
+ \times 2/3 { f, c'' r }
+ \times 2/3 { a a c }
+ \times 2/3 { c c a }
+ \times 2/3 { a a a }
+ \times 2/3 { c c c }
+}
--- /dev/null
+\version "2.15.6"
+\header {
+
+ texidoc = "Tuplet brackets' outside staff priority can be
+set. Brackets, by default, carry their numbers with them."
+
+}
+
+\relative c'' {
+ % Plain old tuplet
+ \times 2/3 { a8 r a }
+ % With nothing set, collisions abound both horizontally and
+ % vertically
+ \times 2/3 { a8^\espressivo r a^\espressivo }
+ % Setting the staff priority prevents collisions
+ \override TupletBracket #'outside-staff-priority = #1
+ \times 2/3 { a8^\espressivo r a^\espressivo }
+ % Note that, with the outside-staff-priority set, this bracket
+ % should be at the same vertical level as the first one
+ \times 2/3 { a8 r a }
+}
--- /dev/null
+\version "2.15.1"
+\header {
+
+ texidoc = "Tuplet numbers' outside staff priority can be
+set."
+
+}
+
+\relative c'' {
+ \times 2/3 { a8\trill a\trill a\trill }
+ \override TupletNumber #'outside-staff-priority = #1
+ \times 2/3 { a8\trill a\trill a\trill }
+ \override Script #'outside-staff-priority = #2
+ \times 2/3 { a8\trill a\trill a\trill }
+}
if (Page_layout_problem::read_spacing_spec (spec, &min_distance, ly_symbol2scm ("minimum-distance")))
dy = max (dy, min_distance);
- if (include_fixed_spacing)
- dy = max (dy, Page_layout_problem::get_fixed_spacing (elems[j-1], elems[j], spaceable_count, pure, start, end));
-
if (include_fixed_spacing && Page_layout_problem::is_spaceable (elems[j]) && last_spaceable_element)
{
// Spaceable staves may have
System *sys = me->get_system ();
if (sys)
{
- Page_layout_problem layout (NULL, SCM_EOL, scm_list_1 (sys->self_scm ()));
+ Page_layout_problem layout (NULL, SCM_EOL, scm_list_1 (sys->self_scm ()), 0);
layout.solution (true);
}
else
}
}
+bool
+Axis_group_interface::has_outside_staff_parent (Grob *me)
+{
+ return (me
+ ? (scm_is_number (me->get_property ("outside-staff-priority"))
+ || has_outside_staff_parent (me->get_parent (Y_AXIS)))
+ : false);
+}
+
// TODO: it is tricky to correctly handle skyline placement of cross-staff grobs.
// For example, cross-staff beams cannot be formatted until the distance between
// staves is known and therefore any grobs that depend on the beam cannot be placed
Skyline_pair skylines;
for (i = 0; i < elements.size ()
&& !scm_is_number (elements[i]->get_property ("outside-staff-priority")); i++)
- if (!to_boolean (elements[i]->get_property ("cross-staff")))
+ if (!(to_boolean (elements[i]->get_property ("cross-staff")) || has_outside_staff_parent (elements[i])))
add_boxes (elements[i], x_common, y_common, &boxes, &skylines);
SCM padding_scm = me->get_property ("skyline-horizontal-padding");
SCM bt = me->get_property ("text");
SCM chain = Font_interface::text_font_alist_chain (me);
-
SCM stencil = Text_interface::interpret_markup (me->layout ()->self_scm (),
- chain, bt);
-
+ chain, bt);
Stencil *text_stil = unsmob_stencil (stencil);
-
+
Offset z1;
+
for (int i = X_AXIS; i < NO_AXES; i++)
{
Axis a ((Axis)i);
Spanner *me = unsmob_spanner (grob);
Grob *commonx = 0;
vector<Beam_segment> segments = get_beam_segments (me, &commonx);
+ if (!segments.size ())
+ return SCM_EOL;
Interval span;
if (normal_stem_count (me))
}
Direction dir = get_grob_direction (me);
- Real y = head_positions[dir]
+
+ if (!dir)
+ programming_error ("The beam should have a direction by now.");
+
+ Real y = head_positions.linear_combination (dir)
* 0.5 * Staff_symbol_referencer::staff_space (me)
+ dir * get_beam_translation (me) * (multiplicity.length () + 1);
void
Break_align_engraver::acknowledge_break_alignable (Grob_info inf)
{
+ /*
+ Special case for MetronomeMark: filter out items which will be aligned
+ on note heads rather than prefatory material
+ */
+ if (!Item::is_non_musical (inf.item ()))
+ return;
+
if (!align_)
create_alignment (inf);
SCM align_name = item->get_property ("break-align-symbol");
if (!scm_is_symbol (align_name))
return;
-
+
if (!align_)
create_alignment (inf);
#include "breathing-sign.hh"
-#include "staff-symbol-referencer.hh"
-#include "directional-element-interface.hh"
-#include "output-def.hh"
-#include "lookup.hh"
#include "dimensions.hh"
#include "direction.hh"
-#include "text-interface.hh"
+#include "directional-element-interface.hh"
#include "font-interface.hh"
#include "grob.hh"
-
-/*
- TODO: thickness should be a grob property (unit: linethickness)
- rather than hardwired to (staff_space / 6).
-*/
+#include "lookup.hh"
+#include "output-def.hh"
+#include "staff-symbol.hh"
+#include "staff-symbol-referencer.hh"
+#include "text-interface.hh"
/*
UGH : this is full of C&P code. Consolidate! --hwn
set_grob_direction (me, d);
}
- Real inter = Staff_symbol_referencer::staff_space (me) / 2;
- int sz = Staff_symbol_referencer::line_count (me) - 1;
- return scm_from_double (inter * sz * d);
+ Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+ if (staff)
+ {
+ Interval iv = Staff_symbol::line_span (staff);
+ Real inter = Staff_symbol::staff_space (me) / 2;
+ return scm_from_double (inter * iv[d]);
+ }
+
+ return scm_from_double (0.0);
}
ADD_INTERFACE (Breathing_sign,
"A breathing sign.",
-
+
/* properties */
"direction "
);
#include "item.hh"
#include "output-def.hh"
#include "pitch.hh"
-#include "pqueue.hh"
#include "rhythmic-head.hh"
#include "score-engraver.hh"
#include "spanner.hh"
#include "staff-symbol-referencer.hh"
#include "stream-event.hh"
#include "tie.hh"
+#include "tie-column.hh"
#include "warn.hh"
#include "translator.icc"
-/*
- TODO: make matching rest engraver.
-*/
-struct Pending_tie
-{
- Moment when_;
- Stream_event* tie_event_;
- Pending_tie () : tie_event_ (0) {}
-};
-
-static int
-compare (Pending_tie const &a, Pending_tie const &b)
-{
- return compare (a.when_, b.when_);
-}
-
-
/*
How does this work?
class Completion_heads_engraver : public Engraver
{
- vector<Item*> notes_;
- vector<Item*> prev_notes_;
+ vector<Item *> notes_;
+ vector<Item *> prev_notes_;
// Must remember notes for explicit ties.
- vector<Item*> tie_note_candidates_;
- vector<Stream_event*> tie_note_candidate_events_;
- vector<Grob*> ties_;
- PQueue<Pending_tie> pending_ties_;
- vector<Stream_event*> note_events_;
- Stream_event *current_tie_event_;
+ vector<Item *> tie_note_candidates_;
+ vector<Stream_event *> tie_note_candidate_events_;
+ vector<Grob *> ties_;
+ vector<Stream_event *> note_events_;
+ Spanner *tie_column_;
Moment note_end_mom_;
bool is_first_;
Rational left_to_do_;
Rational factor_;
Moment next_barline_moment ();
- Item *make_note_head (Stream_event*);
+ Item *make_note_head (Stream_event *);
public:
TRANSLATOR_DECLARATIONS (Completion_heads_engraver);
void process_music ();
void stop_translation_timestep ();
DECLARE_TRANSLATOR_LISTENER (note);
- DECLARE_TRANSLATOR_LISTENER (tie);
};
void
Completion_heads_engraver::initialize ()
{
is_first_ = false;
- current_tie_event_ = 0;
}
IMPLEMENT_TRANSLATOR_LISTENER (Completion_heads_engraver, note);
Completion_heads_engraver::listen_note (Stream_event *ev)
{
note_events_.push_back (ev);
-
+
is_first_ = true;
Moment now = now_mom ();
Moment musiclen = get_event_length (ev, now);
do_nothing_until_ = Rational (0, 0);
}
-IMPLEMENT_TRANSLATOR_LISTENER (Completion_heads_engraver, tie);
-void
-Completion_heads_engraver::listen_tie (Stream_event *ev)
-{
- is_first_ = true;
- current_tie_event_ = ev;
-}
-
/*
- The duration _until_ the next barline.
+ The duration _until_ the next bar line.
*/
Moment
Completion_heads_engraver::next_barline_moment ()
return (*l - *e);
}
-Item*
+Item *
Completion_heads_engraver::make_note_head (Stream_event *ev)
{
Item *note = make_item ("NoteHead", ev->self_scm ());
if (!is_first_ && !left_to_do_)
return;
- if (current_tie_event_)
- {
- Pending_tie pending;
- pending.when_ = note_end_mom_;
- pending.tie_event_ = current_tie_event_;
- pending_ties_.insert (pending);
- }
-
is_first_ = false;
Moment now = now_mom ();
event->set_property ("length", Moment (note_dur.get_length ()).smobbed_copy ());
event->set_property ("duration-log", scm_from_int (note_dur.duration_log ()));
+ /*
+ The Completion_heads_engraver splits an event into a group of consecutive events.
+ For each event in the group, the property "autosplit-end" denotes whether the current event
+ was truncated during splitting. Based on "autosplit-end", the Tie_engraver decides whether a
+ tie event should be processed.
+ */
+ event->set_property ("autosplit-end",
+ ly_bool2scm (left_to_do_ - note_dur.get_length () > Rational (0)));
+
Item *note = make_note_head (event);
if (need_clone)
event->unprotect ();
notes_.push_back (note);
}
-
- if (pending_ties_.size ()
- && pending_ties_.front().when_ == now_mom())
- {
- for (vsize i = 0; i < tie_note_candidate_events_.size(); i++)
- for (vsize j = 0; j < note_events_.size(); j++)
- {
- Pitch *p = unsmob_pitch (note_events_[j]->get_property ("pitch"));
- Pitch *p_last
- = unsmob_pitch (tie_note_candidate_events_[i]->get_property ("pitch"));
- if (p && p_last && *p == *p_last)
- make_tie (tie_note_candidates_[i], notes_[j]);
- }
- }
-
+
if (prev_notes_.size () == notes_.size ())
{
for (vsize i = 0; i < notes_.size (); i++)
make_tie (prev_notes_[i], notes_[i]);
}
+ if (ties_.size () && !tie_column_)
+ tie_column_ = make_spanner ("TieColumn", ties_[0]->self_scm ());
+
+ if (tie_column_)
+ for (vsize i = ties_.size (); i--;)
+ Tie_column::add_tie (tie_column_, ties_[i]);
+
left_to_do_ -= note_dur.get_length ();
if (left_to_do_)
- get_global_context ()->add_moment_to_process (now.main_part_ + note_dur.get_length());
+ get_global_context ()->add_moment_to_process (now.main_part_ + note_dur.get_length ());
/*
don't do complicated arithmetic with grace notes.
*/
Tie::set_head (p, RIGHT, right);
ties_.push_back (p);
}
-
+
void
Completion_heads_engraver::stop_translation_timestep ()
{
ties_.clear ();
+ tie_column_ = 0;
if (notes_.size ())
prev_notes_ = notes_;
Completion_heads_engraver::start_translation_timestep ()
{
Moment now = now_mom ();
- while (pending_ties_.size() && pending_ties_.front().when_ < now)
- {
- pending_ties_.delmin();
- }
- current_tie_event_ = 0;
if (note_end_mom_.main_part_ <= now.main_part_)
{
tie_note_candidate_events_ = note_events_;
Completion_heads_engraver::Completion_heads_engraver ()
{
+ tie_column_ = 0;
}
ADD_TRANSLATOR (Completion_heads_engraver,
/* doc */
"This engraver replaces @code{Note_heads_engraver}. It plays"
" some trickery to break long notes and automatically tie them"
- " into the next measure."
- ,
+ " into the next measure.",
+
/* create */
"NoteHead "
"Tie "
- ,
+ "TieColumn ",
+
/* read */
- "middleCPosition "
- "measurePosition "
"measureLength "
- ,
+ "measurePosition "
+ "middleCPosition "
+ "timing ",
+
/* write */
"completionBusy "
);
{
bool ragged_right = to_boolean (pscore_->layout ()->c_variable ("ragged-right"));
bool ragged_last = to_boolean (pscore_->layout ()->c_variable ("ragged-last"));
- Column_x_positions col;
vector<Grob*> line (all_.begin () + breaks_[i],
all_.begin () + breaks_[j] + 1);
Page_layout_problem::read_spacing_spec (title_spec, &title_min_distance_, ly_symbol2scm ("minimum-distance"));
SCM footnotes = pb->get_property ("footnotes");
+
if (scm_is_pair (footnotes))
for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s))
- footnotes_.push_back (unsmob_stencil (scm_car (s)));
+ footnotes_.push_back (unsmob_stencil (scm_cadar (s)));
last_column_ = 0;
force_ = 0;
class Dynamic_align_engraver : public Engraver
{
TRANSLATOR_DECLARATIONS (Dynamic_align_engraver);
- DECLARE_TRANSLATOR_LISTENER (break_span);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_ACKNOWLEDGER (dynamic);
DECLARE_ACKNOWLEDGER (footnote_spanner);
private:
void create_line_spanner (Stream_event *cause);
+ void set_spanner_bounds (Spanner *line, bool end);
Spanner *line_;
+ Spanner *ended_line_; // Spanner manually broken, don't use it for new grobs
+ Spanner *current_dynamic_spanner_;
vector<Spanner *> ended_;
vector<Spanner *> started_;
vector<Grob *> scripts_;
vector<Grob *> support_;
set<Spanner *> running_;
-
- bool early_end_;
};
Dynamic_align_engraver::Dynamic_align_engraver ()
{
line_ = 0;
- early_end_ = false;
+ ended_line_ = 0;
+ current_dynamic_spanner_ = 0;
}
ADD_ACKNOWLEDGER (Dynamic_align_engraver, dynamic);
{
if (Spanner::has_interface (info.grob ()))
ended_.push_back (info.spanner ());
+
+ /* If the break flag is set, store the current spanner and let new dynamics
+ * create a new spanner
+ */
+ bool spanner_broken = current_dynamic_spanner_ == info.spanner () &&
+ to_boolean (current_dynamic_spanner_->get_property ("spanner-broken"));
+ if (spanner_broken && line_)
+ {
+ if (ended_line_)
+ programming_error ("already have a force-ended DynamicLineSpanner.");
+ ended_line_ = line_;
+ line_ = 0;
+ current_dynamic_spanner_ = 0;
+ }
}
void
support_.push_back (info.grob ());
}
-IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_align_engraver, break_span);
-void
-Dynamic_align_engraver::listen_break_span (Stream_event *event)
-{
- if (event->in_event_class ("break-dynamic-span-event"))
- early_end_ = true;
-}
-
void
Dynamic_align_engraver::acknowledge_dynamic (Grob_info info)
{
Stream_event *cause = info.event_cause ();
+ // Check whether an existing line spanner has the same direction
+ if (line_ && cause)
+ {
+ Direction line_dir = get_grob_direction (line_);
+ Direction grob_dir = to_dir (cause->get_property ("direction"));
+
+ // If we have an explicit direction for the new dynamic grob
+ // that differs from the current line spanner, break the spanner
+ if (grob_dir && (line_dir != grob_dir))
+ {
+ if (!ended_line_)
+ ended_line_ = line_;
+ line_ = 0;
+ current_dynamic_spanner_ = 0;
+ }
+ }
+
create_line_spanner (cause);
if (Spanner::has_interface (info.grob ()))
{
started_.push_back (info.spanner ());
- /*
- If we are using text spans instead of hairpins and the line
- is hidden, end the alignment spanner early: this allows dynamics
- to be spaced individually instead of being linked together.
- */
- if (info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-text-spanner-interface"))
- && (info.grob ()->get_property ("style") == ly_symbol2scm ("none")))
- early_end_ = true;
+ current_dynamic_spanner_ = info.spanner ();
}
else if (info.item ())
scripts_.push_back (info.item ());
}
void
-Dynamic_align_engraver::stop_translation_timestep ()
+Dynamic_align_engraver::set_spanner_bounds (Spanner *line, bool end)
{
- for (vsize i = 0; i < started_.size (); i++)
- running_.insert (started_[i]);
- for (vsize i = 0; i < ended_.size (); i++)
- {
- Spanner *sp = ended_[i];
-
- set<Spanner *>::iterator it = running_.find (sp);
- if (it != running_.end ())
- running_.erase (it);
- else
- started_[i]->programming_error ("lost track of this dynamic spanner");
- }
-
- bool end = line_ && (running_.empty ()
- || early_end_);
+ if (!line)
+ return;
Direction d = LEFT;
do
{
- if (line_
- && ((d == LEFT && !line_->get_bound (LEFT))
- || (end && d == RIGHT && !line_->get_bound (RIGHT))))
+ if ((d == LEFT && !line->get_bound (LEFT)) ||
+ (end && d == RIGHT && !line->get_bound (RIGHT)))
{
vector<Spanner *> const &spanners
= (d == LEFT) ? started_ : ended_;
else
{
bound = unsmob_grob (get_property ("currentMusicalColumn"));
- if (!early_end_)
- programming_error ("started DynamicLineSpanner but have no left bound");
+ programming_error ("started DynamicLineSpanner but have no left bound");
}
- line_->set_bound (d, bound);
+ line->set_bound (d, bound);
}
}
while (flip (&d) != LEFT);
+}
+
+void
+Dynamic_align_engraver::stop_translation_timestep ()
+{
+ for (vsize i = 0; i < started_.size (); i++)
+ running_.insert (started_[i]);
+ for (vsize i = 0; i < ended_.size (); i++)
+ {
+ Spanner *sp = ended_[i];
+
+ set<Spanner *>::iterator it = running_.find (sp);
+ if (it != running_.end ())
+ running_.erase (it);
+ else
+ started_[i]->programming_error ("lost track of this dynamic spanner");
+ }
- for (vsize i = 0; line_ && i < support_.size (); i++)
+ bool end = line_ && running_.empty ();
+
+ // Set the proper bounds for the current spanner and for a spanner that
+ // is ended now
+ set_spanner_bounds (ended_line_, true);
+ set_spanner_bounds (line_, end);
+ // If the flag is set to break the spanner after the current child, don't
+ // add any more support points (needed e.g. for style=none, where the
+ // invisible spanner should NOT be shifted since we don't have a line).
+ bool spanner_broken = current_dynamic_spanner_ &&
+ to_boolean (current_dynamic_spanner_->get_property ("spanner-broken"));
+ for (vsize i = 0; line_ && !spanner_broken && i < support_.size (); i++)
Side_position_interface::add_support (line_, support_[i]);
if (end)
{
line_ = 0;
- early_end_ = false;
}
+ ended_line_ = 0;
ended_.clear ();
started_.clear ();
scripts_.clear ();
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "warn.hh" // error ()
+#include "font-interface.hh"
+#include "grob-array.hh"
#include "item.hh"
#include "output-def.hh"
-#include "system.hh"
-#include "font-interface.hh"
#include "paper-score.hh"
-#include "grob-array.hh"
+#include "simple-closure.hh"
+#include "system.hh"
+#include "warn.hh" // error ()
LY_DEFINE (ly_grob_property_data, "ly:grob-property-data",
2, 0, 0, (SCM grob, SCM sym),
LY_ASSERT_TYPE (ly_is_symbol, sym, 2);
if (!ly_is_procedure (val)
+ && !is_simple_closure (val)
&& !type_check_assignment (sym, val, ly_symbol2scm ("backend-type?")))
error ("typecheck failed");
#include "engraver.hh"
#include "international.hh"
+#include "item.hh"
#include "note-column.hh"
#include "pointer-group-interface.hh"
#include "side-position-interface.hh"
-#include "stream-event.hh"
#include "spanner.hh"
-#include "item.hh"
+#include "stream-event.hh"
#include "translator.icc"
{
public:
TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver);
- vector<Spanner*> bracket_stack_;
- vector<Stream_event*> events_;
+ vector<Spanner *> bracket_stack_;
+ vector<Stream_event *> events_;
vsize pop_count_;
vsize push_count_;
DECLARE_TRANSLATOR_LISTENER (note_grouping);
};
-ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
-ADD_TRANSLATOR (Horizontal_bracket_engraver,
- /* doc */
- "Create horizontal brackets over notes for musical analysis"
- " purposes.",
-
- /* create */
- "HorizontalBracket ",
-
- /* read */
- "",
-
- /* write */
- ""
- );
-
Horizontal_bracket_engraver::Horizontal_bracket_engraver ()
{
pop_count_ = 0;
void
Horizontal_bracket_engraver::stop_translation_timestep ()
{
- for (int i = pop_count_; i--;)
+ for (vsize i = pop_count_; i--;)
if (bracket_stack_.size ())
bracket_stack_.pop_back ();
pop_count_ = 0;
push_count_ = 0;
+ events_.clear ();
}
+ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
+ADD_TRANSLATOR (Horizontal_bracket_engraver,
+ /* doc */
+ "Create horizontal brackets over notes for musical analysis"
+ " purposes.",
+
+ /* create */
+ "HorizontalBracket ",
+
+ /* read */
+ "",
+
+ /* write */
+ ""
+ );
static Interval rest_of_line_pure_height (Grob *me, int, int);
static Interval part_of_line_pure_height (Grob *me, bool begin, int, int);
+ static bool has_outside_staff_parent (Grob *me);
static Skyline_pair skyline_spacing (Grob *me, vector<Grob*> elements);
static void add_element (Grob *me, Grob *);
static void set_axes (Grob *, Axis, Axis);
INSTANTIATE_COMPARE (Duration, Duration::compare);
DECLARE_UNSMOB (Duration, duration);
+extern SCM Duration_type_p_proc;
+
#endif // DURATION_HH
virtual void finalize ();
DECLARE_ACKNOWLEDGER (rest);
- DECLARE_ACKNOWLEDGER (note_head);
+ DECLARE_ACKNOWLEDGER (ligature_head);
virtual void listen_ligature (Stream_event *ev);
void process_music ();
virtual Spanner *create_ligature_spanner () = 0;
vsize system_count () const;
Real footnote_separator_stencil_height () const;
Real footnote_padding () const;
+ Real footnote_number_raise () const;
Real footnote_footer_padding () const;
Real line_count_penalty (int line_count) const;
int line_count_status (int line_count) const;
vsize system_count_;
Real footnote_separator_stencil_height_;
Real footnote_padding_;
+ Real footnote_number_raise_;
Real footnote_footer_padding_;
int orphan_penalty_;
void create_system_list ();
void find_chunks_and_breaks (Break_predicate, Prob_break_predicate);
SCM make_page (int page_num, bool last) const;
- SCM get_page_configuration (SCM systems, int page_num, bool ragged, bool last);
- SCM draw_page (SCM systems, SCM config, int page_num, bool last);
+ SCM get_page_configuration (SCM systems, int page_num, int footnote_count, bool ragged, bool last);
+ SCM draw_page (SCM systems, SCM config, int page_num, int footnote_num, bool last);
};
#endif /* PAGE_BREAKING_HH */
class Page_layout_problem
{
public:
- Page_layout_problem (Paper_book*, SCM page, SCM systems);
+ Page_layout_problem (Paper_book*, SCM page, SCM systems, int footnote_count);
SCM solution (bool ragged);
void set_header_height (Real);
static bool read_spacing_spec (SCM spec, Real* dest, SCM sym);
static bool is_spaceable (Grob *g);
static SCM get_details (Grob *g);
- static SCM get_footnotes_from_lines (SCM lines, Real padding);
+ static vsize get_footnote_count (SCM lines);
+ static SCM get_footnotes_from_lines (SCM lines, int counter, Paper_book *pb);
static Stencil* get_footnote_separator_stencil (Output_def *paper);
static SCM get_spacing_spec (Grob *before, Grob *after, bool pure, int start, int end);
static Real get_fixed_spacing (Grob *before, Grob *after, int spaceable_index, bool pure, int start, int end);
extern SCM pitch_less_proc;
Pitch pitch_interval (Pitch const &from, Pitch const &to);
+extern SCM Pitch_type_p_proc;
#endif /* PITCH_HH */
{
public:
DECLARE_SCHEME_CALLBACK (constructor, ());
- DECLARE_SCHEME_CALLBACK (once_finalization, (SCM, SCM));
+ DECLARE_SCHEME_CALLBACK (once_finalization, (SCM, SCM, SCM));
DECLARE_CLASSNAME(Property_iterator);
protected:
DECLARE_SCHEME_CALLBACK (calc_slope, (SCM));
DECLARE_SCHEME_CALLBACK (calc_width, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
- DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
DECLARE_SCHEME_CALLBACK (calc_style, (SCM));
+ DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
static Stencil raw_stencil (Grob *, Real slope, Direction stemdir);
static Stencil translated_stencil (Grob*, Real slope);
static Stencil untranslated_stencil (Grob*, Real slope);
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (calc_beaming, (SCM));
DECLARE_SCHEME_CALLBACK (calc_length, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_stem_begin_position, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_end_position, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_info, (SCM));
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
int get_rank () const;
vector<Stencil *> get_footnotes_in_range (vsize st, vsize end);
void get_footnote_grobs_in_range (vector<Grob *> &out, vsize st, vsize end);
- Stencil make_footnote_stencil (Real padding);
+ vector<Grob *> *footnote_grobs ();
+ vsize num_footnotes ();
void do_break_substitution_and_fixup_refpoints ();
void post_processing ();
void populate_footnote_grob_vector ();
item_ = make_item ("KeySignature",
key_event_ ? key_event_->self_scm () : SCM_EOL);
+ /* Use middleCClefPosition rather than middleCPosition, because cue
+ * notes with a different clef will modify middleCPosition. The
+ * Key signature, however, should still be printed at the original
+ * position. */
item_->set_property ("c0-position",
- get_property ("middleCPosition"));
+ get_property ("middleCClefPosition"));
SCM last = get_property ("lastKeySignature");
SCM key = get_property ("keySignature");
"keyAlterationOrder "
"keySignature "
"lastKeySignature "
- "printKeyCancellation ",
+ "printKeyCancellation "
+ "middleCClefPosition ",
/* write */
"keySignature "
using namespace std;
#include "context-def.hh"
+#include "duration.hh"
#include "identifier-smob.hh"
#include "international.hh"
#include "interval.hh"
#include "music-function.hh"
#include "parse-scm.hh"
#include "parser.hh"
+#include "pitch.hh"
#include "source-file.hh"
#include "std-string.hh"
#include "string-convert.hh"
push_extra_token (EXPECT_NO_MORE_ARGS);
for (; scm_is_pair (s); s = scm_cdr (s))
{
- if (scm_car (s) == ly_music_p_proc)
+ SCM cs = scm_car (s);
+
+ if (cs == ly_music_p_proc)
push_extra_token (EXPECT_MUSIC);
- else if (scm_car (s) == ly_lily_module_constant ("markup?"))
+ else if (cs == Pitch_type_p_proc)
+ push_extra_token (EXPECT_PITCH);
+ else if (cs == Duration_type_p_proc)
+ push_extra_token (EXPECT_DURATION);
+ else if (cs == ly_lily_module_constant ("markup?"))
push_extra_token (EXPECT_MARKUP);
- else if (ly_is_procedure (scm_car (s)))
+ else if (ly_is_procedure (cs))
push_extra_token (EXPECT_SCM);
else programming_error ("Function parameter without type-checking predicate");
}
ligature_start_mom_ = now_mom ();
- // TODO: dump cause into make_item/spanner.
+ // TODO: dump cause into make_item/spanner.
// announce_grob (ligature_, events_drul_[START]->self_scm ());
}
}
}
void
-Ligature_engraver::acknowledge_note_head (Grob_info info)
+Ligature_engraver::acknowledge_ligature_head (Grob_info info)
{
if (ligature_)
{
primitives_.push_back (info);
if (info.grob () && brew_ligature_primitive_proc != SCM_EOL)
- {
- info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
- }
+ info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
}
}
Grob *common_y = me->common_refpoint (me->get_bound (dir), Y_AXIS);
if (me->get_bound (dir)->break_status_dir ())
{
- Spanner *next_sp = me->broken_neighbor (dir);
- Item *next_bound = next_sp->get_bound (dir);
-
- if (next_bound->break_status_dir ())
+ if (to_boolean (me->get_property ("simple-Y")))
{
- programming_error ("no note heads for the line spanner on neighbor line?"
- " Confused.");
- me->suicide ();
- return SCM_EOL;
+ Spanner *orig = dynamic_cast<Spanner *>(me->original ());
+ Spanner *extreme = dir == LEFT ? orig->broken_intos_.front () : orig->broken_intos_.back ();
+ Grob *e_bound = extreme->get_bound (dir);
+ Grob *e_common_y = extreme->common_refpoint (e_bound, Y_AXIS);
+ y = e_bound->extent (e_common_y, Y_AXIS).center ();
}
+ else
+ {
+ Spanner *next_sp = me->broken_neighbor (dir);
+ Item *next_bound = next_sp->get_bound (dir);
+
+ if (next_bound->break_status_dir ())
+ {
+ programming_error ("no note heads for the line spanner on neighbor line?"
+ " Confused.");
+ me->suicide ();
+ return SCM_EOL;
+ }
+
+ Spanner *next_bound_parent = parent_spanner (next_bound);
+ Interval next_ext = next_bound->extent (next_bound_parent, Y_AXIS);
- Spanner *next_bound_parent = parent_spanner (next_bound);
- Interval next_ext = next_bound->extent (next_bound_parent, Y_AXIS);
-
- /*
- We want to know what would be the y-position of the next
- bound (relative to my y-parent) if it belonged to the
- same system as this bound. We rely on the fact that the
- y-parent of the next bound is a spanner (probably the
- VerticalAxisGroup of a staff) that extends over the break.
- */
- Spanner *next_bound_parent_on_this_line =
- next_bound_parent->broken_neighbor (other_dir (dir));
-
- if (next_bound_parent_on_this_line)
- {
- Grob *common = me->common_refpoint (next_bound_parent_on_this_line, Y_AXIS);
- Real bound_offset = next_bound_parent_on_this_line->relative_coordinate (common, Y_AXIS);
- y = next_ext.center () + bound_offset - me->relative_coordinate (common, Y_AXIS);
- }
- else
- {
/*
- We fall back to assuming that the distance between
- staves doesn't change over line breaks.
+ We want to know what would be the y-position of the next
+ bound (relative to my y-parent) if it belonged to the
+ same system as this bound. We rely on the fact that the
+ y-parent of the next bound is a spanner (probably the
+ VerticalAxisGroup of a staff) that extends over the break.
*/
- programming_error ("next-bound's parent doesn't extend to this line");
- Grob *next_system = next_bound->get_system ();
- Grob *this_system = me->get_system ();
- y = next_ext.center () + next_bound_parent->relative_coordinate (next_system, Y_AXIS)
- - me->relative_coordinate (this_system, Y_AXIS);
- }
+ Spanner *next_bound_parent_on_this_line =
+ next_bound_parent->broken_neighbor (other_dir (dir));
+
+ if (next_bound_parent_on_this_line)
+ {
+ Grob *common = me->common_refpoint (next_bound_parent_on_this_line, Y_AXIS);
+ Real bound_offset = next_bound_parent_on_this_line->relative_coordinate (common, Y_AXIS);
+ y = next_ext.center () + bound_offset - me->relative_coordinate (common, Y_AXIS);
+ }
+ else
+ {
+ /*
+ We fall back to assuming that the distance between
+ staves doesn't change over line breaks.
+ */
+ programming_error ("next-bound's parent doesn't extend to this line");
+ Grob *next_system = next_bound->get_system ();
+ Grob *this_system = me->get_system ();
+ y = next_ext.center () + next_bound_parent->relative_coordinate (next_system, Y_AXIS)
+ - me->relative_coordinate (this_system, Y_AXIS);
+ }
+ }
}
else
{
{
Spanner *me = dynamic_cast<Spanner *> (unsmob_grob (smob));
+ // Triggers simple-Y calculations
+ bool simple_y = to_boolean (me->get_property ("simple-Y")) && !to_boolean (me->get_property ("cross-staff"));
+
Drul_array<SCM> bounds (me->get_property ("left-bound-info"),
me->get_property ("right-bound-info"));
Drul_array<Real> gaps (0, 0);
Drul_array<bool> arrows (0, 0);
- Drul_array<Real> anchor_align (0, 0);
Drul_array<Stencil *> stencils (0,0);
Drul_array<Grob *> common_y (0, 0);
bounds[d], SCM_BOOL_F), 0.0);
arrows[d] = to_boolean (ly_assoc_get (ly_symbol2scm ("arrow"),
bounds[d], SCM_BOOL_F));
- anchor_align[d] = robust_scm2double (ly_assoc_get (ly_symbol2scm ("anchor-alignment"),
- bounds[d], SCM_BOOL_F), LEFT);
stencils[d] = unsmob_stencil (ly_assoc_get (ly_symbol2scm ("stencil"),
bounds[d], SCM_BOOL_F));
common_y[d] = unsmob_grob (ly_assoc_get (ly_symbol2scm ("common-Y"),
while (flip (&d) != LEFT);
Grob *my_common_y = common_y[LEFT]->common_refpoint (common_y[RIGHT], Y_AXIS);
- do
- span_points[d][Y_AXIS] += common_y[d]->relative_coordinate (my_common_y, Y_AXIS);
- while (flip (&d) != LEFT);
+
+ if (!simple_y)
+ {
+ do
+ span_points[d][Y_AXIS] += common_y[d]->relative_coordinate (my_common_y, Y_AXIS);
+ while (flip (&d) != LEFT);
+ }
Interval normalized_endpoints = robust_scm2interval (me->get_property ("normalized-endpoints"), Interval (0, 1));
Real y_length = span_points[RIGHT][Y_AXIS] - span_points[LEFT][Y_AXIS];
if (stencils[d])
{
- Interval ext = stencils[d]->extent (X_AXIS);
- Real anchor = ext.linear_combination (anchor_align[d]) - ext[LEFT];
- span_points[d][X_AXIS] -= anchor;
-
Stencil s = stencils[d]->translated (span_points[d]);
SCM align = ly_assoc_get (ly_symbol2scm ("stencil-align-dir-y"),
bounds[d], SCM_BOOL_F);
}
line.translate (Offset (-me->relative_coordinate (commonx, X_AXIS),
- -me->relative_coordinate (my_common_y, Y_AXIS)));
+ simple_y ? 0.0 : -me->relative_coordinate (my_common_y, Y_AXIS)));
return line.smobbed_copy ();
"left-bound-info "
"note-columns "
"right-bound-info "
+ "simple-Y "
"thickness "
"to-barline "
);
DECLARE_LISTENER (check_new_context);
bool music_found_;
+ bool lyrics_found_;
Context *lyrics_context_;
Context *music_context_;
SCM lyricsto_voice_name_;
Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
{
music_found_ = false;
+ lyrics_found_ = false;
pending_grace_moment_.set_infinite (1);
lyric_iter_ = 0;
music_context_ = 0;
if (!ok ())
return ;
- // TODO: Check first if type=Voice and if id matches
- Stream_event * ev = unsmob_stream_event (sev);
- if (ev->get_property ("type") != ly_symbol2scm ("Voice"))
- return ;
-
+ // Search for a possible candidate voice to attach the lyrics to. If none
+ // is found, we'll try next time again.
Context *voice = find_voice ();
-
if (voice)
{
set_music_context (voice);
if (new_voice)
set_music_context (new_voice);
+ lyrics_found_ = true;
if (!music_context_)
return;
string name;
if (scm_is_string (voice_name))
- name = ly_scm2string (voice_name);
-
- get_music ()->origin ()->warning (_f ("cannot find Voice `%s'",
- name.c_str ()) + "\n");
+ name = ly_scm2string (voice_name);
+ /* Don't print a warning for empty lyrics (in which case we don't try
+ to find the proper voice, so it will not be found) */
+ if (lyrics_found_)
+ get_music ()->origin ()->warning (_f ("cannot find Voice `%s'",
+ name.c_str ()) + "\n");
}
if (lyric_iter_)
virtual Spanner *create_ligature_spanner ();
virtual void build_ligature (Spanner *ligature, vector<Grob_info> primitives);
DECLARE_TRANSLATOR_LISTENER (ligature);
-
+
public:
TRANSLATOR_DECLARATIONS (Mensural_ligature_engraver);
Mensural_ligature_engraver::Mensural_ligature_engraver ()
{
- brew_ligature_primitive_proc =
+ brew_ligature_primitive_proc =
Mensural_ligature::brew_ligature_primitive_proc;
}
}
ADD_ACKNOWLEDGER (Mensural_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Mensural_ligature_engraver, note_head);
+ADD_ACKNOWLEDGER (Mensural_ligature_engraver, ligature_head);
ADD_TRANSLATOR (Mensural_ligature_engraver,
/* doc */
support_ = g;
text_->set_parent (g, X_AXIS);
}
+ if (bar_ || support_)
+ text_->set_property ("non-musical", SCM_BOOL_T);
}
void
#include "string-convert.hh"
#include "warn.hh"
-#define PITCH_WHEEL_TOP 0x3FFF
#define PITCH_WHEEL_CENTER 0x2000
-#define PITCH_WHEEL_BOTTOM 0x0000
-#define PITCH_WHEEL_RANGE (PITCH_WHEEL_TOP - PITCH_WHEEL_BOTTOM)
+#define PITCH_WHEEL_SEMITONE 0X1000
Midi_item *
Midi_item::get_midi (Audio_item *a)
+ audio_->transposing_.tone_pitch ()) * Rational (2);
tune -= Rational (get_semitone_pitch ());
- tune *= 100;
+ tune *= PITCH_WHEEL_SEMITONE;
return (int) double (tune);
}
int
Midi_note::get_semitone_pitch () const
{
- return int (double ((audio_->pitch_.tone_pitch ()
- + audio_->transposing_.tone_pitch ()) * Rational (2)));
+ double tune = double ((audio_->pitch_.tone_pitch ()
+ + audio_->transposing_.tone_pitch ()) * Rational (2));
+ return int (rint (tune));
}
string
// print warning if fine tuning was needed, HJJ
if (get_fine_tuning () != 0)
{
- finetune = PITCH_WHEEL_CENTER;
- // Move pitch wheel to a shifted position.
- // The pitch wheel range (of 4 semitones) is multiplied by the cents.
- finetune += (PITCH_WHEEL_RANGE *get_fine_tuning ()) / (4 * 100);
+ finetune = PITCH_WHEEL_CENTER + get_fine_tuning ();
str += ::to_string ((char) (0xE0 + channel_));
str += ::to_string ((char) (finetune & 0x7F));
*/
last_rest_->set_property ("measure-count", scm_from_int (num));
- SCM sml = get_property ("measureLength");
- Rational ml = (unsmob_moment (sml)) ? unsmob_moment (sml)->main_part_ : Rational (1);
- if (ml >= Rational (2))
- last_rest_->set_property ("use-breve-rest", SCM_BOOL_T);
-
mmrest_ = 0;
numbers_.clear ();
"Engrave multi-measure rests that are produced with"
" @samp{R}. It reads @code{measurePosition} and"
" @code{internalBarNumber} to determine what number to print"
- " over the @ref{MultiMeasureRest}. Reads @code{measureLength}"
- " to determine whether it should use a whole rest or a breve"
- " rest to represent one measure.",
+ " over the @ref{MultiMeasureRest}.",
/* create */
"MultiMeasureRest "
"internalBarNumber "
"restNumberThreshold "
"currentCommandColumn "
- "measurePosition "
- "measureLength ",
+ "measurePosition ",
/* write */
""
#include "font-interface.hh"
#include "lookup.hh"
#include "misc.hh"
+#include "moment.hh"
#include "output-def.hh"
#include "paper-column.hh" // urg
#include "percent-repeat-item.hh"
return mol.smobbed_copy ();
}
+int
+measure_duration_log (Grob *me)
+{
+ SCM sml = dynamic_cast<Spanner *> (me)->get_bound (LEFT)
+ ->get_property ("measure-length");
+ bool round = to_boolean (me->get_property ("round-to-longer-rest"));
+ Rational ml = (unsmob_moment (sml)) ? unsmob_moment (sml)->main_part_ : Rational (1);
+
+ double duration_log = -log_2 (ml.Rational::to_double ());
+ int measure_duration_log = int (ceil (duration_log));
+ if (round && duration_log - measure_duration_log < 0)
+ measure_duration_log--;
+
+ SCM duration_logs_list = me->get_property ("usable-duration-logs");
+ int closest_list_elt = -15; // -15 is out of range.
+
+ for (int i = 0; i < scm_to_int (scm_length (duration_logs_list)); i++)
+ {
+ int list_elt = scm_to_int (scm_list_ref (duration_logs_list, scm_from_int (i)));
+ int shortest_distance = abs (measure_duration_log - closest_list_elt);
+ int distance = abs (measure_duration_log - list_elt);
+ if (distance < shortest_distance)
+ closest_list_elt = list_elt;
+ }
+
+ return closest_list_elt;
+}
+
Stencil
Multi_measure_rest::symbol_stencil (Grob *me, Real space)
{
Real staff_space = Staff_symbol_referencer::staff_space (me);
Font_metric *musfont = Font_interface::get_default_font (me);
+ int mdl = measure_duration_log (me);
- SCM sml = me->get_property ("use-breve-rest");
if (measures == 1)
{
- if (to_boolean (sml))
- {
- Stencil s = musfont->find_by_name (Rest::glyph_name (me, -1, "", false));
-
- s.translate_axis ((space - s.extent (X_AXIS).length ()) / 2, X_AXIS);
-
- return s;
- }
- else
- {
- Stencil s = musfont->find_by_name (Rest::glyph_name (me, 0, "", true));
-
- /*
- ugh.
- */
- if (Staff_symbol_referencer::get_position (me) == 0.0)
- s.translate_axis (staff_space, Y_AXIS);
-
- s.translate_axis ((space - s.extent (X_AXIS).length ()) / 2, X_AXIS);
+ Stencil s = musfont->find_by_name (Rest::glyph_name (me, mdl, "", true));
+ if (mdl == 0 && Staff_symbol_referencer::get_position (me) == 0.0)
+ s.translate_axis (staff_space, Y_AXIS);
- return s;
- }
+ s.translate_axis ((space - s.extent (X_AXIS).length ()) / 2, X_AXIS);
+ return s;
}
else
return church_rest (me, musfont, measures, space);
{
SCM mols = SCM_EOL;
- /* See Wanske pp. 125 */
int l = measures;
int count = 0;
Real symbols_width = 0.0;
-
- bool use_breve = to_boolean (me->get_property ("use-breve-rest"));
+ SCM duration_logs_list = me->get_property ("usable-duration-logs");
+ int longest_church_rest = 10; // 10 is out of range.
+ for (int i = 0; i < scm_to_int (scm_length (duration_logs_list)); i++)
+ {
+ longest_church_rest = min (longest_church_rest,
+ scm_to_int (scm_list_ref (duration_logs_list,
+ scm_from_int (i))));
+ }
while (l)
+ {
+ int k;
+ int i = longest_church_rest - 1;
+ int length;
+ int mdl = measure_duration_log (me);
+
+ do
+ {
+ i++;
+ length = int (pow (2.0, -i));
+ }
+ while (i <= 0 &&
+ !(l >= length && mdl >= longest_church_rest - i));
+
+ l -= length;
+ k = mdl + i;
+
+ Stencil r (musfont->find_by_name ("rests." + to_string (k)));
+ if (k == 0)
{
- if (use_breve)
- {
- int k;
- if (l >= 2)
- {
- l -= 2;
- k = -2;
- }
- else
- {
- l -= 1;
- k = -1;
- }
-
- Stencil r (musfont->find_by_name ("rests." + to_string (k)));
- symbols_width += r.extent (X_AXIS).length ();
- mols = scm_cons (r.smobbed_copy (), mols);
- }
- else
- {
- int k;
- if (l >= 4)
- {
- l -= 4;
- k = -2;
- }
- else if (l >= 2)
- {
- l -= 2;
- k = -1;
- }
- else
- {
- k = 0;
- l--;
- }
-
- Stencil r (musfont->find_by_name ("rests." + to_string (k)));
- if (k == 0)
- {
- Real staff_space = Staff_symbol_referencer::staff_space (me);
- r.translate_axis (staff_space, Y_AXIS);
- }
- symbols_width += r.extent (X_AXIS).length ();
- mols = scm_cons (r.smobbed_copy (), mols);
- }
- count++;
+ Real staff_space = Staff_symbol_referencer::staff_space (me);
+ r.translate_axis (staff_space, Y_AXIS);
}
+ symbols_width += r.extent (X_AXIS).length ();
+ mols = scm_cons (r.smobbed_copy (), mols);
+ count++;
+ }
/* Make outer padding this much bigger. */
Real outer_padding_factor = 1.5;
"hair-thickness "
"measure-count "
"minimum-length "
+ "round-to-longer-rest "
"spacing-pair "
"thick-thickness "
- "use-breve-rest "
+ "usable-duration-logs "
);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
DECLARE_TRANSLATOR_LISTENER (span_dynamic);
+ DECLARE_TRANSLATOR_LISTENER (break_span);
protected:
virtual void process_music ();
Item *script_;
Stream_event *script_event_;
Stream_event *current_span_event_;
+ bool end_new_spanner_;
};
New_dynamic_engraver::New_dynamic_engraver ()
finished_spanner_ = 0;
current_spanner_ = 0;
accepted_spanevents_drul_.set (0, 0);
+ end_new_spanner_ = false;
}
IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, absolute_dynamic);
ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[d], ev);
}
+IMPLEMENT_TRANSLATOR_LISTENER (New_dynamic_engraver, break_span);
+void
+New_dynamic_engraver::listen_break_span (Stream_event *event)
+{
+ if (event->in_event_class ("break-dynamic-span-event"))
+ {
+ // Case 1: Already have a start dynamic event -> break applies to new
+ // spanner (created later) -> set a flag
+ // Case 2: no new spanner, but spanner already active -> break it now
+ if (accepted_spanevents_drul_[START])
+ end_new_spanner_ = true;
+ else if (current_spanner_)
+ current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
+ }
+}
+
SCM
New_dynamic_engraver::get_property_setting (Stream_event *evt,
char const *evprop,
(start_type + "Text").c_str ());
if (Text_interface::is_markup (text))
current_spanner_->set_property ("text", text);
+ /*
+ If the line of a text spanner is hidden, end the alignment spanner
+ early: this allows dynamics to be spaced individually instead of
+ being linked together.
+ */
+ if (current_spanner_->get_property ("style") == ly_symbol2scm ("none"))
+ current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
}
else
{
current_spanner_ = make_spanner ("Hairpin",
current_span_event_->self_scm ());
}
+ // if we have a break-dynamic-span event right after the start dynamic, break the new spanner immediately
+ if (end_new_spanner_)
+ {
+ current_spanner_->set_property ("spanner-broken", SCM_BOOL_T);
+ end_new_spanner_ = false;
+ }
if (finished_spanner_)
{
if (Hairpin::has_interface (finished_spanner_))
script_event_ = 0;
accepted_spanevents_drul_.set (0, 0);
finished_spanner_ = 0;
+ end_new_spanner_ = false;
}
void
}
return font_list;
-}
+}
\ No newline at end of file
footnote_padding_ = robust_scm2double (pb->paper_->c_variable ("footnote-padding"), 0.0);
footnote_footer_padding_ = robust_scm2double (pb->paper_->c_variable ("footnote-footer-padding"), 0.0);
+ footnote_number_raise_ = (to_boolean (pb->paper_->c_variable ("footnote-auto-numbering"))
+ ? robust_scm2double (pb->paper_->c_variable ("footnote-number-raise"), 0.0)
+ : 0.0);
+
if (systems_per_page_ && (max_systems_per_page_ || min_systems_per_page_))
{
warning (_f ("ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set"));
return footnote_footer_padding_;
}
+Real
+Page_breaking::footnote_number_raise () const
+{
+ return footnote_number_raise_;
+}
+
bool
Page_breaking::too_many_lines (int line_count) const
{
}
SCM
-Page_breaking::get_page_configuration (SCM systems, int page_num, bool ragged, bool last)
+Page_breaking::get_page_configuration (SCM systems, int page_num, int footnote_count, bool ragged, bool last)
{
SCM dummy_page = make_page (page_num, last);
- Page_layout_problem layout (book_, dummy_page, systems);
+ Page_layout_problem layout (book_, dummy_page, systems, footnote_count);
return scm_is_pair (systems) ? layout.solution (ragged) : SCM_EOL;
}
SCM
-Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool last)
+Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, int footnote_num, bool last)
{
// Create a stencil for each system.
SCM paper_systems = SCM_EOL;
p->set_property ("configuration", configuration);
Stencil *foot = unsmob_stencil (p->get_property ("foot-stencil"));
- SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems, footnote_padding ());
- Page_layout_problem::add_footnotes_to_footer (footnotes, foot, unsmob_paper_book (p->get_property ("paper-book")));
+
+ footnote_num = (to_boolean (book_->paper_->c_variable ("reset-footnotes-on-new-page"))
+ ? 0
+ : footnote_num);
+
+ SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems,
+ footnote_num,
+ book_);
+
+ Page_layout_problem::add_footnotes_to_footer (footnotes, foot, book_);
p->set_property ("foot-stencil", foot->smobbed_copy ());
scm_apply_1 (page_stencil, page, SCM_EOL);
// themselves. If this happens before the neighbouring staves have
// been laid out, bad side-effects could happen (in particular,
// Align_interface::align_to_ideal_distances might be called).
- SCM systems_and_configs = SCM_EOL;
-
+ SCM systems_configs_fncounts = SCM_EOL;
+ vsize footnote_count = 0;
+
for (vsize i = 0; i < lines_per_page.size (); i++)
{
int page_num = i + first_page_number;
bool rag = ragged () || (bookpart_last_page && ragged_last ());
SCM line_count = scm_from_int (lines_per_page[i]);
SCM lines = scm_list_head (systems, line_count);
- SCM config = get_page_configuration (lines, page_num, rag, bookpart_last_page);
-
- systems_and_configs = scm_cons (scm_cons (lines, config), systems_and_configs);
+ int fn_lines = Page_layout_problem::get_footnote_count (lines);
+ SCM config = get_page_configuration (lines, page_num, footnote_count, rag, bookpart_last_page);
+
+ systems_configs_fncounts = scm_cons (scm_list_3 (lines, config, scm_from_int ((int)footnote_count)), systems_configs_fncounts);
+ footnote_count += fn_lines;
systems = scm_list_tail (systems, line_count);
}
// Now it's safe to make the pages.
int page_num = first_page_number + lines_per_page.size () - 1;
- for (SCM s = systems_and_configs; scm_is_pair (s); s = scm_cdr (s))
+ for (SCM s = systems_configs_fncounts; scm_is_pair (s); s = scm_cdr (s))
{
SCM lines = scm_caar (s);
- SCM config = scm_cdar (s);
-
- bool bookpart_last_page = (s == systems_and_configs);
- SCM page = draw_page (lines, config, page_num, bookpart_last_page);
+ SCM config = scm_cadar (s);
+ int footnote_num = scm_to_int (scm_caddar (s));
+ bool bookpart_last_page = (s == systems_configs_fncounts);
+ SCM page = draw_page (lines, config, page_num, footnote_num, bookpart_last_page);
/* collect labels */
SCM page_num_scm = scm_from_int (page_num);
for (SCM l = lines ; scm_is_pair (l) ; l = scm_cdr (l))
#include "system.hh"
#include "text-interface.hh"
+/*
+ Returns the number of footntoes associated with a given line.
+*/
+
+vsize
+Page_layout_problem::get_footnote_count (SCM lines)
+{
+ vsize fn_count = 0;
+ for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
+ {
+ if (Grob *g = unsmob_grob (scm_car (s)))
+ {
+ System *sys = dynamic_cast<System *> (g);
+ if (!sys)
+ {
+ programming_error ("got a grob for footnotes that wasn't a System");
+ continue;
+ }
+ fn_count += sys->num_footnotes ();
+ }
+ else if (Prob *p = unsmob_prob (scm_car (s)))
+ {
+ SCM stencils = p->get_property ("footnotes");
+ if (stencils == SCM_EOL)
+ continue;
+ for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
+ fn_count++;
+ }
+ }
+
+ return fn_count;
+}
+
/*
Returns a stencil for the footnote of each system. This stencil may
itself be comprised of several footnotes.
+
+ This is a long function, but it seems better to keep it intact rather than
+ splitting it into parts.
*/
SCM
-Page_layout_problem::get_footnotes_from_lines (SCM lines, Real padding)
+Page_layout_problem::get_footnotes_from_lines (SCM lines, int counter, Paper_book *pb)
{
+ /*
+ first, we have to see how many footnotes are on this page.
+ we need to do this first so that we can line them up
+ */
+
+ Output_def *paper = pb->paper_;
+
+ if (!paper)
+ {
+ programming_error ("Cannot get footnotes because there is no valid paper block.");
+ return SCM_EOL;
+ }
+
+ SCM number_footnote_table = pb->top_paper ()->c_variable ("number-footnote-table");
+ if (!scm_is_pair (number_footnote_table))
+ number_footnote_table = SCM_EOL;
+ SCM numbering_function = paper->c_variable ("footnote-numbering-function");
+ SCM layout = paper->self_scm ();
+ SCM props = scm_call_1 (ly_lily_module_constant ("layout-extract-page-properties"),
+ paper->self_scm ());
+ Real padding = robust_scm2double (paper->c_variable ("footnote-padding"), 0.0);
+ Real number_raise = robust_scm2double (paper->c_variable ("footnote-number-raise"), 0.0);
+
+ vsize fn_count = get_footnote_count (lines);
+
+ // now, make the footnote stencils with the numbering function
+ SCM numbers = SCM_EOL;
+ SCM in_text_numbers = SCM_EOL;
+ bool do_numbering = to_boolean (paper->c_variable ("footnote-auto-numbering"));
+ // if there's no numbering, skip all this
+ /*
+ TODO: This recalculates numbering every time this function is called, including once
+ after the balloon prints are called. Although it is not a huge computational drain,
+ it'd be more elegant to turn this calculation off when it is no longer needed.
+
+ In a separate commit, it'd be nice to streamline the way that page layout property
+ is handled so that the process of building `config's in page-breaking does result
+ in duplicated work, either by making this process less complicated or (preferably)
+ by passing its results downstream.
+ */
+ if (do_numbering)
+ {
+ vector<SCM> footnote_number_markups; // Holds the numbering markups.
+ vector<Stencil *> footnote_number_stencils; // Holds translated versions of the stencilized numbering markups.
+ for (vsize i = 0; i < fn_count; i++)
+ {
+ SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
+ Stencil *s = unsmob_stencil (Text_interface::interpret_markup (layout, props, markup));
+ if (!s)
+ {
+ programming_error ("Your numbering function needs to return a stencil.");
+ markup = SCM_EOL;
+ s = new Stencil (Box (Interval (0,0), Interval (0,0)), SCM_EOL);
+ }
+ footnote_number_markups.push_back (markup);
+ footnote_number_stencils.push_back (s);
+ counter++;
+ }
+
+ // find the maximum X_AXIS length
+ Real max_length = -infinity_f;
+ for (vsize i = 0; i < fn_count; i++)
+ max_length = max (max_length, footnote_number_stencils[i]->extent (X_AXIS).length ());
+
+ /*
+ translate each stencil such that it attains the correct maximum length and bundle the
+ footnotes into a scheme object.
+ */
+ SCM *tail = &numbers;
+ SCM *in_text_tail = &in_text_numbers;
+
+ for (vsize i = 0; i < fn_count; i++)
+ {
+ *in_text_tail = scm_cons (footnote_number_markups[i], SCM_EOL);
+ in_text_tail = SCM_CDRLOC (*in_text_tail);
+ footnote_number_stencils[i]->translate_axis (max_length - footnote_number_stencils[i]->extent (X_AXIS).length (), X_AXIS);
+ *tail = scm_cons (footnote_number_stencils[i]->smobbed_copy (), SCM_EOL);
+ tail = SCM_CDRLOC (*tail);
+ }
+ }
+ // build the footnotes
+
SCM footnotes = SCM_EOL;
- // ugh...code dup from the Page_layout_problem constructor
+
for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
{
+ // Take care of musical systems.
if (Grob *g = unsmob_grob (scm_car (s)))
{
System *sys = dynamic_cast<System *> (g);
programming_error ("got a grob for footnotes that wasn't a System");
continue;
}
- footnotes = scm_cons (sys->make_footnote_stencil (padding).smobbed_copy (), footnotes);
+ Stencil mol;
+
+ for (vsize i = 0; i < sys->footnote_grobs ()->size (); i++)
+ {
+ Grob *footnote = sys->footnote_grobs ()->at (i);
+ SCM footnote_markup = footnote->get_property ("footnote-text");
+ if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
+ if (orig->is_broken ())
+ footnote_markup = orig->broken_intos_[0]->get_property ("footnote-text");
+
+ if (!Text_interface::is_markup (footnote_markup))
+ continue;
+
+ SCM props = scm_call_1 (ly_lily_module_constant ("layout-extract-page-properties"),
+ paper->self_scm ());
+
+ SCM footnote_stl = Text_interface::interpret_markup (paper->self_scm (),
+ props, footnote_markup);
+
+ Stencil *footnote_stencil = unsmob_stencil (footnote_stl);
+ if (do_numbering)
+ {
+ SCM annotation_scm = scm_car (in_text_numbers);
+ footnote->set_property ("text", annotation_scm);
+ if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
+ {
+ orig->set_property ("text", annotation_scm);
+ if (orig->is_broken ())
+ for (vsize i = 0; i < orig->broken_intos_.size (); i++)
+ orig->broken_intos_[i]->set_property ("text", annotation_scm);
+ }
+
+ Stencil *annotation = unsmob_stencil (scm_car (numbers));
+ annotation->translate_axis (footnote_stencil->extent (Y_AXIS)[UP] + number_raise - annotation->extent(Y_AXIS)[UP], Y_AXIS);
+ footnote_stencil->add_at_edge (X_AXIS, LEFT, *annotation, 0.0);
+ numbers = scm_cdr (numbers);
+ in_text_numbers = scm_cdr (in_text_numbers);
+ }
+ mol.add_at_edge (Y_AXIS, DOWN, *footnote_stencil, padding);
+ }
+ footnotes = scm_cons (mol.smobbed_copy (), footnotes);
}
+ // Take care of top-level markups
else if (Prob *p = unsmob_prob (scm_car (s)))
{
SCM stencils = p->get_property ("footnotes");
Stencil footnote_stencil;
for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
- footnote_stencil.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (scm_car (st)), padding);
+ {
+ Stencil mol;
+ Stencil *footnote = unsmob_stencil (scm_cadar (st));
+ mol.add_stencil (*footnote);
+ if (do_numbering)
+ {
+ Stencil *annotation = unsmob_stencil (scm_car (numbers));
+ SCM in_text_annotation = scm_car (in_text_numbers);
+ SCM in_text_stencil = Text_interface::interpret_markup (layout, props, in_text_annotation);
+ if (!unsmob_stencil (in_text_stencil))
+ in_text_stencil = SCM_EOL;
+ number_footnote_table = scm_cons (scm_cons (scm_caar (st), in_text_stencil), number_footnote_table);
+ annotation->translate_axis (mol.extent (Y_AXIS)[UP] + number_raise - annotation->extent(Y_AXIS)[UP], Y_AXIS);
+ mol.add_at_edge (X_AXIS, LEFT, *annotation, 0.0);
+ numbers = scm_cdr (numbers);
+ in_text_numbers = scm_cdr (in_text_numbers);
+ }
+ footnote_stencil.add_at_edge (Y_AXIS, DOWN, mol, padding);
+ }
footnotes = scm_cons (footnote_stencil.smobbed_copy (), footnotes);
}
}
+ // note that this line of code doesn't do anything if numbering isn't turned on
+ pb->top_paper ()->set_variable (ly_symbol2scm ("number-footnote-table"), number_footnote_table);
if (!scm_is_pair (footnotes))
return SCM_EOL;
footnotes_found = true;
}
}
-
+
if (footnotes_found)
{
Stencil *separator = get_footnote_separator_stencil (pb->paper_);
}
}
-Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems)
+Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems, int footnote_count)
: bottom_skyline_ (DOWN)
{
Prob *page = unsmob_prob (page_scm);
{
Stencil *head = unsmob_stencil (page->get_property ("head-stencil"));
Stencil *foot = unsmob_stencil (page->get_property ("foot-stencil"));
-
- Real footnote_padding = 0.0;
+
if (pb && pb->paper_)
- footnote_padding = robust_scm2double (pb->paper_->c_variable ("footnote-padding"), 0.0);
- SCM footnotes = get_footnotes_from_lines (systems, footnote_padding);
- add_footnotes_to_footer (footnotes, foot, pb);
-
+ {
+ if (to_boolean (pb->paper_->c_variable ("reset-footnotes-on-new-page")))
+ footnote_count = 0;
+ SCM footnotes = get_footnotes_from_lines (systems, footnote_count, pb);
+ add_footnotes_to_footer (footnotes, foot, pb);
+ }
+ else
+ warning ("A page layout problem has been initiated that cannot accommodate footnotes.");
+
header_height_ = head ? head->extent (Y_AXIS).length () : 0;
footer_height_ = foot ? foot->extent (Y_AXIS).length () : 0;
page_height_ = robust_scm2double (page->get_property ("paper-height"), 100);
return robust_scm2double (cached, 0.0);
}
- SCM spec = Page_layout_problem::get_spacing_spec (before, after, pure, start, end);
Real ret = -infinity_f;
- Real stretchability = 0;
- if (Page_layout_problem::read_spacing_spec (spec, &stretchability, ly_symbol2scm ("stretchability"))
- && stretchability == 0)
- Page_layout_problem::read_spacing_spec (spec, &ret, ly_symbol2scm ("basic-distance"));
// If we're pure, then paper-columns have not had their systems set,
// and so elts[i]->get_system () is unreliable.
// Cache the result. As above, we ignore "end."
if (pure)
after_sp->cache_pure_property (cache_symbol, start, 0, scm_from_double (ret));
-
+
return ret;
}
spring->set_default_strength ();
if (read_spacing_spec (spec, &stretch, ly_symbol2scm ("stretchability")))
- {
- spring->set_inverse_stretch_strength (stretch);
- spring->set_inverse_compress_strength (stretch);
- }
+ spring->set_inverse_stretch_strength (stretch);
}
vector<Grob*>
footnote_height += (has_footnotes_
? 0.0
: (breaker_->footnote_separator_stencil_height ()
- + breaker_->footnote_padding ()));
+ + breaker_->footnote_padding ()
+ + breaker_->footnote_number_raise ()));
has_footnotes_ = true;
Interval extent = line.footnotes_[i]->extent (Y_AXIS);
PangoFontDescription const *description,
Real output_scale)
{
+ // This line looks stupid, but if we don't initialize physical_font_tab_ before
+ // we allocate memory in scm_c_make_hash_table, then that could trigger a garbage
+ // collection.
+ physical_font_tab_ = SCM_EOL;
physical_font_tab_ = scm_c_make_hash_table (11);
PangoDirection pango_dir = PANGO_DIRECTION_LTR;
context_ = pango_context_new ();
ps->set_property ("first-markup-line", SCM_BOOL_F);
paper_system_set_stencil (ps, *unsmob_stencil (t));
-
+
SCM footnotes = get_footnotes (unsmob_stencil (t)->expr ());
ps->set_property ("footnotes", footnotes);
ps->set_property ("is-title", SCM_BOOL_T);
*/
#include "paper-system.hh"
+#include "international.hh"
#include "item.hh"
Prob *
for (SCM x = scm_cdr (expr); scm_is_pair (x); x = scm_cdr (x))
{
SCM footnote = get_footnotes (scm_car (x));
- if (scm_is_pair (footnote))
- {
- for (SCM y = footnote; scm_is_pair (y); y = scm_cdr (y))
- {
- *tail = scm_cons (scm_car (y), SCM_EOL);
- tail = SCM_CDRLOC (*tail);
- }
- }
- else if (SCM_EOL != footnote)
+ if (SCM_EOL != footnote)
{
*tail = scm_cons (footnote, SCM_EOL);
tail = SCM_CDRLOC (*tail);
}
}
- return out;
+ return scm_append (out);
}
if (head == ly_symbol2scm ("translate-stencil"))
return get_footnotes (scm_caddr (expr));
if (head == ly_symbol2scm ("footnote"))
- return scm_cadr (expr);
+ return scm_list_1 (scm_cdr (expr));
return SCM_EOL;
}
/* Artificial tokens, for more generic function syntax */
%token <i> EXPECT_MARKUP;
%token <i> EXPECT_MUSIC;
+%token <i> EXPECT_PITCH;
+%token <i> EXPECT_DURATION;
%token <i> EXPECT_SCM;
%token <i> EXPECT_MARKUP_LIST
/* After the last argument. */
/* Music */
%type <scm> composite_music
%type <scm> grouped_music_list
+%type <scm> closed_music
+%type <scm> open_music
%type <scm> music
%type <scm> prefix_composite_music
%type <scm> repeated_music
%type <scm> full_markup_list
%type <scm> function_scm_argument
%type <scm> function_arglist
-%type <scm> function_arglist_music_last
%type <scm> function_arglist_nonmusic_last
-%type <scm> function_arglist_nonmusic
+%type <scm> closed_function_arglist
+%type <scm> open_function_arglist
%type <scm> identifier_init
%type <scm> lilypond_header
%type <scm> lilypond_header_body
%type <scm> mode_changing_head
%type <scm> mode_changing_head_with_context
%type <scm> multiplied_duration
-%type <scm> music_function_identifier_musicless_prefix
%type <scm> music_function_event
+%type <scm> music_function_event_arglist
%type <scm> music_function_chord_body
+%type <scm> music_function_chord_body_arglist
%type <scm> new_chord
%type <scm> new_lyrics
%type <scm> number_expression
music:
simple_music
| composite_music
+ | MUSIC_IDENTIFIER
;
alternative_music:
simple_music:
event_chord
- | MUSIC_IDENTIFIER
| music_property_def
| context_change
;
| grouped_music_list { $$ = $1; }
;
+/* Music that can't be followed by additional events or durations */
+closed_music:
+ MUSIC_IDENTIFIER
+ | grouped_music_list
+ ;
+
+/* Music that potentially accepts additional events or durations */
+open_music:
+ simple_music
+ | prefix_composite_music
+ ;
+
grouped_music_list:
simultaneous_music { $$ = $1; }
| sequential_music { $$ = $1; }
MUSIC_FUNCTION EXPECT_MUSIC EXPECT_SCM EXPECT_SCM EXPECT_NO_MORE_ARGS
and this rule returns the reversed list of arguments. */
-function_arglist_music_last:
- EXPECT_MUSIC function_arglist music {
- $$ = scm_cons ($3, $2);
- }
+
+function_arglist:
+ closed_function_arglist
+ | open_function_arglist
;
-function_arglist_nonmusic_last:
- EXPECT_MARKUP function_arglist full_markup {
+open_function_arglist:
+ EXPECT_MUSIC function_arglist open_music {
$$ = scm_cons ($3, $2);
}
- | EXPECT_MARKUP function_arglist simple_string {
- $$ = scm_cons ($3, $2);
- }
- | EXPECT_SCM function_arglist function_scm_argument {
+ ;
+
+/* a closed argument list is one that does not end in a music
+ expression that could still take a duration or event */
+
+closed_function_arglist:
+ function_arglist_nonmusic_last
+ | EXPECT_MUSIC function_arglist closed_music {
$$ = scm_cons ($3, $2);
- }
+ }
;
-function_arglist_nonmusic: EXPECT_NO_MORE_ARGS {
+function_arglist_nonmusic_last:
+ EXPECT_NO_MORE_ARGS {
+ /* This is for 0-ary functions, so they don't need to
+ read a lookahead token */
$$ = SCM_EOL;
}
- | EXPECT_MARKUP function_arglist_nonmusic full_markup {
+ | EXPECT_MARKUP function_arglist full_markup {
$$ = scm_cons ($3, $2);
}
- | EXPECT_MARKUP function_arglist_nonmusic simple_string {
+ | EXPECT_MARKUP function_arglist simple_string {
$$ = scm_cons ($3, $2);
}
- | EXPECT_SCM function_arglist_nonmusic function_scm_argument {
- $$ = scm_cons ($3, $2);
+ | EXPECT_PITCH function_arglist pitch {
+ $$ = scm_cons ($3, $2);
}
- ;
-
-function_arglist: EXPECT_NO_MORE_ARGS {
- /* This is for 0-ary functions, so they don't need to
- read a lookahead token */
- $$ = SCM_EOL;
+ | EXPECT_DURATION closed_function_arglist duration_length {
+ $$ = scm_cons ($3, $2);
+ }
+ | EXPECT_SCM function_arglist function_scm_argument {
+ $$ = scm_cons ($3, $2);
}
- | function_arglist_music_last
- | function_arglist_nonmusic_last
;
generic_prefix_music_scm:
MUSIC_FUNCTION function_arglist {
- $$ = ly_append2 (scm_list_2 ($1, make_input (@$)), scm_reverse_x ($2, SCM_EOL));
+ $$ = scm_cons ($1, scm_cons (make_input (@$), scm_reverse_x ($2, SCM_EOL)));
}
;
new_lyrics:
ADDLYRICS { PARSER->lexer_->push_lyric_state (); }
/*cont */
- grouped_music_list {
+ closed_music {
/* Can also use music at the expensive of two S/Rs similar to
\repeat \alternative */
PARSER->lexer_->pop_state ();
$$ = scm_cons ($3, SCM_EOL);
}
- | ADDLYRICS {
- PARSER->lexer_->push_lyric_state (); }
- MUSIC_IDENTIFIER {
- PARSER->lexer_->pop_state ();
- $$ = scm_cons ($3, SCM_EOL);
- }
- | new_lyrics ADDLYRICS {
- PARSER->lexer_->push_lyric_state ();
- } grouped_music_list {
- PARSER->lexer_->pop_state ();
- $$ = scm_cons ($4, $1);
- }
| new_lyrics ADDLYRICS {
PARSER->lexer_->push_lyric_state ();
- } MUSIC_IDENTIFIER {
+ } closed_music {
PARSER->lexer_->pop_state ();
$$ = scm_cons ($4, $1);
}
;
re_rhythmed_music:
- grouped_music_list new_lyrics {
- $$ = MAKE_SYNTAX ("add-lyrics", @$, $1, scm_reverse_x ($2, SCM_EOL));
- }
- | MUSIC_IDENTIFIER new_lyrics {
+ closed_music new_lyrics {
$$ = MAKE_SYNTAX ("add-lyrics", @$, $1, scm_reverse_x ($2, SCM_EOL));
}
| LYRICSTO simple_string {
scalar: string {
$$ = $1;
}
- | LYRICS_STRING {
+ | lyric_element {
$$ = $1;
}
| bare_number {
}
| DRUM_PITCH post_events {
Music *n = MY_MAKE_MUSIC ("NoteEvent", @$);
- n->set_property ("duration", $2);
n->set_property ("drum-type", $1);
if (scm_is_pair ($2)) {
}
;
-music_function_identifier_musicless_prefix: MUSIC_FUNCTION {
- SCM sig = scm_object_property (yylval.scm, ly_symbol2scm ("music-function-signature"));
- if (scm_is_pair (sig) && to_boolean (scm_memq (ly_music_p_proc, scm_cdr (scm_reverse (sig)))))
- {
- PARSER->parser_error (@$, "Music function applied to event may not have a Music argument, except as the last argument.");
- }
+/* We can't accept a music argument, not even a closed one,
+ * immediately before chord_body_elements, otherwise a function \fun
+ * with a signature of two music arguments can't be sorted out
+ * properly in a construct like
+ * <\fun { c } \fun { c } c>
+ * The second call could be interpreted either as a chord constituent
+ * or a music expression.
+ */
+
+music_function_chord_body_arglist:
+ function_arglist_nonmusic_last
+ | EXPECT_MUSIC music_function_chord_body_arglist chord_body_element {
+ $$ = scm_cons ($3, $2);
}
;
music_function_chord_body:
- /* We could allow chord functions to have multiple music arguments,
- but it's more consistent with music_function_event if we
- prohibit it here too */
- music_function_identifier_musicless_prefix EXPECT_MUSIC function_arglist_nonmusic chord_body_element {
- $$ = ly_append2 (scm_list_2 ($1, make_input (@$)), scm_reverse_x ($3, scm_list_1 ($4)));
+ MUSIC_FUNCTION music_function_chord_body_arglist {
+ $$ = scm_cons ($1, scm_cons (make_input (@$), scm_reverse_x ($2, SCM_EOL)));
}
- | music_function_identifier_musicless_prefix function_arglist_nonmusic {
- $$ = ly_append2 (scm_list_2 ($1, make_input (@$)), scm_reverse_x ($2, SCM_EOL));
+ ;
+
+/* We could accept a closed music argument before the post events
+ * indicated by a trailing argument list. For symmetry with chord
+ * bodies and in order to avoid too tricky and complex behavior, we
+ * refrain from doing so.
+ */
+music_function_event_arglist:
+ function_arglist_nonmusic_last
+ | EXPECT_MUSIC music_function_event_arglist post_event {
+ $$ = scm_cons ($3, $2);
}
;
music_function_event:
- /* Post-events can only have the last argument as music, without this
- restriction we get a shift/reduce conflict from e.g.
- c8-\partcombine c8 -. */
- music_function_identifier_musicless_prefix EXPECT_MUSIC function_arglist_nonmusic post_event {
- $$ = ly_append2 (scm_list_2 ($1, make_input (@$)), scm_reverse_x ($3, scm_list_1 ($4)));
- }
- | music_function_identifier_musicless_prefix function_arglist_nonmusic {
- $$ = ly_append2 (scm_list_2 ($1, make_input (@$)), scm_reverse_x ($2, SCM_EOL));
+ MUSIC_FUNCTION music_function_event_arglist {
+ $$ = scm_cons ($1, scm_cons (make_input (@$), scm_reverse_x ($2, SCM_EOL)));
}
;
#include "translator.icc"
-/*
- It is possible that a slur starts and ends on the same note. At
- least, it is for phrasing slurs: a note can be both beginning and
- ending of a phrase.
-
-*/
/*
NOTE NOTE NOTE
- This is largely similar to Slur_engraver. Check if fixes apply there too.
+ This is largely similar to Slur_engraver. Check if fixes
+ apply there too.
(on principle, engravers don't use inheritance for code sharing)
*/
+
+/*
+ It is possible that a slur starts and ends on the same note. At
+ least, it is for phrasing slurs: a note can be both beginning and
+ ending of a phrase.
+
+*/
class Phrasing_slur_engraver : public Engraver
{
- Drul_array<Stream_event *> events_;
- Stream_event *running_slur_start_;
+ vector<Stream_event *> start_events_;
+ vector<Stream_event *> stop_events_;
vector<Grob*> slurs_;
vector<Grob*> end_slurs_;
protected:
- void acknowledge_extra_object (Grob_info);
+ DECLARE_TRANSLATOR_LISTENER (phrasing_slur);
DECLARE_ACKNOWLEDGER (accidental);
DECLARE_ACKNOWLEDGER (fingering);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_ACKNOWLEDGER (text_script);
DECLARE_ACKNOWLEDGER (tie);
DECLARE_ACKNOWLEDGER (tuplet_number);
- DECLARE_TRANSLATOR_LISTENER (phrasing_slur);
+ void acknowledge_extra_object (Grob_info);
void stop_translation_timestep ();
- virtual void finalize ();
void process_music ();
+ virtual void finalize ();
+
+
public:
TRANSLATOR_DECLARATIONS (Phrasing_slur_engraver);
};
Phrasing_slur_engraver::Phrasing_slur_engraver ()
{
- events_[START] = events_[STOP] = 0;
}
IMPLEMENT_TRANSLATOR_LISTENER (Phrasing_slur_engraver, phrasing_slur);
void
Phrasing_slur_engraver::listen_phrasing_slur (Stream_event *ev)
{
- /*
- Let's not start more than one slur per moment.
- */
Direction d = to_dir (ev->get_property ("span-direction"));
if (d == START)
- ASSIGN_EVENT_ONCE (events_[START], ev);
- else if (d == STOP && !slurs_.empty ())
- ASSIGN_EVENT_ONCE (events_[STOP], ev);
+ start_events_.push_back(ev);
+ else if (d == STOP)
+ stop_events_.push_back(ev);
+ else ev->origin ()->warning (_f ("direction of %s invalid: %d",
+ "phrasing-slur-event", int (d)));
}
void
}
void
-Phrasing_slur_engraver::acknowledge_text_script (Grob_info info)
+Phrasing_slur_engraver::acknowledge_tuplet_number (Grob_info info)
{
acknowledge_extra_object (info);
}
}
void
-Phrasing_slur_engraver::acknowledge_tie (Grob_info info)
+Phrasing_slur_engraver::acknowledge_text_script (Grob_info info)
{
acknowledge_extra_object (info);
}
void
-Phrasing_slur_engraver::acknowledge_tuplet_number (Grob_info info)
+Phrasing_slur_engraver::acknowledge_tie (Grob_info info)
{
acknowledge_extra_object (info);
}
void
Phrasing_slur_engraver::finalize ()
{
- if (slurs_.size ())
- slurs_[0]->warning (_ ("unterminated phrasing slur"));
+ for (vsize i = 0; i < slurs_.size (); i++)
+ {
+ slurs_[i]->warning (_ ("unterminated phrasing slur"));
+ slurs_[i]->suicide ();
+ }
}
void
Phrasing_slur_engraver::process_music ()
{
- if (events_[STOP])
+ for (vsize i = 0; i < stop_events_.size (); i++)
{
- end_slurs_ = slurs_;
- slurs_.clear ();
+ Stream_event *ev = stop_events_[i];
+ string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+
+ // Find the slur that is ended with this event (by checking the spanner-id)
+ bool ended = false;
+ for (vsize j = slurs_.size (); j--;)
+ {
+ if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
+ {
+ ended = true;
+ end_slurs_.push_back (slurs_[j]);
+ slurs_.erase (slurs_.begin () + j);
+ }
+ }
+ if (!ended)
+ ev->origin ()->warning (_ ("cannot end phrasing slur"));
}
- if (events_[START] && slurs_.empty ())
+ for (vsize i = 0; i < start_events_.size (); i++)
{
- Stream_event *ev = events_[START];
-
- Grob *slur = make_spanner ("PhrasingSlur", events_[START]->self_scm ());
- Direction updown = to_dir (ev->get_property ("direction"));
- if (updown)
- set_grob_direction (slur, updown);
-
- slurs_.push_back (slur);
+ Stream_event *ev = start_events_[i];
+ string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+ bool have_slur = false;
+ // Check if we already have a slur with the same spanner-id.
+ // In that case, don't create a new slur, but print a warning
+ for (vsize i = 0; i < slurs_.size (); i++)
+ have_slur = have_slur || (id == robust_scm2string (slurs_[i]->get_property ("spanner-id"), ""));
+
+ if (have_slur)
+ ev->origin ()->warning(_ ("already have phrasing slur"));
+ else
+ {
+ Grob *slur = make_spanner ("PhrasingSlur", ev->self_scm ());
+ Direction updown = to_dir (ev->get_property ("direction"));
+ slur->set_property ("spanner-id", ly_string2scm (id));
+ if (updown)
+ set_grob_direction (slur, updown);
+ slurs_.push_back (slur);
+ }
}
}
Phrasing_slur_engraver::stop_translation_timestep ()
{
end_slurs_.clear ();
- events_[START] = events_[STOP] = 0;
+ start_events_.clear ();
+ stop_events_.clear ();
}
ADD_ACKNOWLEDGER (Phrasing_slur_engraver, accidental);
notename_ = n;
alteration_ = a;
octave_ = o;
- scale_ = default_global_scale;
+ scale_ = default_global_scale;
normalize_octave ();
}
Pitch::Pitch ()
{
notename_ = 0;
- scale_ = default_global_scale;
+ scale_ = default_global_scale;
octave_ = 0;
+ alteration_ = (Rational)0;
}
int
return n;
if (a)
return a > (Rational)0;
-
+
return 0;
}
translation unit, and set the property.
*/
void
-Property_iterator::process (Moment m)
+Property_iterator::process (Moment mom)
{
- send_stream_event (get_outlet (), "SetProperty", get_music ()->origin (),
- ly_symbol2scm ("symbol"), get_music ()->get_property ("symbol"),
- ly_symbol2scm ("value"), get_music ()->get_property ("value"));
+ Context *o = get_outlet ();
+ Music *m = get_music ();
+ SCM previous_value = o->get_property (m->get_property ("symbol"));
+ send_stream_event (o, "SetProperty", m->origin (),
+ ly_symbol2scm ("symbol"), m->get_property ("symbol"),
+ ly_symbol2scm ("value"), m->get_property ("value"));
+
+ /* For \once \set install a finalization hook to reset the property to the
+ * previous value after the timestep */
+ if (to_boolean (m->get_property ("once")))
+ {
+ Global_context *tg = get_outlet ()->get_global_context ();
+ tg->add_finalization (scm_list_n (once_finalization_proc,
+ o->self_scm (), m->self_scm (),
+ ly_quote_scm (previous_value), SCM_UNDEFINED));
+ }
- Simple_music_iterator::process (m);
+ Simple_music_iterator::process (mom);
}
void
Simple_music_iterator::process (m);
}
-MAKE_SCHEME_CALLBACK (Property_iterator, once_finalization, 2);
+MAKE_SCHEME_CALLBACK (Property_iterator, once_finalization, 3);
SCM
-Property_iterator::once_finalization (SCM ctx, SCM music)
+Property_iterator::once_finalization (SCM ctx, SCM music, SCM previous_value)
{
Music *m = unsmob_music (music);
Context *c = unsmob_context (ctx);
- send_stream_event (c, "UnsetProperty", m->origin (),
- ly_symbol2scm ("symbol"), m->get_property ("symbol"));
+ // Do not use UnsetProperty, which sets the default, but rather
+ // cache the value before the \once \set command and restore it now
+ send_stream_event (c, "SetProperty", m->origin (),
+ ly_symbol2scm ("symbol"), m->get_property ("symbol"),
+ ly_symbol2scm ("value"), previous_value);
+
return SCM_UNSPECIFIED;
}
void
Property_iterator::do_quit ()
{
- if (to_boolean (get_music ()->get_property ("once")))
- {
- SCM trans = get_outlet ()->self_scm ();
- SCM music = get_music ()->self_scm ();
-
- Global_context *tg = get_outlet ()->get_global_context ();
- tg->add_finalization (scm_list_n (once_finalization_proc,
- trans, music, SCM_UNDEFINED));
- }
}
bool
Rest::glyph_name (Grob *me, int balltype, string style, bool try_ledgers)
{
bool is_ledgered = false;
- if (try_ledgers && (balltype == 0 || balltype == 1))
+ if (try_ledgers && (balltype == -1 || balltype == 0 || balltype == 1))
{
Real rad = Staff_symbol_referencer::staff_radius (me) * 2.0;
Real pos = Staff_symbol_referencer::get_position (me);
could bemore generic, but hey, we understand this even after
dinner.
*/
+ is_ledgered |= (balltype == -1) && (pos <= -rad - 3 || pos >= +rad + 1);
is_ledgered |= (balltype == 0) && (pos >= +rad + 2 || pos < -rad);
is_ledgered |= (balltype == 1) && (pos <= -rad - 2 || pos > +rad);
}
Real
Simple_spacer::compress_line ()
{
- double inv_hooke = 0;
double cur_len = configuration_length (force_);
double cur_force = force_;
bool compressed = false;
}
fits_ = true;
- for (vsize i=0; i < springs_.size (); i++)
- inv_hooke += compressed
- ? springs_[i].inverse_compress_strength ()
- : springs_[i].inverse_stretch_strength ();
assert (line_len_ <= cur_len);
vector<Spring> sorted_springs = springs_;
sort (sorted_springs.begin (), sorted_springs.end (), greater<Spring> ());
- for (vsize i = 0; i < sorted_springs.size (); i++)
+ /* inv_hooke is the total flexibility of currently-active springs */
+ double inv_hooke = 0;
+ vsize i = sorted_springs.size ();
+ for ( ; i && sorted_springs[i - 1].blocking_force () < cur_force; i--)
+ inv_hooke += compressed
+ ? sorted_springs[i - 1].inverse_compress_strength ()
+ : sorted_springs[i - 1].inverse_stretch_strength ();
+ /* i now indexes the first active spring, so */
+ for ( ; i < sorted_springs.size (); i++)
{
Spring sp = sorted_springs[i];
- if (sp.blocking_force () > cur_force)
- continue;
-
if (isinf (sp.blocking_force ()))
break;
}
void
-Slur_configuration ::score_slopes (Slur_score_state const &state)
+Slur_configuration::score_slopes (Slur_score_state const &state)
{
Real dy = state.musical_dy_;
Offset slur_dz = attachment_[RIGHT] - attachment_[LEFT];
*/
class Slur_engraver : public Engraver
{
- Drul_array<Stream_event *> events_;
- Stream_event *running_slur_start_;
+ vector<Stream_event *> start_events_;
+ vector<Stream_event *> stop_events_;
vector<Grob*> slurs_;
vector<Grob*> end_slurs_;
Slur_engraver::Slur_engraver ()
{
- events_[START] = events_[STOP] = 0;
}
IMPLEMENT_TRANSLATOR_LISTENER (Slur_engraver, slur);
{
Direction d = to_dir (ev->get_property ("span-direction"));
if (d == START)
- ASSIGN_EVENT_ONCE (events_[START], ev);
+ start_events_.push_back(ev);
else if (d == STOP)
- ASSIGN_EVENT_ONCE (events_[STOP], ev);
+ stop_events_.push_back(ev);
else ev->origin ()->warning (_f ("direction of %s invalid: %d",
"slur-event", int (d)));
}
acknowledge_extra_object (info);
}
-
void
Slur_engraver::acknowledge_script (Grob_info info)
{
void
Slur_engraver::finalize ()
{
- if (slurs_.size ())
+ for (vsize i = 0; i < slurs_.size (); i++)
{
- slurs_[0]->warning (_ ("unterminated slur"));
- for (vsize i = 0; i < slurs_.size (); i++)
- slurs_[i]->suicide ();
+ slurs_[i]->warning (_ ("unterminated slur"));
+ slurs_[i]->suicide ();
}
}
void
Slur_engraver::process_music ()
{
- if (events_[STOP])
+ for (vsize i = 0; i < stop_events_.size (); i++)
{
- if (slurs_.size () == 0)
- events_[STOP]->origin ()->warning (_ ("cannot end slur"));
-
-
- end_slurs_ = slurs_;
- slurs_.clear ();
+ Stream_event *ev = stop_events_[i];
+ string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+
+ // Find the slur that is ended with this event (by checking the spanner-id)
+ bool ended = false;
+ for (vsize j = slurs_.size (); j--;)
+ {
+ if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
+ {
+ ended = true;
+ end_slurs_.push_back (slurs_[j]);
+ slurs_.erase (slurs_.begin () + j);
+ }
+ }
+ if (!ended)
+ ev->origin ()->warning (_ ("cannot end slur"));
}
- if (events_[START] && slurs_.empty ())
+ for (vsize i = start_events_.size (); i--;)
{
- Stream_event *ev = events_[START];
-
- bool double_slurs = to_boolean (get_property ("doubleSlurs"));
-
- Grob *slur = make_spanner ("Slur", events_[START]->self_scm ());
- Direction updown = to_dir (ev->get_property ("direction"));
- if (updown && !double_slurs)
- set_grob_direction (slur, updown);
-
- slurs_.push_back (slur);
-
- if (double_slurs)
- {
- set_grob_direction (slur, DOWN);
- slur = make_spanner ("Slur", events_[START]->self_scm ());
- set_grob_direction (slur, UP);
- slurs_.push_back (slur);
- }
+ Stream_event *ev = start_events_[i];
+ string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+ bool have_slur = false;
+ // Check if we already have a slur with the same spanner-id.
+ // In that case, don't create a new slur, but print a warning
+ for (vsize j = 0; j < slurs_.size (); j++)
+ have_slur = have_slur || (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""));
+
+ if (have_slur)
+ {
+ // We already have a slur, so give a warning and completely ignore
+ // the new slur.
+ ev->origin ()->warning(_ ("already have slur"));
+ start_events_.erase (start_events_.begin () + i);
+ }
+ else
+ {
+ Grob *slur = make_spanner ("Slur", ev->self_scm ());
+ Direction updown = to_dir (ev->get_property ("direction"));
+ slur->set_property ("spanner-id", ly_string2scm (id));
+ if (updown)
+ set_grob_direction (slur, updown);
+ slurs_.push_back (slur);
+
+ if (to_boolean (get_property ("doubleSlurs")))
+ {
+ set_grob_direction (slur, DOWN);
+ slur = make_spanner ("Slur", ev->self_scm ());
+ slur->set_property ("spanner-id", ly_string2scm (id));
+ set_grob_direction (slur, UP);
+ slurs_.push_back (slur);
+ }
+ }
}
set_melisma (slurs_.size ());
}
for (vsize i = 0; i < end_slurs_.size (); i++)
Slur::add_extra_encompass (end_slurs_[i], g);
- if (!events_[START])
+ if (!start_events_.size ())
for (vsize i = 0; i < slurs_.size (); i++)
Slur::add_extra_encompass (slurs_[i], g);
}
announce_end_grob (s, SCM_EOL);
}
end_slurs_.clear ();
- events_[START] = events_[STOP] = 0;
+ start_events_.clear ();
+ stop_events_.clear ();
}
ADD_ACKNOWLEDGER (Slur_engraver, accidental);
Real
Spanner::spanner_length () const
{
- Real l = spanned_drul_[LEFT]->relative_coordinate (0, X_AXIS);
- Real r = spanned_drul_[RIGHT]->relative_coordinate (0, X_AXIS);
+ Interval lr;
- if (r < l)
+ Drul_array<SCM> bounds (get_property ("left-bound-info"),
+ get_property ("right-bound-info"));
+
+ Direction d = LEFT;
+ do
+ lr[d] = robust_scm2double (ly_assoc_get (ly_symbol2scm ("X"),
+ bounds[d], SCM_BOOL_F), -d);
+ while (flip (&d) != LEFT);
+
+ if (lr.is_empty ())
+ {
+ do
+ lr[d] = spanned_drul_[d]->relative_coordinate (0, X_AXIS);
+ while (flip (&d) != LEFT);
+ }
+
+ if (lr.is_empty ())
programming_error ("spanner with negative length");
- return r - l;
+ return lr.length ();
}
System *
/* properties */
"normalized-endpoints "
"minimum-length "
+ "spanner-broken "
+ "spanner-id "
"to-barline "
);
void
Spring::update_blocking_force ()
{
+ // blocking_force_ is the value of force
+ // below which length(force) is constant, and
+ // above which length(force) varies according to inverse_*_strength.
+ // Simple_spacer::compress_line() depends on the condition above.
+ // We assume inverse_*_strength are non-negative.
if (min_distance_ > distance_)
- blocking_force_ = (min_distance_ - distance_) / inverse_stretch_strength_;
+ if (inverse_stretch_strength_ > 0.0)
+ blocking_force_ = (min_distance_ - distance_) / inverse_stretch_strength_;
+ else
+ // Conceptually, this should be +inf, but 0.0 meets the requirements
+ // of Simple_spacer and creates fewer cases of 0.0*inf to handle.
+ blocking_force_ = 0.0;
else
- blocking_force_ = (min_distance_ - distance_) / inverse_compress_strength_;
-
- // If the spring is fixed, it's not clear what the natural value
- // of blocking_force_ would be (because it always blocks).
- // -infinity_f works fine for now.
- // If inverse_stretch_strength > 0, the spring is not fixed (because it can stretch).
- if (isnan (blocking_force_) || blocking_force_ == infinity_f)
- blocking_force_ = (inverse_stretch_strength_ > 0) ? 0.0 : -infinity_f;
-
- if (blocking_force_ >= 0)
- inverse_compress_strength_ = 0;
+ if (inverse_compress_strength_ > 0.0)
+ blocking_force_ = (min_distance_ - distance_) / inverse_compress_strength_;
+ else
+ blocking_force_ = 0.0;
}
/* scale a spring, but in a way that doesn't violate min_distance */
Real force = max (f, blocking_force_);
Real inv_k = force < 0.0 ? inverse_compress_strength_ : inverse_stretch_strength_;
- if (force == infinity_f)
+ if (isinf(force))
{
programming_error ("cruelty to springs");
force = 0.0;
map<string, Audio_staff*> staff_map_;
map<string, int> channel_map_;
map<string, Audio_dynamic*> dynamic_map_;
+ // Would prefer to have the following two items be
+ // members of the containing class Performance,
+ // so they can be reset for each new midi file output.
static map<string, int> static_channel_map_;
static int channel_count_;
+ // For now, ask the last Staff_performer clean up during its finalize method
+ static int staff_performer_count_;
};
map<string, int> Staff_performer::static_channel_map_;
int Staff_performer::channel_count_ = 0;
+int Staff_performer::staff_performer_count_ = 0;
#include "translator.icc"
void
Staff_performer::initialize ()
{
+ ++staff_performer_count_;
}
Audio_staff*
{
staff_map_.clear ();
channel_map_.clear ();
+ if (staff_performer_count_)
+ --staff_performer_count_;
+ if (0 == staff_performer_count_)
+ {
+ static_channel_map_.clear ();
+ channel_count_ = 0;
+ }
}
string
make_stem (gi);
int ds = Stem::duration_log (stem_);
-
- if (ds != d->duration_log ())
+ int dc = d->duration_log ();
+
+ // half notes and quarter notes all have compatible stems.
+ // Longas are done differently (oops?), so we can't unify
+ // them with the other stemmed notes.
+ if (ds == 1)
+ ds = 2;
+ if (dc == 1)
+ dc = 2;
+ // whole notes and brevis both have no stems
+ if (ds == -1)
+ ds = 0;
+ if (dc == -1)
+ dc = 0;
+
+ if (ds != dc)
{
gi.event_cause ()->origin ()->warning (_f ("adding note head to incompatible stem (type = %d/%d)",
ds < 0 ? 1 << -ds : 1,
-MAKE_SCHEME_CALLBACK (Stem_tremolo, height, 1);
+MAKE_SCHEME_CALLBACK (Stem_tremolo, pure_height, 3);
SCM
-Stem_tremolo::height (SCM smob)
+Stem_tremolo::pure_height (SCM smob, SCM, SCM)
{
Grob *me = unsmob_grob (smob);
/*
Cannot use the real slope, since it looks at the Beam.
*/
- Stencil s1 (translated_stencil (me, 0.35));
+ Stencil s1 (untranslated_stencil (me, 0.35));
return ly_interval2scm (s1.extent (Y_AXIS));
}
* Staff_symbol_referencer::line_thickness (me);
}
+MAKE_SCHEME_CALLBACK (Stem, calc_stem_begin_position, 1);
+SCM
+Stem::calc_stem_begin_position (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Direction d = get_grob_direction (me);
+ Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
+ Grob *lh
+ = to_boolean (me->get_property ("avoid-note-head"))
+ ? last_head (me)
+ : first_head (me);
+
+ Real pos = Staff_symbol_referencer::get_position (lh);
+
+ if (Grob *head = support_head (me))
+ {
+ Interval head_height = head->extent (head, Y_AXIS);
+ Real y_attach = Note_head::stem_attachment_coordinate (head, Y_AXIS);
+
+ y_attach = head_height.linear_combination (y_attach);
+ pos += d * y_attach / half_space;
+ }
+
+ return scm_from_double (pos);
+}
+
MAKE_SCHEME_CALLBACK (Stem, print, 1);
SCM
Stem::print (SCM smob)
Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
if (lh)
- y2 = Staff_symbol_referencer::get_position (lh);
+ y2 = robust_scm2double (me->get_property ("stem-begin-position"), 0.0);
else if (stemlet)
{
Real beam_translation = Beam::get_beam_translation (beam);
Interval stem_y (min (y1, y2), max (y2, y1));
- if (Grob *head = support_head (me))
- {
- /*
- must not take ledgers into account.
- */
- Interval head_height = head->extent (head, Y_AXIS);
- Real y_attach = Note_head::stem_attachment_coordinate (head, Y_AXIS);
-
- y_attach = head_height.linear_combination (y_attach);
- stem_y[Direction (-d)] += d * y_attach / half_space;
- }
-
// URG
Real stem_width = thickness (me);
Real blot
"note-heads "
"positioning-done "
"rests "
+ "stem-begin-position "
"stem-end-position "
"stem-info "
"stemlet-length "
Grob *common = common_refpoint_of_array (elts, me, Y_AXIS);
Interval ext;
+ Real staffspace = 1.0;
int non_empty_count = 0;
for (vsize i = elts.size (); i--;)
{
{
non_empty_count ++;
ext.unite (dims);
+ staffspace = Staff_symbol_referencer::staff_space (sp);
}
}
}
SCM glyph_sym = me->get_property ("style");
Real len = ext.length ();
+
+ // Use collapse-height in multiples of the staff-space
if (ext.is_empty ()
- || (robust_scm2double (me->get_property ("collapse-height"), 0.0) >= ext.length ()))
+ || (robust_scm2double (me->get_property ("collapse-height"), 0.0) >= (len / staffspace)))
{
me->suicide ();
return SCM_UNSPECIFIED;
return out;
}
-Stencil
-System::make_footnote_stencil (Real padding)
+vsize
+System::num_footnotes ()
{
- Stencil mol;
-
- for (vsize i = 0; i < footnote_grobs_.size (); i++)
- {
- SCM footnote_markup = footnote_grobs_[i]->get_property ("footnote-text");
- if (Spanner *orig = dynamic_cast<Spanner *>(footnote_grobs_[i]))
- if (orig->is_broken ())
- footnote_markup = orig->broken_intos_[0]->get_property ("footnote-text");
-
- if (!Text_interface::is_markup (footnote_markup))
- continue;
-
- SCM props = scm_call_1 (ly_lily_module_constant ("layout-extract-page-properties"),
- pscore_->layout ()->self_scm ());
-
- SCM footnote_stl = Text_interface::interpret_markup (pscore_->layout ()->self_scm (),
- props, footnote_markup);
-
- mol.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (footnote_stl), padding);
- }
+ return footnote_grobs_.size ();
+}
- return mol;
+vector<Grob *>*
+System::footnote_grobs ()
+{
+ return &footnote_grobs_;
}
void
finished_ = 0;
current_event_ = 0;
span_ = 0;
- event_drul_[START] = 0;
- event_drul_[STOP] = 0;
+ event_drul_.set (0, 0);
}
IMPLEMENT_TRANSLATOR_LISTENER (Text_spanner_engraver, text_span);
}
typeset_all ();
- event_drul_[START] = 0;
- event_drul_[STOP] = 0;
+ event_drul_.set (0, 0);
}
void
}
}
-
void
Text_spanner_engraver::acknowledge_note_column (Grob_info info)
{
- if (span_) {
- Pointer_group_interface::add_grob (span_,
- ly_symbol2scm ("note-columns"),
- info.grob());
- add_bound_item (span_, info.grob ());
- } else if (finished_) {
- Pointer_group_interface::add_grob (finished_, ly_symbol2scm ("note-columns"),
- info.grob());
- add_bound_item (finished_, info.grob ());
- }
+ if (span_)
+ {
+ Pointer_group_interface::add_grob (span_,
+ ly_symbol2scm ("note-columns"),
+ info.grob ());
+ if (!span_->get_bound (LEFT))
+ add_bound_item (span_, info.grob ());
+ }
+ else if (finished_)
+ {
+ Pointer_group_interface::add_grob (finished_,
+ ly_symbol2scm ("note-columns"),
+ info.grob ());
+ if (!finished_->get_bound (RIGHT))
+ add_bound_item (finished_, info.grob ());
+ }
}
ADD_ACKNOWLEDGER (Text_spanner_engraver, note_column);
"TextSpanner ",
/* read */
- "",
+ "currentMusicalColumn ",
/* write */
""
void process_music ();
void typeset_tie (Grob *);
void report_unterminated_tie (Head_event_tuple const &);
+ bool has_autosplit_end (Stream_event *event);
public:
TRANSLATOR_DECLARATIONS (Tie_engraver);
};
tie_start.head_->warning (_("unterminated tie"));
}
+/*
+ Determines whether the end of an event was created by
+ a split in Completion_heads_engraver or by user input.
+*/
+bool
+Tie_engraver::has_autosplit_end (Stream_event *event)
+{
+ if (event)
+ return to_boolean (event->get_property ("autosplit-end"));
+ return false;
+}
+
void
Tie_engraver::process_music ()
{
if (!right_ev || !left_ev)
continue;
- if (ly_is_equal (right_ev->get_property ("pitch"),
- left_ev->get_property ("pitch")))
+ /*
+ Make a tie only if pitches are equal or if event end was not generated by
+ Completion_heads_engraver.
+ */
+ if (ly_is_equal (right_ev->get_property ("pitch"), left_ev->get_property ("pitch"))
+ && (!Tie_engraver::has_autosplit_end (left_ev)))
{
Grob *p = new Spanner (heads_to_tie_[i].tie_definition_);
Moment end = heads_to_tie_[i].end_moment_;
ties_.push_back (p);
heads_to_tie_.erase (heads_to_tie_.begin () + i);
- // Prevent all other tied notes ending at the same moment (assume
- // implicitly the notes have also started at the same moment!)
- // from triggering an "unterminated tie" warning. Needed e.g. for
- // <c e g>~ g
+ /*
+ Prevent all other tied notes ending at the same moment (assume
+ implicitly the notes have also started at the same moment!)
+ from triggering an "unterminated tie" warning. Needed e.g. for
+ <c e g>~ g
+ */
for (vsize j = heads_to_tie_.size (); j--;)
{
if (heads_to_tie_[j].end_moment_ == end)
vector<Head_event_tuple> new_heads_to_tie;
+ /*
+ Whether tie event has been processed and can be deleted or should
+ be kept for later portions of a split note.
+ */
+ bool event_processed = false;
+
for (vsize i = 0; i < now_heads_.size (); i++)
{
Grob *head = now_heads_[i];
continue;
}
+ // We only want real notes to cause ties, not e.g. pitched trills
+ if (!left_ev->in_event_class ("note-event"))
+ continue;
SCM left_articulations = left_ev->get_property ("articulations");
tie_event = ev;
}
- if (left_ev && (tie_event || tie_stream_event))
+ if (left_ev && (tie_event || tie_stream_event)
+ && (!Tie_engraver::has_autosplit_end (left_ev)))
{
+ event_processed = true;
+
Head_event_tuple event_tup;
SCM start_definition
for (vsize i = 0; i < new_heads_to_tie.size (); i++)
heads_to_tie_.push_back (new_heads_to_tie[i]);
- event_ = 0;
+ /*
+ Discard event only if it has been processed with at least one
+ appropriate note.
+ */
+ if (event_processed)
+ event_ = 0;
+
now_heads_.clear ();
}
for (vsize i = 0; i < columns.size (); i++)
{
Grob *nc = columns[i];
+ if (Note_column::has_rests (nc))
+ continue;
Direction d = Note_column::dir (nc);
if (d)
dirs[d]++;
}
- return dirs[UP] >= dirs[DOWN] ? UP : DOWN;
+ if (dirs[UP] == dirs[DOWN])
+ {
+ if (dirs[UP] == 0)
+ return UP;
+ Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+ if (!staff)
+ return UP;
+ Interval staff_extent = staff->extent (staff, Y_AXIS);
+ Interval extremal_positions;
+ extremal_positions.set_empty ();
+ for (vsize i = 0; i < columns.size (); i++)
+ {
+ Direction d = Note_column::dir (columns[i]);
+ extremal_positions[d] = minmax (d, 1.0*Note_column::head_positions_interval (columns[i])[d], extremal_positions[d]);
+ }
+ Direction d = LEFT;
+ do
+ extremal_positions[d] = -d * (staff_extent[d] - extremal_positions[d]);
+ while (flip (&d) != LEFT);
+
+ return extremal_positions[UP] <= extremal_positions[DOWN] ? UP : DOWN;
+ }
+
+ return dirs[UP] > dirs[DOWN] ? UP : DOWN;
}
void
tuplets_[i].number_ = make_spanner ("TupletNumber",
tuplets_[i].event_->self_scm ());
tuplets_[i].number_->set_object ("bracket", tuplets_[i].bracket_->self_scm ());
+ tuplets_[i].number_->set_parent (tuplets_[i].bracket_, X_AXIS);
+ tuplets_[i].number_->set_parent (tuplets_[i].bracket_, Y_AXIS);
tuplets_[i].bracket_->set_object ("tuplet-number", tuplets_[i].number_->self_scm ());
tuplets_[i].stop_moment_.grace_part_ = 0;
/* properties */
"avoid-slur " // UGH.
"bracket "
+ "direction "
);
Vaticana_ligature_engraver::Vaticana_ligature_engraver ()
{
- brew_ligature_primitive_proc =
+ brew_ligature_primitive_proc =
Vaticana_ligature::brew_ligature_primitive_proc;
augmented_primitives_.clear ();
}
}
ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, note_head);
+ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, ligature_head);
ADD_TRANSLATOR (Vaticana_ligature_engraver,
/* doc */
"Handle ligatures by glueing special ligature heads"
--- /dev/null
+%%%% This file is part of LilyPond, the GNU music typesetter.
+%%%%
+%%%% Copyright (C) 2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%%%% Jan Nieuwenhuizen <janneke@gnu.org>
+%%%%
+%%%% LilyPond is free software: you can redistribute it and/or modify
+%%%% it under the terms of the GNU General Public License as published by
+%%%% the Free Software Foundation, either version 3 of the License, or
+%%%% (at your option) any later version.
+%%%%
+%%%% LilyPond is distributed in the hope that it will be useful,
+%%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%%%% GNU General Public License for more details.
+%%%%
+%%%% You should have received a copy of the GNU General Public License
+%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+
+\version "2.15.6"
+
+RemoveEmptyStaves = \with {
+ \remove "Axis_group_engraver"
+ % If RemoveEmptyStaves is called twice, two
+ % Hara_kiri_engravers would be added, which leads to a
+ % warning.
+ % This code makes sure that no previous Hara_kiri_engraver
+ % is left before adding a new one.
+ \remove "Hara_kiri_engraver"
+ \consists "Hara_kiri_engraver"
+ \override VerticalAxisGroup #'remove-empty = ##t
+}
\include "grace-init.ly"
\include "midi-init.ly"
\include "paper-defaults-init.ly"
+\include "context-mods-init.ly"
\layout {
- mm = #(ly:output-def-lookup $defaultpaper 'mm)
- unit = #(ly:output-def-lookup $defaultpaper 'unit)
+ mm = #(ly:output-def-lookup $defaultpaper 'mm)
+ unit = #(ly:output-def-lookup $defaultpaper 'unit)
- in = #(* 25.4 mm)
- pt = #(/ in 72.27)
- cm = #(* 10 mm)
+ in = #(* 25.4 mm)
+ pt = #(/ in 72.27)
+ cm = #(* 10 mm)
- \include "engraver-init.ly"
+ \include "engraver-init.ly"
- #(set-paper-dimension-variables (current-module))
+ #(set-paper-dimension-variables (current-module))
}
#(set-default-paper-size (ly:get-option 'paper-size))
partCombineListener = \layout {
- \context {
- \Score
- skipTypesetting = ##t
- ignoreBarChecks = ##t
- \alias "Timing"
- }
+ \context {
+ \Score
+ skipTypesetting = ##t
+ ignoreBarChecks = ##t
+ \alias "Timing"
+ }
}
setDefaultDurationToQuarter = { c4 }
-
-
-
\override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'padding = #0.5
}
-
-RemoveEmptyStaves = \with {
- \remove "Axis_group_engraver"
- % If RemoveEmptyStaves is called twice, two
- % Hara_kiri_engravers would be added, which leads to a
- % warning.
- % This code makes sure that no previous Hara_kiri_engraver
- % is left before adding a new one.
- \remove "Hara_kiri_engraver"
- \consists "Hara_kiri_engraver"
- \override VerticalAxisGroup #'remove-empty = ##t
-}
-
-
\context {
\type "Score_engraver"
\name "Score"
printKeyCancellation = ##f
}
-
%% Keep the old definitions in here for compatibility (they erase previous
%% settings to the corresponding context!).
%% For new scores, one should simply insert the \RemoveEmptyStaves settings
(/ (ly:moment-main-numerator moment)
(ly:moment-main-denominator moment))))
-#(define (adjust-for-grace moment)
- "Adjusts any moment with a grace note by subtracting half of
-the grace note duration. For example, an eighth note grace note
-which would otherwise occur at score time 0.5 will now occur at
-score time 0.375."
+#(define (moment-grace->string moment)
+ "Prints a moment without grace note(s) as a float such as
+0.25000. Grace notes are written with the grace duration as a
+separate \"dashed\" number, i.e. 0.25000-0.12500. This allows any
+program using the output of this function to interpret grace notes
+however they want (half duration, quarter duration? before beat,
+after beat? etc.)."
(if
(eq? 0 (ly:moment-grace-numerator moment))
- moment
- ;; get moment including grace note
- ;; grace notes have a negative numerator, so add
- (ly:moment-add moment
- ;; make the "grace duration" half as long
- (ly:moment-mul
- (ly:make-moment 1 2)
+ (ly:format "~a" (format-moment moment))
+ ;; grace notes have a negative numerator, so no "-" necessary
+ (ly:format
+ "~a~a"
+ (format-moment moment)
+ (format-moment
(ly:make-moment
(ly:moment-grace-numerator moment)
(ly:moment-grace-denominator moment))))))
-#(define (get-moment moment)
- (format-moment (adjust-for-grace
- moment)))
-
#(define (make-output-string-line engraver values)
"Constructs a tab-separated string beginning with the
score time (derived from the engraver) and then adding all the
(moment (ly:context-current-moment context)))
(string-append
(string-join
- (map
- (lambda (x) (ly:format "~a" x))
- (append
- (list (get-moment moment))
- values))
- "\t")
+ (append
+ (list (moment-grace->string moment))
+ (map
+ (lambda (x) (ly:format "~a" x))
+ values))
+ "\t")
"\n")))
(print-line engraver
"rest"
(ly:duration->string
- (ly:event-property event 'duration))))
+ (ly:event-property event 'duration))
+ (format-moment (ly:duration-length
+ (ly:event-property event 'duration)))))
#(define (format-note engraver event)
(let* ((origin (ly:input-file-line-char-column
;; get a MIDI pitch value.
(+ 60 (ly:pitch-semitones
(ly:event-property event 'pitch)))
+ (ly:duration->string
+ (ly:event-property event 'duration))
(format-moment (ly:duration-length
(ly:event-property event 'duration)))
;; point and click info
(print-line engraver
"breathe"))
+#(define (format-tie engraver event)
+ (print-line engraver
+ "tie"))
+
#(define (format-articulation engraver event)
(print-line engraver
"script"
(cons 'crescendo-event format-cresc)
(cons 'decrescendo-event format-decresc)
(cons 'text-span-event format-textspan)
+ (cons 'tie-event format-tie)
)))
}
}
\version "2.14.0"
#(use-modules (scm song))
+#(use-modules (srfi srfi-39))
% \festival #"filename" { \tempo N = X } { music }
festival =
-#(define-music-function (parser location filename tempo music) (string? ly:music? ly:music?)
- (output-file music tempo filename)
- music)
+#(define-music-function (parser location filename tempo music)
+ (string? ly:music? ly:music?)
+ (output-file music tempo filename)
+ music)
% \festivalsyl #"filename" { \tempo N = X } { music }
festivalsyl =
-#(define-music-function (parser location filename tempo music) (string? ly:music? ly:music?)
- (set! *syllabify* #t)
- (output-file music tempo filename)
- music)
+#(define-music-function (parser location filename tempo music)
+ (string? ly:music? ly:music?)
+ (parameterize ((*syllabify* #t))
+ (output-file music tempo filename))
+ music)
\version "2.14.0"
+startGraceSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "grace")
+stopGraceSlur = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "grace")
+
startGraceMusic = {
}
startAppoggiaturaMusic =
{
- s1*0(
+ s1*0\startGraceSlur
}
stopAppoggiaturaMusic = {
- s1*0)
+ s1*0\stopGraceSlur
}
startAcciaccaturaMusic = {
- s1*0(
+ s1*0\startGraceSlur
\override Stem #'stroke-style = #"grace"
}
stopAcciaccaturaMusic = {
\revert Stem #'stroke-style
- s1*0)
+ s1*0\stopGraceSlur
+}
+
+startSlashedGraceMusic = {
+ \override Stem #'stroke-style = #"grace"
+}
+
+stopSlashedGraceMusic = {
+ \revert Stem #'stroke-style
}
(set! last-grob-action (assv-set! last-grob-action grob node-id))))
#(define (truncate-value val)
- (let ((val-str (format "~a" val)))
+ (let ((val-str (format #f "~a" val)))
(string-take val-str (min 50 (string-length val-str)))))
#(define (grob-mod grob file line func prop val)
(let* ((val-str (truncate-value val))
- (label (format "~a\\n~a:~a\\n~a <- ~a" (grob-name grob) file line prop val-str)))
+ (label (format #f "~a\\n~a:~a\\n~a <- ~a" (grob-name grob) file line prop val-str)))
(if (relevant? grob file line prop)
(grob-event-node grob label file))))
#(define (grob-cache grob prop callback value)
(let* ((val-str (truncate-value value))
- (label (format "caching ~a.~a\\n~a -> ~a" (grob-name grob) prop callback value)))
+ (label (format #f "caching ~a.~a\\n~a -> ~a" (grob-name grob) prop callback value)))
(if (relevant? grob #f #f prop)
(grob-event-node grob label #f))))
#(define (grob-create grob file line func)
- (let ((label (format "~a\\n~a:~a" (grob-name grob) file line)))
+ (let ((label (format #f "~a\\n~a:~a" (grob-name grob) file line)))
(grob-event-node grob label file)))
#(ly:set-grob-modification-callback grob-mod)
#(if (ly:get-option 'include-settings)
(ly:parser-include-string parser
- (format "\\include \"~a\"" (ly:get-option 'include-settings))))
+ (format #f "\\include \"~a\"" (ly:get-option 'include-settings))))
\maininput
%% there is a problem at the end of the input file
#(define-music-function (parser location grob-name offset text footnote)
(symbol? number-pair? markup? markup?)
(_i "Attach @var{text} to @var{grob-name} at offset @var{offset},
- with @var{text} referring to @var{footnote} (use like @code{\\once})")
+with @var{text} referring to @var{footnote} (use like @code{\\once})")
(make-music 'FootnoteEvent
'symbol grob-name
'X-offset (car offset)
'text text
'footnote-text footnote))
+autoFootnoteGrob =
+#(define-music-function (parser location grob-name offset footnote)
+ (symbol? number-pair? markup?)
+ (_i "Footnote @var{grob-name} with the text in @var{footnote}
+allowing for the footnote to be automatically numbered such that
+the number appears at @var{offset}. Note that, for this to take effect,
+auto-numbering must be turned on in the paper block. Otherwise, no
+number will appear. Use like @code{\\once})")
+ #{
+ \footnoteGrob $grob-name $offset \markup { "" } $footnote
+ #})
+
footnote =
#(define-music-function (parser location offset text footnote)
(number-pair? markup? markup?)
(_i "Attach @var{text} at @var{offset} with @var{text} referring
- to @var{footnote} (use like @code{\\tweak})")
+to @var{footnote} (use like @code{\\tweak})")
(make-music 'FootnoteEvent
'X-offset (car offset)
'Y-offset (cdr offset)
'text text
'footnote-text footnote))
+% this function can't be a simple copy and past of the above because
+% it needs to be encapsulated in a Sequential Music.
+% so, there's a code dup of above :-(
+autoFootnote =
+#(define-music-function (parser location offset footnote)
+ (number-pair? markup?)
+ (_i "Footnote the item after which this comes with the text in
+@var{footnote} allowing for the footnote to be automatically numbered
+such that the number appears at @var{offset}. Note that, for this to
+take effect, auto-numbering must be turned on in the paper block.
+Otherwise, no number will appear. Use like @code{\\tweak})")
+ (make-music 'FootnoteEvent
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'text (markup "")
+ 'footnote-text footnote))
+
grace =
#(def-grace-function startGraceMusic stopGraceMusic
(_i "Insert @var{music} as grace notes."))
(lambda (x)
(shift-one-duration-log x dur dots)) arg))
+slashedGrace =
+#(def-grace-function startSlashedGraceMusic stopSlashedGraceMusic
+ (_i "Create slashed graces (slashes through stems, but no slur) from
+the following music expression"))
+
spacingTweaks =
#(define-music-function (parser location parameters) (list?)
(_i "Set the system stretch, by reading the 'system-stretch property of
%%
%% Footnotes
%%
- footnote-separator-markup = \markup { \fill-line \override #`(span-factor . 1/2) { \draw-hline } }
+ footnote-separator-markup = \markup \fill-line { \override #'(span-factor . 1/2) \draw-hline }
footnote-padding = 0.5\mm
footnote-footer-padding = 0.5\mm
+ footnote-number-raise = 0.5\mm
+ footnote-auto-numbering = ##t
+ footnote-numbering-function = #numbered-footnotes
+ reset-footnotes-on-new-page = ##t
%%
%% Page numbering
#"x;x;4-3;3-2;4-4;1-1;"
\storePredefinedDiagram #default-fret-table \chordmode {ees:aug}
#guitar-tuning
- #"3-3;2-2;1-1;o;o;3-4"
+ #"3-3;2-2;1-1;o;o;3-4;"
\storePredefinedDiagram #default-fret-table \chordmode {ees:dim}
#guitar-tuning
#(offset-fret 1 (chord-shape 'd:dim guitar-tuning))
%% 2014 = em dash.
#(ly:export
- (format "Music engraving by LilyPond ~a~awww.lilypond.org"
+ (format #f "Music engraving by LilyPond ~a~awww.lilypond.org"
(lilypond-version)
(ly:wide-char->utf-8 #x2014)
))
$(call src-wildcard,feta-braces-[a-z].mf) \
$(call src-wildcard,feta-alphabet*[0-9].mf) \
$(call src-wildcard,feta-notehead*[0-9].mf) \
+ $(call src-wildcard,feta-flags*[0-9].mf) \
$(call src-wildcard,parmesan[0-9]*.mf)
STAFF_SIZES = 11 13 14 16 18 20 23 26
$(outdir)/emmentaler-%.woff: $(outdir)/emmentaler-%.pe \
$(outdir)/feta%.pfb \
$(outdir)/feta-noteheads%.pfb \
+ $(outdir)/feta-flags%.pfb \
$(outdir)/feta-alphabet%.pfb \
$(outdir)/parmesan%.pfb \
$(outdir)/feta%.otf-table \
$(outdir)/%.otf-table: $(outdir)/%.lisp
cat $< $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \
$(if $(findstring brace,$<),,$(subst feta,feta-noteheads,$<)) \
+ $(if $(findstring brace,$<),,$(subst feta,feta-flags,$<)) \
$(if $(findstring brace,$<),,$(subst feta,feta-alphabet,$<)) > $@
## ugh -- we want this to prevent failing -j2 compiles.
$(outdir)/feta26.otf-table: $(outdir)/feta26.lisp \
$(outdir)/feta-noteheads26.lisp \
+ $(outdir)/feta-flags26.lisp \
$(outdir)/parmesan26.lisp \
$(outdir)/feta-alphabet26.lisp
$(outdir)/feta23.otf-table: $(outdir)/feta23.lisp \
$(outdir)/feta-noteheads23.lisp \
+ $(outdir)/feta-flags23.lisp \
$(outdir)/parmesan23.lisp \
$(outdir)/feta-alphabet23.lisp
$(outdir)/feta20.otf-table: $(outdir)/feta20.lisp \
$(outdir)/feta-noteheads20.lisp \
+ $(outdir)/feta-flags20.lisp \
$(outdir)/parmesan20.lisp \
$(outdir)/feta-alphabet20.lisp
$(outdir)/feta18.otf-table: $(outdir)/feta18.lisp \
$(outdir)/feta-noteheads18.lisp \
+ $(outdir)/feta-flags18.lisp \
$(outdir)/parmesan18.lisp \
$(outdir)/feta-alphabet18.lisp
$(outdir)/feta16.otf-table: $(outdir)/feta16.lisp \
$(outdir)/feta-noteheads16.lisp \
+ $(outdir)/feta-flags16.lisp \
$(outdir)/parmesan16.lisp \
$(outdir)/feta-alphabet16.lisp
$(outdir)/feta14.otf-table: $(outdir)/feta14.lisp \
$(outdir)/feta-noteheads14.lisp \
+ $(outdir)/feta-flags14.lisp \
$(outdir)/parmesan14.lisp \
$(outdir)/feta-alphabet14.lisp
$(outdir)/feta13.otf-table: $(outdir)/feta13.lisp \
$(outdir)/feta-noteheads13.lisp \
+ $(outdir)/feta-flags13.lisp \
$(outdir)/parmesan13.lisp \
$(outdir)/feta-alphabet13.lisp
$(outdir)/feta11.otf-table: $(outdir)/feta11.lisp \
$(outdir)/feta-noteheads11.lisp \
+ $(outdir)/feta-flags11.lisp \
$(outdir)/parmesan11.lisp \
$(outdir)/feta-alphabet11.lisp
+++ /dev/null
-#!@FONTFORGE@
-
-
-
-New();
-
-# Separate Feta versioning?
-# Naming: * expose LilyPond20/LilyPond rather than bigcheese
-# * using 20 as Weight works for gnome-font-select widget: gfs
-SetFontNames("bigcheese20", "LilyPond", "LilyPond BigCheese 20", "20", "GNU GPL", "@TOPLEVEL_VERSION@");
-
-MergeFonts("feta20.pfa");
-MergeFonts("feta-noteheads20.pfa");
-MergeFonts("parmesan20.pfa");
-
-# load nummer/din after setting PUA.
-i = 0;
-while (i < CharCnt())
- Select(i);
-# crashes fontforge, use PUA for now -- jcn
-# SetUnicodeValue(i + 0xF0000, 0);
-/*
-PRIVATE AREA
- In the BMP, the range 0xe000 to 0xf8ff will never be assigned to any
- characters by the standard and is reserved for private usage. For the
- Linux community, this private area has been subdivided further into the
- range 0xe000 to 0xefff which can be used individually by any end-user
- and the Linux zone in the range 0xf000 to 0xf8ff where extensions are
- coordinated among all Linux users. The registry of the characters
- assigned to the Linux zone is currently maintained by H. Peter Anvin
- <Peter.Anvin@linux.org>.
-*/
- SetUnicodeValue(i + 0xE000, 0);
- ++i;
-endloop
-
-
-MergeFonts("feta-nummer10.pfa");
-MergeFonts("feta-din14.pfa");
-MergeKern("feta-din14.tfm");
-
-LoadTableFromFile("LILC", "feta20.otf-table")
-
-Generate("bigcheese20.otf");
-Generate("bigcheese20.cff");
y0 = y1;
x0 = x1 - 2/6 thin;
- pendir = unitvector (x3 - x1, y3l / 6 - y1);
+ pendir = unitvector (x3 - x1, y3l / 8 - y1);
penangle = angle pendir - 90;
penpos3 (thin, penangle);
penpos2 (thick, angle (z3 - z1) - 90);
- penpos1 (2/3 thin, penangle);
+ penpos1 (-2 * (x0 - x1), penangle);
penlabels (1, 2, 3);
labels (0);
enddef;
-save stafflinethickness;
+save linethickness;
save increment;
+save last_brace_number;
+save min_width;
+save max_width;
+save min_thin;
+save max_thin;
linethickness := 0.5 pt#;
increment := 0.5 pt#;
+last_brace_number := braces_per_font * 9 - 1;
+min_width := 2 pt#;
+max_width := 20 pt#;
+min_thin := 0.2 pt#;
+max_thin := 1.25 pt#;
y := 10 pt#;
for i := 0 step 1 until font_count:
errmessage "please report to <bug-lilypond@gnu.org>";
fi;
- % x should be about one staff space, taking brace to have
- % default height of 3 staffs, this yields height / 3 / 4 = 12
- % but 15 looks better
- x := y / 15;
+ x := (y / last_brace_number) [min_width, max_width];
increment := x / 10;
- linethickness := min (0.5 pt#, y / 150);
+ linethickness := (y / last_brace_number) [min_thin, max_thin];
if i = font_count:
draw_brace (y, x, linethickness, number);
fi;
--- /dev/null
+% Feta (not the Font-En-Tja) music font -- generic stuff: include lots of files, but don't
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+%
+%
+% LilyPond is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% LilyPond is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+
+
+if test = -1:
+ mode := smoke;
+fi
+
+staffsize# := design_size * pt#;
+
+mode_setup;
+
+input feta-macros;
+
+input feta-params;
+
+font_x_height staff_space#;
+
+fet_beginfont ("feta", design_size, "fetaMusic");
+
+input feta-flags;
+
+autometric_parameter ("staffsize", staffsize#);
+autometric_parameter ("stafflinethickness", stafflinethickness#);
+autometric_parameter ("staff_space", staff_space#);
+autometric_parameter ("linethickness", linethickness#);
+autometric_parameter ("black_notehead_width", black_notehead_width#);
+autometric_parameter ("ledgerlinethickness", ledgerlinethickness#);
+autometric_parameter ("blot_diameter", blot_diameter#);
+
+fet_endfont;
enddef;
-fet_beginchar ("8th Flag (up)", "u3");
+
+
+def upstemsingleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 1;
- total_depth# = 3 staff_space# - blot_diameter# / 2;
+ total_depth# = (3 - shortening) * staff_space# - blot_diameter# / 2;
flare = staff_space;
flagspace# = staff_space#;
hip_depth_ratio = .72;
draw_square_block ((-0.5 stemthickness_rounded, 0),
(0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
-fet_beginchar ("16th Flag (up)", "u4");
+def upstemdoubleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 2;
- total_depth# = 3.5 staff_space# - blot_diameter# / 2;
+ total_depth# = (3.5 - shortening) * staff_space# - blot_diameter# / 2;
flare = .85 staff_space;
flagspace# = .85 staff_space#;
hip_depth_ratio = .72;
draw_square_block ((-0.5 stemthickness_rounded, 0),
(0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
-fet_beginchar ("32nd Flag (up)", "u5");
+def upstemtripleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 3;
- total_depth# = 4.25 staff_space# - blot_diameter# / 2;
+ total_depth# = (4.25 - shortening) * staff_space# - blot_diameter# / 2;
flare = .85 staff_space;
flagspace# = .87 staff_space#;
hip_depth_ratio = .72;
draw_square_block ((-0.5 stemthickness_rounded, 0),
(0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
-fet_beginchar ("64th Flag (up)", "u6");
+def upstemquadrupleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 4;
- total_depth# = 5.25 staff_space# - blot_diameter# / 2;
+ total_depth# = (5.25 - shortening) * staff_space# - blot_diameter# / 2;
flare = .85 staff_space;
flagspace# = .9 staff_space#;
hip_depth_ratio = .72;
draw_square_block ((-0.5 stemthickness_rounded, 0),
(0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
-fet_beginchar ("128th Flag (up)", "u7");
+def upstemquintupleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 5;
- total_depth# = 6.25 staff_space# - blot_diameter# / 2;
+ total_depth# = (6.25 - shortening) * staff_space# - blot_diameter# / 2;
flare = .85 staff_space;
flagspace# = .93 staff_space#;
hip_depth_ratio = .72;
draw_square_block ((-0.5 stemthickness_rounded, 0),
(0, (-flag_count * staff_space_rounded)));
-fet_endchar;
+enddef;
+
-fet_beginchar ("8th (down)", "d3");
+
+def downstemsingleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 1;
- total_depth# = 2.75 staff_space#;
+ total_depth# = (2.75 - shortening) * staff_space#;
flare = staff_space;
flagspace# = .9 staff_space#;
hip_depth_ratio = .74;
(0, (-flag_count * staff_space_rounded)));
y_mirror_char;
-fet_endchar;
+enddef;
-fet_beginchar ("16th (down)", "d4");
+def downstemdoubleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 2;
- total_depth# = 3.0 staff_space# - blot_diameter# / 2;
+ total_depth# = (3.0 - shortening) * staff_space# - blot_diameter# / 2;
flare = .82 staff_space;
flagspace# = .9 staff_space#;
hip_depth_ratio = .85;
(0, (-flag_count * staff_space_rounded)));
y_mirror_char;
-fet_endchar;
+enddef;
-fet_beginchar ("32nd (down)", "d5");
+def downstemtripleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 3;
- total_depth# = 3.75 * staff_space# - blot_diameter# / 2;
+ total_depth# = (3.75 - shortening) * staff_space# - blot_diameter# / 2;
flare = .82 staff_space;
flagspace# = .88 staff_space#;
hip_depth_ratio = .87;
(0, (-flag_count * staff_space_rounded)));
y_mirror_char;
-fet_endchar;
+enddef;
-fet_beginchar ("64th (down)", "d6");
+def downstemquadrupleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 4;
- total_depth# = 4.5 staff_space# - blot_diameter# / 2;
+ total_depth# = (4.5 - shortening) * staff_space# - blot_diameter# / 2;
flare = .8 staff_space;
flagspace# = .9 staff_space#;
hip_depth_ratio = .83;
(0, (-flag_count * staff_space_rounded)));
y_mirror_char;
-fet_endchar;
+enddef;
-fet_beginchar ("128th (down)", "d7");
+def downstemquintupleflag (expr shortening) =
save flare, hip_depth_ratio, hip_width, foot_depth, foot_width_ratio;
save flagspace, total_depth, flag_count;
flag_count = 5;
- total_depth# = 5.5 staff_space# - blot_diameter# / 2;
+ total_depth# = (5.5 - shortening) * staff_space# - blot_diameter# / 2;
flare = .8 staff_space;
flagspace# = .92 staff_space#;
hip_depth_ratio = .85;
(0, (-flag_count * staff_space_rounded)));
y_mirror_char;
+enddef;
+
+
+
+
+fet_beginchar ("8th Flag (up)", "u3");
+ upstemsingleflag (0.0);
fet_endchar;
+fet_beginchar ("16th Flag (up)", "u4");
+ upstemdoubleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("32nd Flag (up)", "u5");
+ upstemtripleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("64th Flag (up)", "u6");
+ upstemquadrupleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("128th Flag (up)", "u7");
+ upstemquintupleflag (0);
+fet_endchar;
+
+
+
+
+
+fet_beginchar ("8th Flag (down)", "d3");
+ downstemsingleflag (0.0);
+fet_endchar;
+
+
+fet_beginchar ("16th Flag (down) 3", "d4");
+ downstemdoubleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("32nd Flag (down)", "d5");
+ downstemtripleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("64th Flag (down)", "d6");
+ downstemquadrupleflag (0);
+fet_endchar;
+
+
+fet_beginchar ("128th Flag (down)", "d7");
+ downstemquintupleflag (0);
+fet_endchar;
+
+
+
+
%%%%%%%%
%
% Single Stroke for Short Appogiatura
--- /dev/null
+% feta-flags11.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 11.22;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags13.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 12.60;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags14.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 14.14;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags16.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 15.87;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags18.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 17.82;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags20.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 20;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags23.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 22.45;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
--- /dev/null
+% feta-flags26.mf
+% part of LilyPond's pretty-but-neat music font
+
+input feta-autometric;
+
+design_size := 25.20;
+test := 0;
+
+
+input feta-flags-generic;
+
+end.
+
font_x_height staff_space#;
-%% this is a fallback so we can run the font without including feta-noteheads.
-black_notehead_width# := 1.0 staff_space#;
-
-
fet_beginfont ("feta", design_size, "fetaMusic");
if test = 0:
font_x_height staff_space#;
-%% this is a fallback so we can run the font without
-%% including feta-noteheads.
-black_notehead_width# := 1.0 staff_space#;
-
-
fet_beginfont ("feta", design_size, "fetaMusic");
-if test = 0:
- input feta-noteheads;
- input feta-flags;
-else:
- input feta-noteheads-test-generic.mf;
-fi
+input feta-noteheads;
autometric_parameter ("staffsize", staffsize#);
autometric_parameter ("stafflinethickness", stafflinethickness#);
+++ /dev/null
-%
-% test stuff.
-% in a separate file to avoid tainting non-test font files for testing.
-%
-
-input feta-noteheads;
-%input feta-flags;
% NOTE HEAD VARIABLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-save black_notehead_width, noteheight;
-save half_notehead_width, whole_notehead_width, slash_thick;
-save slash_slope, overdone_heads, solfa_noteheight;
+save half_notehead_width, whole_notehead_width;
+save solfa_noteheight;
-numeric noteheight;
-numeric slash_thick;
-numeric black_notehead_width;
numeric whole_notehead_width;
numeric half_notehead_width;
-
fet_begingroup ("noteheads");
-% Slope of slash. From scm/grob-description.scm. How to auto-copy?
-slash_slope := 1.7;
-
-% Thickness of slash lines. Quarter notes get 1.5slt width.
-slash_thick# := 2/3 * 0.48 staff_space#;
-
-
-%
-% Hand-engraved music often has balls extending above and below
-% the lines. If you like that, modify overdone heads (unit:
-% stafflinethickness).
-%
-overdone_heads = 0.0;
-noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#;
-
-
%
% solfa heads should not overlap on chords.
%
solfa_noteheight# := staff_space# - stafflinethickness#;
-define_pixels (slash_thick);
-define_whole_vertical_pixels (noteheight);
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% SLANT moves both extrema on the long axis (by SLANT * ELLIPTICITY,
-% so SLANT = -1, puts the extreme on the long axis next to the short
-% axis one).
-%
-
-def draw_outside_ellipse (expr ellipticity, tilt, superness, slant) =
- save attachment_y;
- save pat;
- path pat;
-
- pat := superellipse ((ellipticity, 0), (-slant * ellipticity, 1.0),
- (-ellipticity, 0), (slant * ellipticity, -1.0),
- superness);
- pat := pat rotated tilt;
-
- save top_point, right_point;
- pair top_point, right_point;
-
- top_point := directionpoint left of pat;
- right_point := directionpoint up of pat;
-
- save scaling, width;
-
- scaling# = noteheight# / (2 ypart (top_point));
- width# := 2 xpart (right_point) * scaling#;
- define_pixels (scaling, width);
-
- set_char_box (0, width#, noteheight# / 2, noteheight# / 2);
-
- d := d - feta_space_shift;
-
- % attachment Y
- charwy := ypart (right_point) * scaling#;
- charwx := width#;
-
- pat := pat scaled scaling shifted (w / 2, .5 (h - d));
-
- width := hround width;
-
- if test_outlines = 1:
- draw pat;
- else:
- fill pat;
- fi;
-enddef;
-
-
def undraw_inside_ellipse (expr ellipticity, tilt, superness, clearance) =
begingroup
save pat;
fet_beginchar ("Quarter notehead", "s2");
- % used to have 32. With 31, they are slightly bolder.
- draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, 0.707, 0);
- black_notehead_width# := charwd;
-
+ draw_quarter_path;
draw_staff (-2, 2, 0);
fet_endchar;
fi;
feta_fillpen := savepen;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Notehead width and height are defined here.
+%
+%
+% Slope of slash. From scm/grob-description.scm. How to auto-copy?
+slash_slope := 1.7;
+
+% Thickness of slash lines. Quarter notes get 1.5slt width.
+slash_thick# := 2/3 * 0.48 staff_space#;
+
+%
+% Hand-engraved music often has balls extending above and below
+% the lines. If you like that, modify overdone heads (unit:
+% stafflinethickness).
+%
+overdone_heads = 0.0;
+noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#;
+
+define_pixels (slash_thick);
+define_whole_vertical_pixels (noteheight);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is used to draw all elliptical notes; it also sets
+% black_notehead_width, so it should be called in any file that
+% needs the value of black_notehead_width.
+%
+% SLANT moves both extrema on the long axis (by SLANT * ELLIPTICITY,
+% so SLANT = -1, puts the extreme on the long axis next to the short
+% axis one).
+%
+
+def draw_outside_ellipse (expr ellipticity, tilt, superness, slant) =
+ save attachment_y;
+ save pat;
+ path pat;
+
+ pat := superellipse ((ellipticity, 0), (-slant * ellipticity, 1.0),
+ (-ellipticity, 0), (slant * ellipticity, -1.0),
+ superness);
+ pat := pat rotated tilt;
+
+ save top_point, right_point;
+ pair top_point, right_point;
+
+ top_point := directionpoint left of pat;
+ right_point := directionpoint up of pat;
+
+ save scaling, width;
+
+ scaling# := noteheight# / (2 ypart (top_point));
+ width# := 2 xpart (right_point) * scaling#;
+ define_pixels (scaling, width);
+ set_char_box (0, width#, noteheight# / 2, noteheight# / 2);
+
+ d := d - feta_space_shift;
+
+ % attachment Y
+ charwy := ypart (right_point) * scaling#;
+ charwx := width#;
+
+ pat := pat scaled scaling shifted (w / 2, .5 (h - d));
+
+ width := hround width;
+
+ if test_outlines = 1:
+ draw pat;
+ else:
+ fill pat;
+ fi;
+enddef;
+
+
+def draw_quarter_path =
+ draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, 0.707, 0);
+enddef;
+
+test_outlines := 0;
+draw_quarter_path;
+black_notehead_width# := charwd;
+
+define_pixels (slash_thick);
+define_whole_vertical_pixels (noteheight);
+
+
draw_staff (-2, 2, 0);
fet_endchar;
+fet_beginchar ("breve rest (outside staff)", "M1o");
+ set_char_box (0, breve_rest_x#,
+ ledgerlinethickness# / 2, breve_rest_y#);
+
+ draw_block ((0, 0), (breve_rest_x, breve_rest_y));
+
+ pickup pencircle scaled ledgerlinethickness;
+
+ y5 = y6 = breve_rest_y;
+ lft x5 = -b - breve_rest_y / 2;
+ rt x6 = w + breve_rest_y / 2;
+
+ draw_gridline (z5, z6, ledgerlinethickness_rounded);
+ draw_gridline ((x5, 0), (x6, 0), ledgerlinethickness_rounded);
+
+ draw_staff (-2, 2, 3);
+fet_endchar;
+
fet_beginchar ("Quarter rest", "2");
save alpha, yshift, height;
fet_beginchar ("Arpeggio", "arpeggio");
+ begingroup;
save height, overshoot, width;
- height# = staff_space#;
- width# = 0.8 height#;
- overshoot# = 0.25 staff_space#;
+ height# := staff_space#;
+ width# := 0.8 * height#;
+ overshoot# := 0.25 * staff_space#;
define_pixels (height, overshoot, width);
-
set_char_box (0, width#, 0, height#);
draw_arpeggio;
penlabels (range 1 thru 9);
draw_staff (-2, 2, 0.0);
+ endgroup;
fet_endchar;
%
fet_beginchar ("Trill_element", "trill_element");
- save height, overshoot;
+ begingroup;
+ save height, overshoot, width;
height# = staff_space#;
width# = 0.8 height#;
overshoot# = 0.25 staff_space#;
currentpicture := currentpicture shifted -(width / 2, height / 2);
currentpicture := currentpicture rotated 90;
currentpicture := currentpicture shifted (height / 2, width / 2);
+ endgroup;
fet_endchar;
%
% TODO: should depth/height include appendages/stems?
+save overdone_heads, noteheight;
+
overdone_heads = 0;
noteheight# := staff_space# + (1 + overdone_heads) * stafflinethickness#;
define_pixels (noteheight);
/draw_round_box % width height x y blot
{
- setlinewidth % w h x y
- 0 setlinecap
- 1 setlinejoin
+ dup
+ 0.0 gt {
+ setlinewidth % w h x y
+ 0 setlinecap
+ 1 setlinejoin
- rmoveto % w h
- currentpoint % w h x1 y1
- 4 2 roll % x1 y1 w h
- 4 copy
- rectfill
- rectstroke
+ rmoveto % w h
+ currentpoint % w h x1 y1
+ 4 2 roll % x1 y1 w h
+ 4 copy
+ rectfill
+ rectstroke
+ } {
+ pop % w h x y
+ rmoveto % w h
+ currentpoint % w h x1 y1
+ 4 2 roll % x1 y1 w h
+ rectfill
+ } ifelse
} bind def
/draw_polygon % fill? x(n) y(n) x(n-1) y(n-1) ... x(0) y(0) n blot
return 'href="' + os.path.join (source_val, m.group (1)) + '"'
# More hardcoding, yay!
-splitted_docs_re = re.compile('(Documentation/out-www/(automated-engraving|essay|notation|changes|extending|music-glossary|usage|web|learning|snippets))/')
+splitted_docs_re = re.compile('(Documentation/out-www/(automated-engraving|essay|notation|changes|extending|music-glossary|usage|web|learning|snippets|contributor))/')
lily_snippets_re = re.compile ('(href|src)="([0-9a-f]{2}/lily-.*?)"')
pictures_re = re.compile ('src="(pictures/.*?)"')
@rule ((0, 1, 9), _ ('\\header { key = concat + with + operator }'))
def conv(str):
if re.search ('\\\\multi', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "\\multi")
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "\\multi")
+ stderr_write ('\n')
return str
@rule ((0, 1, 19), _ ('deprecated %s') % '\\octave')
def conv (str):
if re.search ('\\\\octave', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "\\octave")
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- # raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "\\octave")
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ # raise FatalConversionError ()
return str
@rule ((0, 1, 20), _ ('deprecated \\textstyle, new \\key syntax'))
def conv (str):
str = re.sub ('\\\\textstyle([^;]+);',
- '\\\\property Lyrics . textstyle = \\1', str)
+ '\\\\property Lyrics . textstyle = \\1', str)
# harmful to current .lys
# str = re.sub ('\\\\key([^;]+);', '\\\\accidentals \\1;', str)
return str
@rule ((1, 0, 2), _ ('\\header { key = concat + with + operator }'))
def conv(str):
if re.search ('\\\\header', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("new \\header format"))
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("new \\header format"))
+ stderr_write ('\n')
return str
@rule ((1, 0, 6), 'foo = \\translator {\\type .. } ->\\translator {\\type ..; foo; }')
def conv(str):
if re.search ('[a-zA-Z]+ = *\\translator',str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("\\translator syntax"))
- stderr_write ('\n')
- # raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("\\translator syntax"))
+ stderr_write ('\n')
+ # raise FatalConversionError ()
return str
@rule ((1, 0, 18), _ ('\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative'))
def conv(str):
if re.search ('\\\\repeat',str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "\\repeat")
- stderr_write ('\n')
- # raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "\\repeat")
+ stderr_write ('\n')
+ # raise FatalConversionError ()
return str
@rule ((1, 3, 5), 'beamAuto moment properties')
def conv (str):
str = re.sub ('"?beamAuto([^"=]+)"? *= *"([0-9]+)/([0-9]+)" *;*',
- 'beamAuto\\1 = #(make-moment \\2 \\3)',
- str)
+ 'beamAuto\\1 = #(make-moment \\2 \\3)',
+ str)
return str
@rule ((1, 3, 17), 'stemStyle -> flagStyle')
def conv (str):
str = re.sub ('stemStyle',
- 'flagStyle',
- str)
+ 'flagStyle',
+ str)
return str
@rule ((1, 3, 18), 'staffLineLeading -> staffSpace')
def conv (str):
str = re.sub ('staffLineLeading',
- 'staffSpace',
- str)
+ 'staffSpace',
+ str)
return str
@rule ((1, 3, 23), _ ('deprecate %s ') % '\\repetitions')
def conv(str):
if re.search ('\\\\repetitions',str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "\\repetitions")
- stderr_write ('\n')
- # raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "\\repetitions")
+ stderr_write ('\n')
+ # raise FatalConversionError ()
return str
@rule ((1, 3, 35), 'textEmptyDimension -> textNonEmpty')
def conv (str):
str = re.sub ('textEmptyDimension *= *##t',
- 'textNonEmpty = ##f',
- str)
+ 'textNonEmpty = ##f',
+ str)
str = re.sub ('textEmptyDimension *= *##f',
- 'textNonEmpty = ##t',
- str)
+ 'textNonEmpty = ##t',
+ str)
return str
@rule ((1, 3, 38), '\musicalpitch { a b c } -> #\'(a b c)')
def conv (str):
str = re.sub ("([a-z]+)[ \t]*=[ \t]*\\\\musicalpitch *{([- 0-9]+)} *\n",
- "(\\1 . (\\2))\n", str)
+ "(\\1 . (\\2))\n", str)
str = re.sub ("\\\\musicalpitch *{([0-9 -]+)}",
- "\\\\musicalpitch #'(\\1)", str)
+ "\\\\musicalpitch #'(\\1)", str)
if re.search ('\\\\notenames',str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("new \\notenames format"))
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("new \\notenames format"))
+ stderr_write ('\n')
return str
@rule ((1, 3, 39), '\\key A ; ->\\key a;')
def conv (str):
def replace (match):
- return '\\key %s;' % match.group (1).lower ()
+ return '\\key %s;' % match.group (1).lower ()
str = re.sub ("\\\\key ([^;]+);", replace, str)
return str
@rule ((1, 3, 41), '[:16 c4 d4 ] -> \\repeat "tremolo" 2 { c16 d16 }')
def conv (str):
if re.search ('\\[:',str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("new tremolo format"))
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("new tremolo format"))
+ stderr_write ('\n')
return str
@rule ((1, 3, 58), 'noteHeadStyle value: string -> symbol')
def conv (str):
if re.search ('\\\\keysignature', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % '\\keysignature')
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % '\\keysignature')
+ stderr_write ('\n')
return str
@rule ((1, 3, 68), 'latexheaders = "\\input global" -> latexheaders = "global"')
def conv (str):
str = re.sub (r'latexheaders *= *"\\\\input ',
- 'latexheaders = "',
- str)
+ 'latexheaders = "',
+ str)
return str
def conv (str):
str = re.sub ('ChordNames*', 'ChordNames', str)
if re.search ('\\\\textscript "[^"]* *"[^"]*"', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("new \\textscript markup text"))
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("new \\textscript markup text"))
+ stderr_write ('\n')
str = re.sub ('\\textscript +("[^"]*")', '\\textscript #\\1', str)
return str
@rule ((1, 3, 117), _ ('identifier names: %s') % '$!foo_bar_123 -> xfooBarABC')
def conv (str):
def regularize_dollar_reference (match):
- return regularize_id (match.group (1))
+ return regularize_id (match.group (1))
def regularize_assignment (match):
- return '\n' + regularize_id (match.group (1)) + ' = '
+ return '\n' + regularize_id (match.group (1)) + ' = '
str = re.sub ('\$([^\t\n ]+)', regularize_dollar_reference, str)
str = re.sub ('\n([^ \t\n]+)[ \t]*= *', regularize_assignment, str)
return str
@rule ((1, 3, 120), 'paper_xxx -> paperXxxx, pedalup -> pedalUp.')
def conv (str):
def regularize_paper (match):
- return regularize_id (match.group (1))
+ return regularize_id (match.group (1))
str = re.sub ('(paper_[a-z]+)', regularize_paper, str)
str = re.sub ('sustainup', 'sustainUp', str)
str = re.sub ('nobreak', 'noBreak', str)
def conv (str):
def func(match):
- break_dict = {
- "Instrument_name": "instrument-name",
- "Left_edge_item": "left-edge",
- "Span_bar": "span-bar",
- "Breathing_sign": "breathing-sign",
- "Staff_bar": "staff-bar",
- "Clef_item": "clef",
- "Key_item": "key-signature",
- "Time_signature": "time-signature",
- "Custos": "custos"
- }
- props = match.group (1)
- for (k,v) in break_dict.items():
- props = re.sub (k, v, props)
- return "breakAlignOrder = #'(%s)" % props
+ break_dict = {
+ "Instrument_name": "instrument-name",
+ "Left_edge_item": "left-edge",
+ "Span_bar": "span-bar",
+ "Breathing_sign": "breathing-sign",
+ "Staff_bar": "staff-bar",
+ "Clef_item": "clef",
+ "Key_item": "key-signature",
+ "Time_signature": "time-signature",
+ "Custos": "custos"
+ }
+ props = match.group (1)
+ for (k,v) in break_dict.items():
+ props = re.sub (k, v, props)
+ return "breakAlignOrder = #'(%s)" % props
str = re.sub ("breakAlignOrder *= *#'\\(([a-z_\n\tA-Z ]+)\\)",
- func, str)
+ func, str)
return str
@rule ((1, 5, 67), _ ('automaticMelismata turned on by default'))
def conv (str):
if re.search (r'\addlyrics',str) \
- and re.search ('automaticMelismata', str) == None:
- stderr_write ('\n')
- stderr_write (NOT_SMART % "automaticMelismata; turned on by default since 1.5.67.")
- stderr_write ('\n')
- raise FatalConversionError ()
+ and re.search ('automaticMelismata', str) == None:
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "automaticMelismata; turned on by default since 1.5.67.")
+ stderr_write ('\n')
+ raise FatalConversionError ()
return str
@rule ((1, 5, 72), 'set! point-and-click -> set-point-and-click!')
def conv (str):
str = re.sub ("""#\(set! +point-and-click +line-column-location\)""",
- """#(set-point-and-click! \'line-column)""", str)
+ """#(set-point-and-click! \'line-column)""", str)
str = re.sub ("""#\(set![ \t]+point-and-click +line-location\)""",
- '#(set-point-and-click! \'line)', str)
+ '#(set-point-and-click! \'line)', str)
str = re.sub ('#\(set! +point-and-click +#f\)',
- '#(set-point-and-click! \'none)', str)
+ '#(set-point-and-click! \'none)', str)
return str
spanner_subst ={
- "text" : 'TextSpanEvent',
- "decrescendo" : 'DecrescendoEvent',
- "crescendo" : 'CrescendoEvent',
- "Sustain" : 'SustainPedalEvent',
- "slur" : 'SlurEvent',
- "UnaCorda" : 'UnaCordaEvent',
- "Sostenuto" : 'SostenutoEvent',
- }
+ "text" : 'TextSpanEvent',
+ "decrescendo" : 'DecrescendoEvent',
+ "crescendo" : 'CrescendoEvent',
+ "Sustain" : 'SustainPedalEvent',
+ "slur" : 'SlurEvent',
+ "UnaCorda" : 'UnaCordaEvent',
+ "Sostenuto" : 'SostenutoEvent',
+ }
def subst_ev_name (match):
stype = 'STOP'
if re.search ('start', match.group(1)):
- stype= 'START'
+ stype= 'START'
mtype = spanner_subst[match.group(2)]
return "(make-span-event '%s %s)" % (mtype , stype)
str = re.sub (r'\(ly-', '(ly:', str)
changed = [
- r'duration\?',
- r'font-metric\?',
- r'molecule\?',
- r'moment\?',
- r'music\?',
- r'pitch\?',
- 'make-duration',
- 'music-duration-length',
- 'duration-log',
- 'duration-dotcount',
- 'intlog2',
- 'duration-factor',
- 'transpose-key-alist',
- 'get-system',
- 'get-broken-into',
- 'get-original',
- 'set-point-and-click!',
- 'make-moment',
- 'make-pitch',
- 'pitch-octave',
- 'pitch-alteration',
- 'pitch-notename',
- 'pitch-semitones',
- r'pitch<\?',
- r'dir\?',
- 'music-duration-compress',
- 'set-point-and-click!'
- ]
+ r'duration\?',
+ r'font-metric\?',
+ r'molecule\?',
+ r'moment\?',
+ r'music\?',
+ r'pitch\?',
+ 'make-duration',
+ 'music-duration-length',
+ 'duration-log',
+ 'duration-dotcount',
+ 'intlog2',
+ 'duration-factor',
+ 'transpose-key-alist',
+ 'get-system',
+ 'get-broken-into',
+ 'get-original',
+ 'set-point-and-click!',
+ 'make-moment',
+ 'make-pitch',
+ 'pitch-octave',
+ 'pitch-alteration',
+ 'pitch-notename',
+ 'pitch-semitones',
+ r'pitch<\?',
+ r'dir\?',
+ 'music-duration-compress',
+ 'set-point-and-click!'
+ ]
origre = r'\b(%s)' % '|'.join (changed)
@rule ((1, 7, 4), '<< >> -> < < > >')
def conv(str):
if re.search ('new-chords-done',str):
- return str
+ return str
str = re.sub (r'<<', '< <', str)
str = re.sub (r'>>', '> >', str)
@rule ((1, 7, 6), 'note\\script -> note-\script')
def conv(str):
kws = ['arpeggio',
- 'sustainDown',
- 'sustainUp',
- 'f',
- 'p',
- 'pp',
- 'ppp',
- 'fp',
- 'ff',
- 'mf',
- 'mp',
- 'sfz',
- ]
+ 'sustainDown',
+ 'sustainUp',
+ 'f',
+ 'p',
+ 'pp',
+ 'ppp',
+ 'fp',
+ 'ff',
+ 'mf',
+ 'mp',
+ 'sfz',
+ ]
origstr = '|'.join (kws)
str = re.sub (r'([^_^-])\\(%s)\b' % origstr, r'\1-\\\2', str)
@rule ((1, 7, 10), "\property ChordName #'style -> #(set-chord-name-style 'style)")
def conv(str):
str = re.sub (r"\\property *ChordNames *\. *ChordName *\\(set|override) *#'style *= *#('[a-z]+)",
- r"#(set-chord-name-style \2)", str)
+ r"#(set-chord-name-style \2)", str)
str = re.sub (r"\\property *ChordNames *\. *ChordName *\\revert *#'style",
- r"", str)
+ r"", str)
return str
@rule ((1, 7, 16), "divisiomaior -> divisioMaior")
def conv(str):
str = re.sub ("divisiomaior",
- "divisioMaior", str)
+ "divisioMaior", str)
str = re.sub ("divisiominima",
- "divisioMinima", str)
+ "divisioMinima", str)
str = re.sub ("divisiomaxima",
- "divisioMaxima", str)
+ "divisioMaxima", str)
return str
@rule ((1, 7, 17), "Skip_req -> Skip_event")
def conv(str):
str = re.sub ("Skip_req_swallow_translator",
- "Skip_event_swallow_translator", str)
+ "Skip_event_swallow_translator", str)
return str
@rule ((1, 7, 18), "groupOpen/Close -> start/stopGroup, #'outer -> #'enclose-bounds")
def conv(str):
str = re.sub ("groupOpen",
- "startGroup", str)
+ "startGroup", str)
str = re.sub ("groupClose",
- "stopGroup", str)
+ "stopGroup", str)
str = re.sub ("#'outer",
- "#'enclose-bounds", str)
+ "#'enclose-bounds", str)
return str
@rule ((1, 7, 19), _ ("remove %s") % "GraceContext")
def conv(str):
if re.search( r'\\GraceContext', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "GraceContext")
- stderr_write (FROM_TO \
- % ("GraceContext", "#(add-to-grace-init .. )"))
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "GraceContext")
+ stderr_write (FROM_TO \
+ % ("GraceContext", "#(add-to-grace-init .. )"))
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ raise FatalConversionError ()
str = re.sub ('HaraKiriStaffContext', 'RemoveEmptyStaffContext', str)
return str
@rule ((1, 7, 22), "#'type -> #'style")
def conv(str):
str = re.sub (
- r"(set|override|revert) *#'type",
- r"\1 #'style",
- str)
+ r"(set|override|revert) *#'type",
+ r"\1 #'style",
+ str)
return str
@rule ((1, 7, 23), "barNonAuto -> automaticBars")
def conv(str):
str = re.sub (
- "barNonAuto *= *##t",
- "automaticBars = ##f",
- str)
+ "barNonAuto *= *##t",
+ "automaticBars = ##f",
+ str)
str = re.sub (
- "barNonAuto *= *##f",
- "automaticBars = ##t",
- str)
+ "barNonAuto *= *##f",
+ "automaticBars = ##t",
+ str)
return str
@rule ((1, 7, 24), _ ("cluster syntax"))
def conv(str):
if re.search( r'-(start|stop)Cluster', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("cluster syntax"))
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("cluster syntax"))
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
- raise FatalConversionError ()
+ raise FatalConversionError ()
return str
@rule ((1, 7, 28), _ ("new Pedal style syntax"))
def conv(str):
str = re.sub (r"\\property *Staff\.(Sustain|Sostenuto|UnaCorda)Pedal *\\(override|set) *#'pedal-type *",
- r"\property Staff.pedal\1Style ", str)
+ r"\property Staff.pedal\1Style ", str)
str = re.sub (r"\\property *Staff\.(Sustain|Sostenuto|UnaCorda)Pedal *\\revert *#'pedal-type", '', str)
return str
origstr = '<%s>' % str
if re.search (r'\\\\', str):
- return origstr
+ return origstr
if re.search (r'\\property', str):
- return origstr
+ return origstr
if re.match (r'^\s*\)?\s*\\[a-zA-Z]+', str):
- return origstr
+ return origstr
durs = []
def sub_durs (m, durs = durs):
- durs.append(m.group(2))
- return m.group (1)
+ durs.append(m.group(2))
+ return m.group (1)
str = re.sub (r"([a-z]+[,'!? ]*)([0-9]+\.*)", sub_durs, str)
dur_str = ''
for d in durs:
- if dur_str == '':
- dur_str = d
- if dur_str <> d:
- return '<%s>' % m.group (1)
+ if dur_str == '':
+ dur_str = d
+ if dur_str <> d:
+ return '<%s>' % m.group (1)
pslur_strs = ['']
dyns = ['']
last_str = ''
while last_str <> str:
- last_str = str
-
- def sub_tremolos (m, slur_strs = slur_strs):
- tr = m.group (2)
- if tr not in slur_strs:
- slur_strs.append (tr)
- return m.group (1)
-
- str = re.sub (r"([a-z]+[',!? ]*)(:[0-9]+)",
- sub_tremolos, str)
-
- def sub_dyn_end (m, dyns = dyns):
- dyns.append (' \!')
- return ' ' + m.group(2)
-
- str = re.sub (r'(\\!)\s*([a-z]+)', sub_dyn_end, str)
- def sub_slurs(m, slur_strs = slur_strs):
- if '-)' not in slur_strs:
- slur_strs.append (')')
- return m.group(1)
-
- def sub_p_slurs(m, slur_strs = slur_strs):
- if '-\)' not in slur_strs:
- slur_strs.append ('\)')
- return m.group(1)
-
- str = re.sub (r"\)[ ]*([a-z]+)", sub_slurs, str)
- str = re.sub (r"\\\)[ ]*([a-z]+)", sub_p_slurs, str)
- def sub_begin_slurs(m, slur_strs = slur_strs):
- if '-(' not in slur_strs:
- slur_strs.append ('(')
- return m.group(1)
-
- str = re.sub (r"([a-z]+[,'!?0-9 ]*)\(",
- sub_begin_slurs, str)
- def sub_begin_p_slurs(m, slur_strs = slur_strs):
- if '-\(' not in slur_strs:
- slur_strs.append ('\(')
- return m.group(1)
-
- str = re.sub (r"([a-z]+[,'!?0-9 ]*)\\\(",
- sub_begin_p_slurs, str)
-
- def sub_dyns (m, slur_strs = slur_strs):
- s = m.group(0)
- if s == '@STARTCRESC@':
- slur_strs.append ("\\<")
- elif s == '@STARTDECRESC@':
- slur_strs.append ("\\>")
- elif s == r'-?\\!':
- slur_strs.append ('\\!')
- return ''
-
- str = re.sub (r'@STARTCRESC@', sub_dyns, str)
- str = re.sub (r'-?\\!', sub_dyns, str)
-
- def sub_articulations (m, slur_strs = slur_strs):
- a = m.group(1)
- if a not in slur_strs:
- slur_strs.append (a)
- return ''
-
- str = re.sub (r"([_^-]\@ACCENT\@)", sub_articulations,
- str)
- str = re.sub (r"([_^-]\\[a-z]+)", sub_articulations,
- str)
- str = re.sub (r"([_^-][>_.+|^-])", sub_articulations,
- str)
- str = re.sub (r'([_^-]"[^"]+")', sub_articulations,
- str)
-
- def sub_pslurs(m, slur_strs = slur_strs):
- slur_strs.append (' \\)')
- return m.group(1)
- str = re.sub (r"\\\)[ ]*([a-z]+)", sub_pslurs, str)
+ last_str = str
+
+ def sub_tremolos (m, slur_strs = slur_strs):
+ tr = m.group (2)
+ if tr not in slur_strs:
+ slur_strs.append (tr)
+ return m.group (1)
+
+ str = re.sub (r"([a-z]+[',!? ]*)(:[0-9]+)",
+ sub_tremolos, str)
+
+ def sub_dyn_end (m, dyns = dyns):
+ dyns.append (' \!')
+ return ' ' + m.group(2)
+
+ str = re.sub (r'(\\!)\s*([a-z]+)', sub_dyn_end, str)
+ def sub_slurs(m, slur_strs = slur_strs):
+ if '-)' not in slur_strs:
+ slur_strs.append (')')
+ return m.group(1)
+
+ def sub_p_slurs(m, slur_strs = slur_strs):
+ if '-\)' not in slur_strs:
+ slur_strs.append ('\)')
+ return m.group(1)
+
+ str = re.sub (r"\)[ ]*([a-z]+)", sub_slurs, str)
+ str = re.sub (r"\\\)[ ]*([a-z]+)", sub_p_slurs, str)
+ def sub_begin_slurs(m, slur_strs = slur_strs):
+ if '-(' not in slur_strs:
+ slur_strs.append ('(')
+ return m.group(1)
+
+ str = re.sub (r"([a-z]+[,'!?0-9 ]*)\(",
+ sub_begin_slurs, str)
+ def sub_begin_p_slurs(m, slur_strs = slur_strs):
+ if '-\(' not in slur_strs:
+ slur_strs.append ('\(')
+ return m.group(1)
+
+ str = re.sub (r"([a-z]+[,'!?0-9 ]*)\\\(",
+ sub_begin_p_slurs, str)
+
+ def sub_dyns (m, slur_strs = slur_strs):
+ s = m.group(0)
+ if s == '@STARTCRESC@':
+ slur_strs.append ("\\<")
+ elif s == '@STARTDECRESC@':
+ slur_strs.append ("\\>")
+ elif s == r'-?\\!':
+ slur_strs.append ('\\!')
+ return ''
+
+ str = re.sub (r'@STARTCRESC@', sub_dyns, str)
+ str = re.sub (r'-?\\!', sub_dyns, str)
+
+ def sub_articulations (m, slur_strs = slur_strs):
+ a = m.group(1)
+ if a not in slur_strs:
+ slur_strs.append (a)
+ return ''
+
+ str = re.sub (r"([_^-]\@ACCENT\@)", sub_articulations,
+ str)
+ str = re.sub (r"([_^-]\\[a-z]+)", sub_articulations,
+ str)
+ str = re.sub (r"([_^-][>_.+|^-])", sub_articulations,
+ str)
+ str = re.sub (r'([_^-]"[^"]+")', sub_articulations,
+ str)
+
+ def sub_pslurs(m, slur_strs = slur_strs):
+ slur_strs.append (' \\)')
+ return m.group(1)
+ str = re.sub (r"\\\)[ ]*([a-z]+)", sub_pslurs, str)
## end of while <>
suffix = ''.join (slur_strs) + ''.join (pslur_strs) \
- + ''.join (dyns)
+ + ''.join (dyns)
return '@STARTCHORD@%s@ENDCHORD@%s%s' % (str , dur_str, suffix)
marker_str = '%% new-chords-done %%'
if re.search (marker_str,str):
- return str
+ return str
str = re.sub ('<<', '@STARTCHORD@', str)
str = re.sub ('>>', '@ENDCHORD@', str)
# <<a b>>-[ c d]
# and gets skipped by articulation_substitute
str = re.sub (r'\[ *(@STARTCHORD@[^@]+@ENDCHORD@[0-9.]*)',
- r'\1-[', str)
+ r'\1-[', str)
str = re.sub (r'\\! *(@STARTCHORD@[^@]+@ENDCHORD@[0-9.]*)',
- r'\1-\\!', str)
+ r'\1-\\!', str)
str = re.sub (r'<([^?])', r'%s\1' % simstart, str)
str = re.sub (r'>([^?])', r'%s\1' % simend, str)
str = re.sub ('@STARTCRESC@', r'\\<', str)
str = re.sub ('@STARTDECRESC@', r'\\>' ,str)
str = re.sub (r'\\context *Voice *@STARTCHORD@',
- '@STARTCHORD@', str)
+ '@STARTCHORD@', str)
str = re.sub ('@STARTCHORD@', chordstart, str)
str = re.sub ('@ENDCHORD@', chordend, str)
str = re.sub (r'@ACCENT@', '>', str)
# Find the beginning of each markup:
match = markup_start.search (str)
while match:
- result = result + str[:match.end (1)] + " \markup"
- str = str[match.end( 2):]
- # Count matching parentheses to find the end of the
- # current markup:
- nesting_level = 0
- pars = re.finditer(r"[()]",str)
- for par in pars:
- if par.group () == '(':
- nesting_level = nesting_level + 1
- else:
- nesting_level = nesting_level - 1
- if nesting_level == 0:
- markup_end = par.end ()
- break
- # The full markup in old syntax:
- markup = str[:markup_end]
- # Modify to new syntax:
- markup = musicglyph.sub (r"{\\musicglyph", markup)
- markup = columns.sub (r"{", markup)
- markup = submarkup_start.sub (r"{\\\1", markup)
- markup = leftpar.sub ("{", markup)
- markup = rightpar.sub ("}", markup)
-
- result = result + markup
- # Find next markup
- str = str[markup_end:]
- match = markup_start.search(str)
+ result = result + str[:match.end (1)] + " \markup"
+ str = str[match.end( 2):]
+ # Count matching parentheses to find the end of the
+ # current markup:
+ nesting_level = 0
+ pars = re.finditer(r"[()]",str)
+ for par in pars:
+ if par.group () == '(':
+ nesting_level = nesting_level + 1
+ else:
+ nesting_level = nesting_level - 1
+ if nesting_level == 0:
+ markup_end = par.end ()
+ break
+ # The full markup in old syntax:
+ markup = str[:markup_end]
+ # Modify to new syntax:
+ markup = musicglyph.sub (r"{\\musicglyph", markup)
+ markup = columns.sub (r"{", markup)
+ markup = submarkup_start.sub (r"{\\\1", markup)
+ markup = leftpar.sub ("{", markup)
+ markup = rightpar.sub ("}", markup)
+
+ result = result + markup
+ # Find next markup
+ str = str[markup_end:]
+ match = markup_start.search(str)
result = result + str
return result
def articulation_substitute (str):
str = re.sub (r"""([^-])\[ *(\\?\)?[a-z]+[,']*[!?]?[0-9:]*\.*)""",
- r"\1 \2[", str)
+ r"\1 \2[", str)
str = re.sub (r"""([^-])\\\) *([a-z]+[,']*[!?]?[0-9:]*\.*)""",
- r"\1 \2\\)", str)
+ r"\1 \2\\)", str)
str = re.sub (r"""([^-\\])\) *([a-z]+[,']*[!?]?[0-9:]*\.*)""",
- r"\1 \2)", str)
+ r"\1 \2)", str)
str = re.sub (r"""([^-])\\! *([a-z]+[,']*[!?]?[0-9:]*\.*)""",
- r"\1 \2\\!", str)
+ r"\1 \2\\!", str)
return str
string_or_scheme = re.compile ('("(?:[^"\\\\]|\\\\.)*")|(#\\s*\'?\\s*\\()')
# Find the beginning of next string or Scheme expr.:
match = string_or_scheme.search (str)
while match:
- # Convert the preceding LilyPond code:
- previous_chunk = str[:match.start()]
- result = result + articulation_substitute (previous_chunk)
- if match.group (1): # Found a string
- # Copy the string to output:
- result = result + match.group (1)
- str = str[match.end(1):]
- else: # Found a Scheme expression. Count
- # matching parentheses to find its end
- str = str[match.start ():]
- nesting_level = 0
- pars = re.finditer(r"[()]",str)
- for par in pars:
- if par.group () == '(':
- nesting_level = nesting_level + 1
- else:
- nesting_level = nesting_level - 1
- if nesting_level == 0:
- scheme_end = par.end ()
- break
- # Copy the Scheme expression to output:
- result = result + str[:scheme_end]
- str = str[scheme_end:]
- # Find next string or Scheme expression:
- match = string_or_scheme.search (str)
+ # Convert the preceding LilyPond code:
+ previous_chunk = str[:match.start()]
+ result = result + articulation_substitute (previous_chunk)
+ if match.group (1): # Found a string
+ # Copy the string to output:
+ result = result + match.group (1)
+ str = str[match.end(1):]
+ else: # Found a Scheme expression. Count
+ # matching parentheses to find its end
+ str = str[match.start ():]
+ nesting_level = 0
+ pars = re.finditer(r"[()]",str)
+ for par in pars:
+ if par.group () == '(':
+ nesting_level = nesting_level + 1
+ else:
+ nesting_level = nesting_level - 1
+ if nesting_level == 0:
+ scheme_end = par.end ()
+ break
+ # Copy the Scheme expression to output:
+ result = result + str[:scheme_end]
+ str = str[scheme_end:]
+ # Find next string or Scheme expression:
+ match = string_or_scheme.search (str)
# Convert the remainder of the file
result = result + articulation_substitute (str)
return result
def conv_relative(str):
if re.search (r"\\relative", str):
- str= "#(ly:set-option 'old-relative)\n" + str
+ str= "#(ly:set-option 'old-relative)\n" + str
return str
@rule ((1, 9, 1), _ ("Remove - before articulation"))
def conv (str):
if re.search ("font-style",str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "font-style")
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "font-style")
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
- raise FatalConversionError ()
+ raise FatalConversionError ()
str = re.sub (r'-\\markup', r'@\\markup', str)
str = re.sub (r'-\\', r'\\', str)
@rule ((1, 9, 2), "\\newcontext -> \\new")
def conv (str):
str = re.sub ('ly:set-context-property',
- 'ly:set-context-property!', str)
+ 'ly:set-context-property!', str)
str = re.sub ('\\\\newcontext', '\\\\new', str)
str = re.sub ('\\\\grace[\t\n ]*([^{ ]+)',
- r'\\grace { \1 }', str)
+ r'\\grace { \1 }', str)
str = re.sub ("\\\\grace[\t\n ]*{([^}]+)}",
- r"""\\grace {
+ r"""\\grace {
\\property Voice.Stem \\override #'stroke-style = #"grace"
\1
\\property Voice.Stem \\revert #'stroke-style }
", fingerHorizontalDirection -> fingeringOrientations")
def conv (str):
str = re.sub ('accacciatura',
- 'acciaccatura', str)
+ 'acciaccatura', str)
if re.search ("context-spec-music", str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "context-spec-music")
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "context-spec-music")
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
- raise FatalConversionError ()
+ raise FatalConversionError ()
str = re.sub ('fingerHorizontalDirection *= *#(LEFT|-1)',
- "fingeringOrientations = #'(up down left)", str)
+ "fingeringOrientations = #'(up down left)", str)
str = re.sub ('fingerHorizontalDirection *= *#(RIGHT|1)',
- "fingeringOrientations = #'(up down right)", str)
+ "fingeringOrientations = #'(up down right)", str)
return str
@rule ((1, 9, 4), _ ('Swap < > and << >>'))
def conv (str):
if re.search ('\\figures', str):
- warning (_ ("attempting automatic \\figures conversion. Check results!"));
+ warning (_ ("attempting automatic \\figures conversion. Check results!"));
def figures_replace (m):
- s = m.group (1)
- s = re.sub ('<', '@FIGOPEN@',s)
- s = re.sub ('>', '@FIGCLOSE@',s)
- return '\\figures { %s }' % s
+ s = m.group (1)
+ s = re.sub ('<', '@FIGOPEN@',s)
+ s = re.sub ('>', '@FIGCLOSE@',s)
+ return '\\figures { %s }' % s
str = re.sub (r'\\figures[ \t\n]*{([^}]+)}', figures_replace, str)
str = re.sub (r'\\<', '@STARTCRESC@', str)
@rule ((1, 9, 6), _ ('deprecate %s') % 'ly:get-font')
def conv (str):
if re.search ("ly:get-font", str) :
- stderr_write ('\n')
- stderr_write (NOT_SMART % "(ly:-get-font")
- stderr_write ('\n')
- stderr_write (FROM_TO \
- % ("(ly:paper-get-font (ly:grob-get-paper foo) .. )",
- "(ly:paper-get-font (ly:grob-get-paper foo) .. )"))
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "(ly:-get-font")
+ stderr_write ('\n')
+ stderr_write (FROM_TO \
+ % ("(ly:paper-get-font (ly:grob-get-paper foo) .. )",
+ "(ly:paper-get-font (ly:grob-get-paper foo) .. )"))
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ raise FatalConversionError ()
if re.search ("\\pitch *#", str) :
- stderr_write ('\n')
- stderr_write (NOT_SMART % "\\pitch")
- stderr_write ('\n')
- stderr_write (_ ("Use Scheme code to construct arbitrary note events."))
- stderr_write ('\n')
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "\\pitch")
+ stderr_write ('\n')
+ stderr_write (_ ("Use Scheme code to construct arbitrary note events."))
+ stderr_write ('\n')
- raise FatalConversionError ()
+ raise FatalConversionError ()
return str
remove \\outputproperty, move ly:verbose into ly:get-option'''))
def conv (str):
def sub_alteration (m):
- alt = m.group (3)
- alt = {
- '-1': 'FLAT',
- '-2': 'DOUBLE-FLAT',
- '0': 'NATURAL',
- '1': 'SHARP',
- '2': 'DOUBLE-SHARP',
- }[alt]
-
- return '(ly:make-pitch %s %s %s)' % (m.group(1), m.group (2),
- alt)
+ alt = m.group (3)
+ alt = {
+ '-1': 'FLAT',
+ '-2': 'DOUBLE-FLAT',
+ '0': 'NATURAL',
+ '1': 'SHARP',
+ '2': 'DOUBLE-SHARP',
+ }[alt]
+
+ return '(ly:make-pitch %s %s %s)' % (m.group(1), m.group (2),
+ alt)
str =re.sub ("\\(ly:make-pitch *([0-9-]+) *([0-9-]+) *([0-9-]+) *\\)",
- sub_alteration, str)
+ sub_alteration, str)
str = re.sub ("ly:verbose", "ly:get-option 'verbose", str)
m= re.search ("\\\\outputproperty #([^#]+)[\t\n ]*#'([^ ]+)", str)
if m:
- stderr_write (_ (\
- r"""\outputproperty found,
+ stderr_write (_ (\
+ r"""\outputproperty found,
Please hand-edit, using
\applyoutput #(outputproperty-compatibility %s '%s <GROB PROPERTY VALUE>)
as a substitution text.""") % (m.group (1), m.group (2)) )
- raise FatalConversionError ()
+ raise FatalConversionError ()
if re.search ("ly:(make-pitch|pitch-alteration)", str) \
- or re.search ("keySignature", str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "pitches")
- stderr_write ('\n')
- stderr_write (
- _ ("""The alteration field of Scheme pitches was multiplied by 2
+ or re.search ("keySignature", str):
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "pitches")
+ stderr_write ('\n')
+ stderr_write (
+ _ ("""The alteration field of Scheme pitches was multiplied by 2
to support quarter tone accidentals. You must update the following constructs manually:
* calls of ly:make-pitch and ly:pitch-alteration
* keySignature settings made with \property
"""))
- raise FatalConversionError ()
+ raise FatalConversionError ()
return str
@rule ((1, 9, 8), "dash-length -> dash-fraction")
def conv (str):
if re.search ("dash-length",str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "dash-length")
- stderr_write ('\n')
- stderr_write (FROM_TO % ("dash-length", "dash-fraction"))
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "dash-length")
+ stderr_write ('\n')
+ stderr_write (FROM_TO % ("dash-length", "dash-fraction"))
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ raise FatalConversionError ()
return str
@rule ((2, 1, 1), "font-relative-size -> font-size")
def conv (str):
def func(match):
- return "#'font-size = #%d" % (2*int (match.group (1)))
+ return "#'font-size = #%d" % (2*int (match.group (1)))
str =re.sub (r"#'font-relative-size\s*=\s*#\+?([0-9-]+)", func, str)
str =re.sub (r"#'font-family\s*=\s*#'ancient",
- r"#'font-family = #'music", str)
+ r"#'font-family = #'music", str)
return str
@rule ((2, 1, 4), _ ("removal of automaticMelismata; use melismaBusyProperties instead."))
def conv (str):
def func (match):
- c = match.group (1)
- b = match.group (2)
+ c = match.group (1)
+ b = match.group (2)
- if b == 't':
- if c == 'Score':
- return ''
- else:
- return r" \property %s.melismaBusyProperties \unset" % c
- elif b == 'f':
- return r"\property %s.melismaBusyProperties = #'(melismaBusy)" % c
+ if b == 't':
+ if c == 'Score':
+ return ''
+ else:
+ return r" \property %s.melismaBusyProperties \unset" % c
+ elif b == 'f':
+ return r"\property %s.melismaBusyProperties = #'(melismaBusy)" % c
str = re.sub (r"\\property ([a-zA-Z]+)\s*\.\s*automaticMelismata\s*=\s*##([ft])", func, str)
return str
""")
def conv (str):
str = re.sub (r'\\include\s*"paper([0-9]+)(-init)?.ly"',
- r"#(set-staff-size \1)", str)
+ r"#(set-staff-size \1)", str)
def sub_note (match):
- dur = ''
- log = int (match.group (1))
- dots = int (match.group (2))
+ dur = ''
+ log = int (match.group (1))
+ dots = int (match.group (2))
- if log >= 0:
- dur = '%d' % (1 << log)
- else:
- dur = { -1 : 'breve',
- -2 : 'longa',
- -3 : 'maxima'}[log]
+ if log >= 0:
+ dur = '%d' % (1 << log)
+ else:
+ dur = { -1 : 'breve',
+ -2 : 'longa',
+ -3 : 'maxima'}[log]
- dur += ('.' * dots)
+ dur += ('.' * dots)
- return r'\note #"%s" #%s' % (dur, match.group (3))
+ return r'\note #"%s" #%s' % (dur, match.group (3))
str = re.sub (r'\\note\s+#([0-9-]+)\s+#([0-9]+)\s+#([0-9.-]+)',
- sub_note, str)
+ sub_note, str)
return str
@rule ((2, 1, 14), "style = dotted -> dash-fraction = 0")
def conv (str):
str = re.sub (r"#'style\s*=\s*#'dotted-line",
- r"#'dash-fraction = #0.0 ", str)
+ r"#'dash-fraction = #0.0 ", str)
return str
@rule ((2, 1, 15), "LyricsVoice . instr(ument) -> vocalName")
def conv (str):
str = re.sub (r'LyricsVoice\s*\.\s*instrument\s*=\s*("[^"]*")',
- r'LyricsVoice . vocalName = \1', str)
+ r'LyricsVoice . vocalName = \1', str)
str = re.sub (r'LyricsVoice\s*\.\s*instr\s*=\s*("[^"]*")',
- r'LyricsVoice . vocNam = \1', str)
+ r'LyricsVoice . vocNam = \1', str)
return str
@rule ((2, 1, 16), '\\musicglyph #"accidentals-NUM" -> \\sharp/flat/etc.')
def conv (str):
def sub_acc (m):
- d = {
- '4': 'doublesharp',
- '3': 'threeqsharp',
- '2': 'sharp',
- '1': 'semisharp',
- '0': 'natural',
- '-1': 'semiflat',
- '-2': 'flat',
- '-3': 'threeqflat',
- '-4': 'doubleflat'}
- return '\\%s' % d[m.group (1)]
+ d = {
+ '4': 'doublesharp',
+ '3': 'threeqsharp',
+ '2': 'sharp',
+ '1': 'semisharp',
+ '0': 'natural',
+ '-1': 'semiflat',
+ '-2': 'flat',
+ '-3': 'threeqflat',
+ '-4': 'doubleflat'}
+ return '\\%s' % d[m.group (1)]
str = re.sub (r'\\musicglyph\s*#"accidentals-([0-9-]+)"',
- sub_acc, str)
+ sub_acc, str)
return str
def conv (str):
if re.search (r'\\partcombine', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "\\partcombine")
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "\\partcombine")
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ raise FatalConversionError ()
# this rule doesn't really work,
# too lazy to figure out why.
str = re.sub (r'\\context\s+Voice\s*=\s*one\s*\\partcombine\s+Voice\s*\\context\s+Thread\s*=\s*one(.*)\s*'
- + r'\\context\s+Thread\s*=\s*two',
- '\\\\newpartcombine\n\\1\n', str)
+ + r'\\context\s+Thread\s*=\s*two',
+ '\\\\newpartcombine\n\\1\n', str)
return str
Harmonic notes. Thread context removed. Lyrics context removed."""))
def conv (str):
if re.search ('include "drumpitch', str):
- stderr_write (_ ("Drums found. Enclose drum notes in \\drummode"))
+ stderr_write (_ ("Drums found. Enclose drum notes in \\drummode"))
str = re.sub (r'\\include "drumpitch-init.ly"','', str)
if re.search ('drums->paper', str):
- stderr_write (_ ("\n%s found. Check file manually!\n") % _("Drum notation"))
+ stderr_write (_ ("\n%s found. Check file manually!\n") % _("Drum notation"))
str = re.sub (r"""\\apply\s+#\(drums->paper\s+'([a-z]+)\)""",
- r"""\property DrumStaff.drumStyleTable = #\1-style""",
- str)
+ r"""\property DrumStaff.drumStyleTable = #\1-style""",
+ str)
if re.search ('Thread', str):
- stderr_write (_ ("\n%s found. Check file manually!\n") % "Thread");
+ stderr_write (_ ("\n%s found. Check file manually!\n") % "Thread");
str = re.sub (r"""(\\once\s*)?\\property\s+Thread\s*\.\s*NoteHead\s*"""
- + r"""\\(set|override)\s*#'style\s*=\s*#'harmonic"""
- + r"""\s+([a-z]+[,'=]*)([0-9]*\.*)"""
- ,r"""<\3\\harmonic>\4""", str)
+ + r"""\\(set|override)\s*#'style\s*=\s*#'harmonic"""
+ + r"""\s+([a-z]+[,'=]*)([0-9]*\.*)"""
+ ,r"""<\3\\harmonic>\4""", str)
str = re.sub (r"""\\new Thread""", """\context Voice""", str)
str = re.sub (r"""Thread""", """Voice""", str)
if re.search ('\bLyrics\b', str):
- stderr_write (_ ("\n%s found. Check file manually!\n") % "Lyrics");
+ stderr_write (_ ("\n%s found. Check file manually!\n") % "Lyrics");
str = re.sub (r"""LyricsVoice""", r"""L@ricsVoice""", str)
str = re.sub (r"""\bLyrics\b""", r"""LyricsVoice""", str)
str = re.sub (r'brew-new-markup-molecule', 'Text_item::print', str)
str = re.sub (r'LyricsVoice', 'Lyrics', str)
str = re.sub (r'tupletInvisible',
- r"TupletBracket \\set #'transparent", str)
-# str = re.sub (r'molecule', 'collage', str)
+ r"TupletBracket \\set #'transparent", str)
+# str = re.sub (r'molecule', 'collage', str)
#molecule -> collage
str = re.sub (r"\\property\s+[a-zA-Z]+\s*\.\s*[a-zA-Z]+\s*"
- + r"\\set\s*#'X-extent-callback\s*=\s*#Grob::preset_extent",
- "", str)
+ + r"\\set\s*#'X-extent-callback\s*=\s*#Grob::preset_extent",
+ "", str)
return str
""" % _ ("new syntax for property settings:"))
def conv (str):
str = re.sub (r'(\\property[^=]+)=\s*([-0-9]+)',
- r'\1= #\2', str)
+ r'\1= #\2', str)
str = re.sub (r'\\property\s+([^. ]+)\s*\.\s*([^\\=]+)\s*\\(set|override)',
- r"\\overrid@ \1.\2 ", str)
+ r"\\overrid@ \1.\2 ", str)
str = re.sub (r'\\property\s+([^. ]+)\s*\.\s*([^\\= ]+)\s*=\s*',
- r'\\s@t \1.\2 = ', str)
+ r'\\s@t \1.\2 = ', str)
str = re.sub (r'\\property\s+([^. ]+)\s*\.\s*([^\\= ]+)\s*\\unset',
- r'\\uns@t \1.\2 ', str)
+ r'\\uns@t \1.\2 ', str)
str = re.sub (r'\\property\s+([^. ]+)\s*\.\s*([^\\= ]+)\s*\\revert'
- + r"\s*#'([-a-z0-9_]+)",
- r"\\rev@rt \1.\2 #'\3", str)
+ + r"\s*#'([-a-z0-9_]+)",
+ r"\\rev@rt \1.\2 #'\3", str)
str = re.sub (r'Voice\.', '', str)
str = re.sub (r'Lyrics\.', '', str)
str = re.sub (r'ChordNames\.', '', str)
@rule ((2, 1, 23), _ ("Property setting syntax in \\translator{ }"))
def conv (str):
def subst_in_trans (match):
- s = match.group (0)
- s = re.sub (r'\s([a-zA-Z]+)\s*\\override',
- r' \\override \1', s)
- s = re.sub (r'\s([a-zA-Z]+)\s*\\set',
- r' \\override \1', s)
- s = re.sub (r'\s([a-zA-Z]+)\s*\\revert',
- r' \\revert \1', s)
- return s
+ s = match.group (0)
+ s = re.sub (r'\s([a-zA-Z]+)\s*\\override',
+ r' \\override \1', s)
+ s = re.sub (r'\s([a-zA-Z]+)\s*\\set',
+ r' \\override \1', s)
+ s = re.sub (r'\s([a-zA-Z]+)\s*\\revert',
+ r' \\revert \1', s)
+ return s
str = re.sub (r'\\(translator|with)\s*{[^}]+}', subst_in_trans, str)
def sub_abs (m):
- context = m.group ('context')
- d = m.groupdict ()
- if context:
- context = " '%s" % context[:-1] # -1: remove .
- else:
- context = ''
+ context = m.group ('context')
+ d = m.groupdict ()
+ if context:
+ context = " '%s" % context[:-1] # -1: remove .
+ else:
+ context = ''
- d['context'] = context
+ d['context'] = context
- return r"""#(override-auto-beam-setting %(prop)s %(num)s %(den)s%(context)s)""" % d
+ return r"""#(override-auto-beam-setting %(prop)s %(num)s %(den)s%(context)s)""" % d
str = re.sub (r"""\\override\s*(?P<context>[a-zA-Z]+\s*\.\s*)?autoBeamSettings"""
- +r"""\s*#(?P<prop>[^=]+)\s*=\s*#\(ly:make-moment\s+(?P<num>\d+)\s+(?P<den>\d)\s*\)""",
- sub_abs, str)
+ +r"""\s*#(?P<prop>[^=]+)\s*=\s*#\(ly:make-moment\s+(?P<num>\d+)\s+(?P<den>\d)\s*\)""",
+ sub_abs, str)
return str
str = re.sub (r'ly:get-broken-into', 'ly:spanner-broken-into', str)
str = re.sub (r'Melisma_engraver', 'Melisma_translator', str)
if re.search ("ly:get-paper-variable", str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "ly:paper-get-variable")
- stderr_write ('\n')
- stderr_write (_ ('use %s') % '(ly:paper-lookup (ly:grob-paper ))')
- stderr_write ('\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "ly:paper-get-variable")
+ stderr_write ('\n')
+ stderr_write (_ ('use %s') % '(ly:paper-lookup (ly:grob-paper ))')
+ stderr_write ('\n')
+ raise FatalConversionError ()
str = re.sub (r'\\defaultAccidentals', "#(set-accidental-style 'default)", str)
str = re.sub (r'\\voiceAccidentals', "#(set-accidental-style 'voice)", str)
@rule ((2, 1, 27), "property transposing -> tuning")
def conv (str):
def subst (m):
- g = int (m.group (2))
- o = g / 12
- g -= o * 12
- if g < 0:
- g += 12
- o -= 1
+ g = int (m.group (2))
+ o = g / 12
+ g -= o * 12
+ if g < 0:
+ g += 12
+ o -= 1
- lower_pitches = filter (lambda x : x <= g, [0, 2, 4, 5, 7, 9, 11, 12])
- s = len (lower_pitches) -1
- a = g - lower_pitches [-1]
+ lower_pitches = filter (lambda x : x <= g, [0, 2, 4, 5, 7, 9, 11, 12])
+ s = len (lower_pitches) -1
+ a = g - lower_pitches [-1]
- str = 'cdefgab' [s]
- str += ['eses', 'es', '', 'is', 'isis'][a + 2]
- if o < 0:
- str += ',' * (-o - 1)
- elif o >= 0:
- str += "'" * (o + 1)
+ str = 'cdefgab' [s]
+ str += ['eses', 'es', '', 'is', 'isis'][a + 2]
+ if o < 0:
+ str += ',' * (-o - 1)
+ elif o >= 0:
+ str += "'" * (o + 1)
- return '\\transposition %s ' % str
+ return '\\transposition %s ' % str
str = re.sub (r"\\set ([A-Za-z]+\s*\.\s*)?transposing\s*=\s*#([-0-9]+)",
- subst, str)
+ subst, str)
return str
def conv (str):
str = re.sub (r'\\threeq(flat|sharp)', r'\\sesqui\1', str)
str = re.sub (r'ly:stencil-get-extent',
- 'ly:stencil-extent', str)
+ 'ly:stencil-extent', str)
str = re.sub (r'ly:translator-find',
- 'ly:context-find', str)
+ 'ly:context-find', str)
str = re.sub ('ly:unset-context-property','ly:context-unset-property',
- str)
+ str)
str = re.sub (r'ly:get-mutable-properties',
- 'ly:mutable-music-properties',str)
+ 'ly:mutable-music-properties',str)
str = re.sub (r'centralCPosition',
- 'middleCPosition',str)
+ 'middleCPosition',str)
return str
@rule ((2, 1, 33), 'breakAlignOrder -> break-align-orders.')
def conv (str):
str = re.sub (r"(\\set\s+)?(?P<context>(Score\.)?)breakAlignOrder\s*=\s*#'(?P<list>[^\)]+)",
- r"\n\\override \g<context>BreakAlignment #'break-align-orders = "
- + "#(make-vector 3 '\g<list>)", str)
+ r"\n\\override \g<context>BreakAlignment #'break-align-orders = "
+ + "#(make-vector 3 '\g<list>)", str)
return str
@rule ((2, 1, 34), 'set-paper-size -> set-default-paper-size.')
def conv (str):
str = re.sub (r"\(set-paper-size",
- "(set-default-paper-size",str)
+ "(set-default-paper-size",str)
return str
@rule ((2, 1, 36), 'ly:mutable-music-properties -> ly:music-mutable-properties')
def conv (str):
str = re.sub (r"ly:mutable-music-properties",
- "ly:music-mutable-properties", str)
+ "ly:music-mutable-properties", str)
return str
@rule ((2, 3, 2), '\\FooContext -> \\Foo')
def conv (str):
if re.search ('textheight', str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "textheight")
- stderr_write ('\n')
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- stderr_write (
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "textheight")
+ stderr_write ('\n')
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ stderr_write (
_ ("""Page layout has been changed, using paper size and margins.
textheight is no longer used.
"""))
str = re.sub (r'\\OrchestralScoreContext', '\\Score', str)
def func(m):
- if m.group(1) not in ['RemoveEmptyStaff',
- 'AncientRemoveEmptyStaffContext',
- 'EasyNotation']:
- return '\\' + m.group (1)
- else:
- return m.group (0)
+ if m.group(1) not in ['RemoveEmptyStaff',
+ 'AncientRemoveEmptyStaffContext',
+ 'EasyNotation']:
+ return '\\' + m.group (1)
+ else:
+ return m.group (0)
str = re.sub (r'\\([a-zA-Z]+)Context\b', func, str)
def conv (str):
str = re.sub (r'\\consistsend', '\\consists', str)
str = re.sub (r'\\lyricsto\s+("?[a-zA-Z]+"?)(\s*\\new Lyrics\s*)?\\lyrics',
- r'\\lyricsto \1 \2', str)
+ r'\\lyricsto \1 \2', str)
return str
str = re.sub (r'\\addlyrics', r'\\oldaddlyrics', str)
str = re.sub (r'\\newlyrics', r'\\addlyrics', str)
if re.search (r"\\override\s*TextSpanner", str):
- stderr_write ("\nWarning: TextSpanner has been split into DynamicTextSpanner and TextSpanner\n")
+ stderr_write ("\nWarning: TextSpanner has been split into DynamicTextSpanner and TextSpanner\n")
return str
@rule ((2, 3, 11), '\\setMmRestFermata -> ^\\fermataMarkup')
def conv (str):
str = re.sub (r'\\setMmRestFermata\s+(R[0-9.*/]*)',
- r'\1^\\fermataMarkup', str)
+ r'\1^\\fermataMarkup', str)
return str
}""", str)
str = re.sub ('soloADue', 'printPartCombineTexts', str)
str = re.sub (r'\\applymusic\s*#notes-to-clusters',
- '\\makeClusters', str)
+ '\\makeClusters', str)
str = re.sub (r'pagenumber\s*=', 'firstpagenumber = ', str)
return str
def conv (str):
str = re.sub (r'(slur|stem|phrasingSlur|tie|dynamic|dots|tuplet|arpeggio|)Both', r'\1Neutral', str)
str = re.sub (r"\\applymusic\s*#\(remove-tag\s*'([a-z-0-9]+)\)",
- r"\\removeWithTag #'\1", str)
+ r"\\removeWithTag #'\1", str)
return str
str = re.sub (r'\\paper', r'\\layout', str)
str = re.sub (r'\\bookpaper', r'\\paper', str)
if re.search ('paper-set-staff-size', str):
- warning (_ ('''staff size should be changed at top-level
+ warning (_ ('''staff size should be changed at top-level
with
#(set-global-staff-size <STAFF-HEIGHT-IN-POINT>)
@rule ((2, 3, 23), r'\context Foo = NOTENAME -> \context Foo = "NOTENAME"')
def conv (str):
str = re.sub (r'\\context\s+([a-zA-Z]+)\s*=\s*([a-z]+)\s',
- r'\\context \1 = "\2" ',
- str )
+ r'\\context \1 = "\2" ',
+ str )
return str
@rule ((2, 3, 24), _ ('''regularize other identifiers'''))
def conv (str):
def sub(m):
- return regularize_id (m.group (1))
+ return regularize_id (m.group (1))
str = re.sub (r'(maintainer_email|maintainer_web|midi_stuff|gourlay_maxmeasures)',
- sub, str)
+ sub, str)
return str
@rule ((2, 5, 0), '\\quote -> \\quoteDuring')
def conv (str):
str = re.sub (r'\\quote\s+"?([a-zA-Z0-9]+)"?\s+([0-9.*/]+)',
- r'\\quoteDuring #"\1" { \skip \2 }',
- str)
+ r'\\quoteDuring #"\1" { \skip \2 }',
+ str)
return str
@rule ((2, 5, 1), 'ly:import-module -> ly:module-copy')
def conv (str):
str = re.sub (r'ly:import-module',
- r'ly:module-copy', str)
+ r'ly:module-copy', str)
return str
@rule ((2, 5, 2), '\markup .. < .. > .. -> \markup .. { .. } ..')
def conv (str):
str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<(([^>]|<[^>]*>)*)>',
- r'\\\1 {\2}', str)
+ r'\\\1 {\2}', str)
str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<(([^>]|<[^>]*>)*)>',
- r'\\\1 {\2}', str)
+ r'\\\1 {\2}', str)
str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<(([^>]|<[^>]*>)*)>',
- r'\\\1 {\2}', str)
+ r'\\\1 {\2}', str)
def get_markup (m):
- s = m.group (0)
- s = re.sub (r'''((\\"|})\s*){''', '\2 \\line {', s)
- return s
+ s = m.group (0)
+ s = re.sub (r'''((\\"|})\s*){''', '\2 \\line {', s)
+ return s
str = re.sub (r'\\markup\s*{([^}]|{[^}]*})*}', get_markup, str)
return str
@rule ((2, 5, 12), '\set Slur #\'dashed = #X -> \slurDashed')
def conv (str):
str = re.sub (r"\\override\s+(Voice\.)?Slur #'dashed\s*=\s*#\d*(\.\d+)?",
- r"\\slurDashed", str)
+ r"\\slurDashed", str)
return str
def conv (str):
input_encoding = 'latin1'
def func (match):
- encoding = match.group (1)
-
- # FIXME: automatic recoding of other than latin1?
- if encoding == 'latin1':
- return match.group (2)
-
- stderr_write ('\n')
- stderr_write (NOT_SMART % ("\\encoding: %s" % encoding))
- stderr_write ('\n')
- stderr_write (_ ("LilyPond source must be UTF-8"))
- stderr_write ('\n')
- if encoding == 'TeX':
- stderr_write (_ ("Try the texstrings backend"))
- stderr_write ('\n')
- else:
- stderr_write ( _("Do something like: %s") % \
- ("recode %s..utf-8 FILE" % encoding))
- stderr_write ('\n')
- stderr_write (_ ("Or save as UTF-8 in your editor"))
- stderr_write ('\n')
- raise FatalConversionError ()
-
- return match.group (0)
+ encoding = match.group (1)
+
+ # FIXME: automatic recoding of other than latin1?
+ if encoding == 'latin1':
+ return match.group (2)
+
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % ("\\encoding: %s" % encoding))
+ stderr_write ('\n')
+ stderr_write (_ ("LilyPond source must be UTF-8"))
+ stderr_write ('\n')
+ if encoding == 'TeX':
+ stderr_write (_ ("Try the texstrings backend"))
+ stderr_write ('\n')
+ else:
+ stderr_write ( _("Do something like: %s") % \
+ ("recode %s..utf-8 FILE" % encoding))
+ stderr_write ('\n')
+ stderr_write (_ ("Or save as UTF-8 in your editor"))
+ stderr_write ('\n')
+ raise FatalConversionError ()
+
+ return match.group (0)
str = re.sub (r'\\encoding\s+"?([a-zA-Z0-9]+)"?(\s+)', func, str)
de_input = codecs.getdecoder (input_encoding)
en_utf_8 = codecs.getencoder ('utf_8')
try:
- de_ascii (str)
+ de_ascii (str)
# only in python >= 2.3
# except UnicodeDecodeError:
except UnicodeError:
- # do not re-recode UTF-8 input
- try:
- de_utf_8 (str)
- #except UnicodeDecodeError:
- except UnicodeError:
- str = en_utf_8 (de_input (str)[0])[0]
+ # do not re-recode UTF-8 input
+ try:
+ de_utf_8 (str)
+ #except UnicodeDecodeError:
+ except UnicodeError:
+ str = en_utf_8 (de_input (str)[0])[0]
@rule ((2, 5, 17), _ ('remove %s') % 'ly:stencil-set-extent!')
def conv (str):
if re.search ("ly:stencil-set-extent!", str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "ly:stencil-set-extent!")
- stderr_write ('\n')
- stderr_write ('use (set! VAR (ly:make-stencil (ly:stencil-expr VAR) X-EXT Y-EXT))\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "ly:stencil-set-extent!")
+ stderr_write ('\n')
+ stderr_write ('use (set! VAR (ly:make-stencil (ly:stencil-expr VAR) X-EXT Y-EXT))\n')
+ raise FatalConversionError ()
if re.search ("ly:stencil-align-to!", str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % "ly:stencil-align-to!")
- stderr_write ('\n')
- stderr_write ('use (set! VAR (ly:stencil-aligned-to VAR AXIS DIR))\n')
- raise FatalConversionError ()
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % "ly:stencil-align-to!")
+ stderr_write ('\n')
+ stderr_write ('use (set! VAR (ly:stencil-aligned-to VAR AXIS DIR))\n')
+ raise FatalConversionError ()
return str
def conv (str):
if re.search ("(override-|revert-)auto-beam-setting", str)\
or re.search ("autoBeamSettings", str):
- stderr_write ('\n')
- stderr_write (NOT_SMART % _ ("auto beam settings"))
- stderr_write ('\n')
- stderr_write (_ ('''
+ stderr_write ('\n')
+ stderr_write (NOT_SMART % _ ("auto beam settings"))
+ stderr_write ('\n')
+ stderr_write (_ ('''
Auto beam settings must now specify each interesting moment in a measure
explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.
'''))
- stderr_write (UPDATE_MANUALLY)
- stderr_write ('\n')
- raise FatalConversionError ()
+ stderr_write (UPDATE_MANUALLY)
+ stderr_write ('\n')
+ raise FatalConversionError ()
return str
str = re.sub('ly:parser-define', 'ly:parser-define!', str)
str = re.sub('excentricity', 'eccentricity', str)
str = re.sub(r'\\(consists|remove) *"?Timing_engraver"?',
- r'\\\1 "Timing_translator" \\\1 "Default_bar_line_engraver"',
- str)
+ r'\\\1 "Timing_translator" \\\1 "Default_bar_line_engraver"',
+ str)
return str
str = re.sub('Performer_group_performer', 'Performer_group', str)
str = re.sub('Engraver_group_engraver', 'Engraver_group', str)
str = re.sub (r"#'inside-slur\s*=\s*##t *",
- r"#'avoid-slur = #'inside ", str)
+ r"#'avoid-slur = #'inside ", str)
str = re.sub (r"#'inside-slur\s*=\s*##f *",
- r"#'avoid-slur = #'around ", str)
+ r"#'avoid-slur = #'around ", str)
str = re.sub (r"#'inside-slur",
- r"#'avoid-slur", str)
+ r"#'avoid-slur", str)
return str
@rule ((2, 7, 13), 'layout engine refactoring [FIXME]')
def conv (str):
def subber (match):
- newkey = {'spacing-procedure': 'springs-and-rods',
- 'after-line-breaking-callback' : 'after-line-breaking',
- 'before-line-breaking-callback' : 'before-line-breaking',
- 'print-function' : 'stencil'} [match.group(3)]
- what = match.group (1)
- grob = match.group (2)
-
- if what == 'revert':
- return "revert %s #'callbacks %% %s\n" % (grob, newkey)
- elif what == 'override':
- return "override %s #'callbacks #'%s" % (grob, newkey)
- else:
- raise 'urg'
- return ''
+ newkey = {'spacing-procedure': 'springs-and-rods',
+ 'after-line-breaking-callback' : 'after-line-breaking',
+ 'before-line-breaking-callback' : 'before-line-breaking',
+ 'print-function' : 'stencil'} [match.group(3)]
+ what = match.group (1)
+ grob = match.group (2)
+
+ if what == 'revert':
+ return "revert %s #'callbacks %% %s\n" % (grob, newkey)
+ elif what == 'override':
+ return "override %s #'callbacks #'%s" % (grob, newkey)
+ else:
+ raise 'urg'
+ return ''
str = re.sub(r"(override|revert)\s*([a-zA-Z.]+)\s*#'(spacing-procedure|after-line-breaking-callback"
- + r"|before-line-breaking-callback|print-function)",
- subber, str)
+ + r"|before-line-breaking-callback|print-function)",
+ subber, str)
if re.search ('bar-size-procedure', str):
- stderr_write (NOT_SMART % "bar-size-procedure")
+ stderr_write (NOT_SMART % "bar-size-procedure")
if re.search ('space-function', str):
- stderr_write (NOT_SMART % "space-function")
+ stderr_write (NOT_SMART % "space-function")
if re.search ('verticalAlignmentChildCallback', str):
- stderr_write (_ ('verticalAlignmentChildCallback has been deprecated'))
+ stderr_write (_ ('verticalAlignmentChildCallback has been deprecated'))
return str
@rule ((2, 7, 14), _ ('Remove callbacks property, deprecate XY-extent-callback.'))
def conv (str):
str = re.sub (r"\\override +([A-Z.a-z]+) #'callbacks",
- r"\\override \1", str)
+ r"\\override \1", str)
str = re.sub (r"\\revert ([A-Z.a-z]+) #'callbacks % ([a-zA-Z]+)",
- r"\\revert \1 #'\2", str)
+ r"\\revert \1 #'\2", str)
str = re.sub (r"([XY]-extent)-callback", r'\1', str)
str = re.sub (r"RemoveEmptyVerticalGroup", "VerticalAxisGroup", str)
str = re.sub (r"\\set ([a-zA-Z]*\.?)minimumVerticalExtent",
- r"\\override \1VerticalAxisGroup #'minimum-Y-extent",
- str)
+ r"\\override \1VerticalAxisGroup #'minimum-Y-extent",
+ str)
str = re.sub (r"minimumVerticalExtent",
- r"\\override VerticalAxisGroup #'minimum-Y-extent",
- str)
+ r"\\override VerticalAxisGroup #'minimum-Y-extent",
+ str)
str = re.sub (r"\\set ([a-zA-Z]*\.?)extraVerticalExtent",
- r"\\override \1VerticalAxisGroup #'extra-Y-extent", str)
+ r"\\override \1VerticalAxisGroup #'extra-Y-extent", str)
str = re.sub (r"\\set ([a-zA-Z]*\.?)verticalExtent",
- r"\\override \1VerticalAxisGroup #'Y-extent", str)
+ r"\\override \1VerticalAxisGroup #'Y-extent", str)
return str
@rule ((2, 7, 15), _ ('Use grob closures iso. XY-offset-callbacks.'))
def conv (str):
if re.search ('[XY]-offset-callbacks', str):
- stderr_write (NOT_SMART % "[XY]-offset-callbacks")
+ stderr_write (NOT_SMART % "[XY]-offset-callbacks")
if re.search ('position-callbacks', str):
- stderr_write (NOT_SMART % "position-callbacks")
+ stderr_write (NOT_SMART % "position-callbacks")
return str
@rule ((2, 7, 22), r"\tag #'(a b) -> \tag #'a \tag #'b")
def conv (str):
def sub_syms (m):
- syms = m.group (1).split ()
- tags = ["\\tag #'%s" % s for s in syms]
- return ' '.join (tags)
+ syms = m.group (1).split ()
+ tags = ["\\tag #'%s" % s for s in syms]
+ return ' '.join (tags)
str = re.sub (r"\\tag #'\(([^)]+)\)", sub_syms, str)
return str
@rule ((2, 7, 24), _ ('deprecate %s') % 'number-visibility')
def conv (str):
str = re.sub (r"#'number-visibility",
- "#'number-visibility % number-visibility is deprecated. Tune the TupletNumber instead\n",
- str)
+ "#'number-visibility % number-visibility is deprecated. Tune the TupletNumber instead\n",
+ str)
return str
def conv (str):
for a in ['beamed-lengths', 'beamed-minimum-free-lengths',
'lengths',
- 'beamed-extreme-minimum-free-lengths']:
- str = re.sub (r"\\override\s+Stem\s+#'%s" % a,
- r"\\override Stem #'details #'%s" % a,
- str)
+ 'beamed-extreme-minimum-free-lengths']:
+ str = re.sub (r"\\override\s+Stem\s+#'%s" % a,
+ r"\\override Stem #'details #'%s" % a,
+ str)
return str
@rule ((2, 7, 31), "Foo_bar::bla_bla -> ly:foo-bar::bla-bla")
def conv (str):
def sub_cxx_id (m):
- str = m.group(1)
- return 'ly:' + str.lower ().replace ('_','-')
+ str = m.group(1)
+ return 'ly:' + str.lower ().replace ('_','-')
str = re.sub (r'([A-Z][a-z_0-9]+::[a-z_0-9]+)',
- sub_cxx_id, str)
+ sub_cxx_id, str)
return str
@rule ((2, 7, 32), _ ("foobar -> foo-bar for \paper, \layout"))
def conv (str):
identifier_subs = [
- ('inputencoding', 'input-encoding'),
- ('printpagenumber', 'print-page-number'),
- ('outputscale', 'output-scale'),
- ('betweensystemspace', 'between-system-space'),
- ('betweensystempadding', 'between-system-padding'),
- ('pagetopspace', 'page-top-space'),
- ('raggedlastbottom', 'ragged-last-bottom'),
- ('raggedright', 'ragged-right'),
- ('raggedlast', 'ragged-last'),
- ('raggedbottom', 'ragged-bottom'),
- ('aftertitlespace', 'after-title-space'),
- ('beforetitlespace', 'before-title-space'),
- ('betweentitlespace', 'between-title-space'),
- ('topmargin', 'top-margin'),
- ('bottommargin', 'bottom-margin'),
- ('headsep', 'head-separation'),
- ('footsep', 'foot-separation'),
- ('rightmargin', 'right-margin'),
- ('leftmargin', 'left-margin'),
- ('printfirstpagenumber', 'print-first-page-number'),
- ('firstpagenumber', 'first-page-number'),
- ('hsize', 'paper-width'),
- ('vsize', 'paper-height'),
- ('horizontalshift', 'horizontal-shift'),
- ('staffspace', 'staff-space'),
- ('linethickness', 'line-thickness'),
- ('ledgerlinethickness', 'ledger-line-thickness'),
- ('blotdiameter', 'blot-diameter'),
- ('staffheight', 'staff-height'),
- ('linewidth', 'line-width'),
- ('annotatespacing', 'annotate-spacing')
- ]
+ ('inputencoding', 'input-encoding'),
+ ('printpagenumber', 'print-page-number'),
+ ('outputscale', 'output-scale'),
+ ('betweensystemspace', 'between-system-space'),
+ ('betweensystempadding', 'between-system-padding'),
+ ('pagetopspace', 'page-top-space'),
+ ('raggedlastbottom', 'ragged-last-bottom'),
+ ('raggedright', 'ragged-right'),
+ ('raggedlast', 'ragged-last'),
+ ('raggedbottom', 'ragged-bottom'),
+ ('aftertitlespace', 'after-title-space'),
+ ('beforetitlespace', 'before-title-space'),
+ ('betweentitlespace', 'between-title-space'),
+ ('topmargin', 'top-margin'),
+ ('bottommargin', 'bottom-margin'),
+ ('headsep', 'head-separation'),
+ ('footsep', 'foot-separation'),
+ ('rightmargin', 'right-margin'),
+ ('leftmargin', 'left-margin'),
+ ('printfirstpagenumber', 'print-first-page-number'),
+ ('firstpagenumber', 'first-page-number'),
+ ('hsize', 'paper-width'),
+ ('vsize', 'paper-height'),
+ ('horizontalshift', 'horizontal-shift'),
+ ('staffspace', 'staff-space'),
+ ('linethickness', 'line-thickness'),
+ ('ledgerlinethickness', 'ledger-line-thickness'),
+ ('blotdiameter', 'blot-diameter'),
+ ('staffheight', 'staff-height'),
+ ('linewidth', 'line-width'),
+ ('annotatespacing', 'annotate-spacing')
+ ]
for (a,b) in identifier_subs:
- ### for C++:
- ## str = re.sub ('"%s"' % a, '"%s"' b, str)
+ ### for C++:
+ ## str = re.sub ('"%s"' % a, '"%s"' b, str)
- str = re.sub (a, b, str)
+ str = re.sub (a, b, str)
return str
@rule ((2, 7, 40), "rehearsalMarkAlignSymbol/barNumberAlignSymbol -> break-align-symbol")
def conv (str):
str = re.sub (r'\\set\s+Score\s*\.\s*barNumberAlignSymbol\s*=',
- r"\\override Score.BarNumber #'break-align-symbol = ", str)
+ r"\\override Score.BarNumber #'break-align-symbol = ", str)
str = re.sub (r'\\set\s*Score\s*\.\s*rehearsalMarkAlignSymbol\s*=',
- r"\\override Score.RehearsalMark #'break-align-symbol = ", str)
+ r"\\override Score.RehearsalMark #'break-align-symbol = ", str)
return str
if re.search ('tupletNumberFormatFunction', str):
stderr_write ("\n")
- stderr_write ("tupletNumberFormatFunction has been removed. Use #'text property on TupletNumber")
+ stderr_write ("tupletNumberFormatFunction has been removed. Use #'text property on TupletNumber")
stderr_write ("\n")
return str
str)
if re.search ('edge-text', str):
- stderr_write (NOT_SMART % _ ("edge-text settings for TextSpanner."))
- stderr_write (_ ("Use\n\n%s") %
+ stderr_write (NOT_SMART % _ ("edge-text settings for TextSpanner."))
+ stderr_write (_ ("Use\n\n%s") %
"\t\\override TextSpanner #'bound-details #'right #'text = <right-text>\n"
"\t\\override TextSpanner #'bound-details #'left #'text = <left-text>\n")
return str
r"scripts.caesura.curved", str)
if re.search ('dash-fraction', str):
- stderr_write (NOT_SMART % _ ("all settings related to dashed lines.\n"))
- stderr_write (_ ("Use \\override ... #'style = #'line for solid lines and\n"))
- stderr_write (_ ("\t\\override ... #'style = #'dashed-line for dashed lines."))
+ stderr_write (NOT_SMART % _ ("all settings related to dashed lines.\n"))
+ stderr_write (_ ("Use \\override ... #'style = #'line for solid lines and\n"))
+ stderr_write (_ ("\t\\override ... #'style = #'dashed-line for dashed lines."))
return str
def conv (str):
## warning 1/2: metronomeMarkFormatter uses text markup as second argument
if re.search ('metronomeMarkFormatter', str):
- stderr_write (NOT_SMART % _ ("metronomeMarkFormatter got an additional text argument.\n"))
- stderr_write (_ ("The function assigned to Score.metronomeMarkFunction now uses the signature\n%s") %
+ stderr_write (NOT_SMART % _ ("metronomeMarkFormatter got an additional text argument.\n"))
+ stderr_write (_ ("The function assigned to Score.metronomeMarkFunction now uses the signature\n%s") %
"\t(format-metronome-markup text dur count context)\n")
## warning 2/2: fret diagram properties moved to fret-diagram-details
def conv (str):
str = re.sub (r"#\(set-octavation (-*[0-9]+)\)", r"\\ottava #\1", str)
if re.search ('put-adjacent', str):
- stderr_write (NOT_SMART % _ ("\\put-adjacent argument order.\n"))
- stderr_write (_ ("Axis and direction now come before markups:\n"))
- stderr_write (_ ("\\put-adjacent axis dir markup markup."))
+ stderr_write (NOT_SMART % _ ("\\put-adjacent argument order.\n"))
+ stderr_write (_ ("Axis and direction now come before markups:\n"))
+ stderr_write (_ ("\\put-adjacent axis dir markup markup."))
return str
@rule ((2, 11, 57), "\\center-align -> \\center-column, \\hcenter -> \\center-align")
\"accordion.accEtcbase\" -> \"accordion.etcbass\""))
def conv(str):
def sub_acc (m):
- d = {
+ d = {
'Dot': 'dot',
'Discant': 'discant',
'Bayanbase': 'bayanbass',
'Freebase': 'freebass',
'OldEE': 'oldEE'
}
- return '"accordion.%s"' % d[m.group (1)]
+ return '"accordion.%s"' % d[m.group (1)]
str = re.sub (r'"accordion\.acc([a-zA-Z]+)"',
- sub_acc, str)
+ sub_acc, str)
if re.search(r'overrideBeamSettings', str):
stderr_write("\n")
stderr_write(NOT_SMART % _("\\overrideBeamSettings. Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"))
str = re.sub (r'\(space\s+\.\s+([0-9]*\.?[0-9]*)\)', r'(basic-distance . \1)', str)
str = re.sub (r"#'space\s+=\s+#?([0-9]*\.?[0-9]*)", r"#'basic-distance = #\1", str)
if re.search (r'HarmonicParenthesesItem', str):
- stderr_write ("\n")
- stderr_write (NOT_SMART % ("HarmonicParenthesesItem.\n"))
- stderr_write (_ ("HarmonicParenthesesItem has been eliminated.\n"))
- stderr_write (_ ("Harmonic parentheses are part of the TabNoteHead grob.\n"))
- stderr_write (UPDATE_MANUALLY);
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % ("HarmonicParenthesesItem.\n"))
+ stderr_write (_ ("HarmonicParenthesesItem has been eliminated.\n"))
+ stderr_write (_ ("Harmonic parentheses are part of the TabNoteHead grob.\n"))
+ stderr_write (UPDATE_MANUALLY);
return str
@rule ((2, 13, 44),
def conv(str):
def semitones2pitch(semitones):
- steps = [0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6]
- alterations = ["NATURAL", "SHARP", "NATURAL", "SHARP", "NATURAL", "NATURAL", "SHARP", "NATURAL", "SHARP", "NATURAL", "SHARP", "NATURAL"]
- octave = 0
- while semitones > 11:
- octave += 1
- semitones -=12
- while semitones < 0:
- octave -= 1
- semitones += 12
- pitchArgs = "%d %d %s" % (octave, steps[semitones], alterations[semitones])
- return pitchArgs
+ steps = [0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6]
+ alterations = ["NATURAL", "SHARP", "NATURAL", "SHARP", "NATURAL", "NATURAL", "SHARP", "NATURAL", "SHARP", "NATURAL", "SHARP", "NATURAL"]
+ octave = 0
+ while semitones > 11:
+ octave += 1
+ semitones -=12
+ while semitones < 0:
+ octave -= 1
+ semitones += 12
+ pitchArgs = "%d %d %s" % (octave, steps[semitones], alterations[semitones])
+ return pitchArgs
def convert_tones (semitone_list):
- tones = semitone_list.split ()
- res = ""
- for tone in tones:
- args = semitones2pitch(int(tone))
- res += ",(ly:make-pitch " + args + ") "
- return res
+ tones = semitone_list.split ()
+ res = ""
+ for tone in tones:
+ args = semitones2pitch(int(tone))
+ res += ",(ly:make-pitch " + args + ") "
+ return res
def new_tunings (matchobj):
- return "stringTunings = #`(" + convert_tones(matchobj.group(1)) + ")"
+ return "stringTunings = #`(" + convert_tones(matchobj.group(1)) + ")"
str = re.sub (r"stringTunings\s*=\s*#'\(([\d\s-]*)\)", \
new_tunings , str)
@rule ((2, 13, 51),
_ ("Woodwind diagrams: Changes to the clarinet diagram."))
def conv(str):
- if re.search(r'\\woodwind-diagram\s*#[^#]*clarinet\s', str):
- stderr_write("\n")
- stderr_write(NOT_SMART % _("woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of instrument.\n"))
- stderr_write(UPDATE_MANUALLY)
+ if re.search (r'\\woodwind-diagram\s*#[^#]*clarinet\s', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("woodwind-diagrams. Clarinet fingering changed to reflect actual anatomy of instrument.\n"))
+ stderr_write (UPDATE_MANUALLY)
return str
@rule ((2, 14, 0),
def conv (str):
return str
+@rule ((2, 15, 2),
+ _ ("Change in internal property for MultiMeasureRest"))
+def conv (str):
+ if re.search (r'use-breve-rest',str):
+ stderr_write (NOT_SMART % _("use-breve-rest. This internal property has been replaced by round-to-longer-rest and usable-duration-logs.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ return str
+
+@rule ((2, 15, 7),
+ _ ("Handling of non-automatic footnotes."))
+def conv(str):
+ if re.search (r'\\footnote', str):
+ stderr_write ("\n")
+ stderr_write (NOT_SMART % _("If you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.\n"))
+ stderr_write (UPDATE_MANUALLY)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
_ = gettext.gettext
except:
def _ (s):
- return s
+ return s
def scan_files (files):
file_of_font_dict = {}
for f in files:
- if verbose:
- sys.stderr.write (_('Scanning %s') % f + '\n')
+ if verbose:
+ sys.stderr.write (_('Scanning %s') % f + '\n')
- header = open (f, 'r').read ()
- idx = 0
+ header = open (f, 'r').read ()
+ idx = 0
- extract_from_this = []
- while idx < len (header):
- match = dsr_font_regex.search (header[idx:])
- if not match:
- break
- name = match.group (1)
- idx += match.end (1)
- if file_of_font_dict.has_key (name):
- continue
+ extract_from_this = []
+ while idx < len (header):
+ match = dsr_font_regex.search (header[idx:])
+ if not match:
+ break
+ name = match.group (1)
+ idx += match.end (1)
+ if file_of_font_dict.has_key (name):
+ continue
- file_of_font_dict[name] = f
+ file_of_font_dict[name] = f
return file_of_font_dict
def get_file_fonts_dict (file_of_font_dict):
dict = {}
for (n, f) in file_of_font_dict.items ():
- if not dict.has_key (f):
- dict[f] = []
+ if not dict.has_key (f):
+ dict[f] = []
- dict[f].append (n)
+ dict[f].append (n)
return dict
def extract_fonts_from_file (extract_from_this, font_dict, filename):
if extract_from_this:
- curr_font = []
- curr_font_name = []
- in_font = 0
- for l in open (filename).readlines ():
- if not in_font and begin_font_regex.match (l):
- in_font = 1
- curr_font_name = begin_font_regex.match (l).group (1)
- curr_font = []
- elif in_font and end_font_regex.match (l):
- in_font = 0
-
- if curr_font_name in extract_from_this:
- font_dict[curr_font_name] = ''.join (curr_font)
- if verbose:
- sys.stderr.write (_('Extracted %s')
- % curr_font_name + '\n')
-
- extract_from_this.remove (curr_font_name)
- elif in_font:
- curr_font.append (l)
- if not extract_from_this:
- break
-
- if extract_from_this:
- sys.stderr.write ("Failed to extract %s from %s\n"
- % (', '.join (extract_from_this), filename))
+ curr_font = []
+ curr_font_name = []
+ in_font = 0
+ for l in open (filename).readlines ():
+ if not in_font and begin_font_regex.match (l):
+ in_font = 1
+ curr_font_name = begin_font_regex.match (l).group (1)
+ curr_font = []
+ elif in_font and end_font_regex.match (l):
+ in_font = 0
+
+ if curr_font_name in extract_from_this:
+ font_dict[curr_font_name] = ''.join (curr_font)
+ if verbose:
+ sys.stderr.write (_('Extracted %s')
+ % curr_font_name + '\n')
+
+ extract_from_this.remove (curr_font_name)
+ elif in_font:
+ curr_font.append (l)
+ if not extract_from_this:
+ break
+
+ if extract_from_this:
+ sys.stderr.write ("Failed to extract %s from %s\n"
+ % (', '.join (extract_from_this), filename))
def write_extracted_fonts (output_file_name, font_dict):
if verbose:
- sys.stderr.write( _('Writing fonts to %s') % output_file_name + '\n')
+ sys.stderr.write( _('Writing fonts to %s') % output_file_name + '\n')
output = open (output_file_name, 'w')
output.write ('''%!PS-Adobe-3.0
%%VMusage: 0 0
''')
for x in font_dict.keys ():
- output.write ('%%%%DocumentSuppliedResources: font %s\n' % x)
+ output.write ('%%%%DocumentSuppliedResources: font %s\n' % x)
output.write ('''%%EndComments\n''')
for (k,v) in font_dict.items ():
- output.write ('\n%%%%BeginFont: %s\n' % k)
- output.write (v)
- output.write ('\n%%EndFont')
+ output.write ('\n%%%%BeginFont: %s\n' % k)
+ output.write (v)
+ output.write ('\n%%EndFont')
def extract_fonts (output_file_name, input_files):
font_dict = {}
for (file, fonts) in ff.items ():
- extract_fonts_from_file (fonts, font_dict, file)
+ extract_fonts_from_file (fonts, font_dict, file)
write_extracted_fonts (output_file_name, font_dict)
import shutil
import sys
import optparse
+import time
################################################################
# Users of python modules should include this snippet
_ = t.ugettext
except:
def _ (s):
- return s
+ return s
underscore = _
# Urg, Python 2.4 does not define stderr/stdout encoding
ignore_error=False,
progress_p=True,
be_verbose=False,
+ redirect_output=False,
log_file=None):
import subprocess
name = command_name (cmd)
error_log_file = ''
- if be_verbose:
- show_progress = 1
- progress (_ ("Invoking `%s\'") % cmd)
+ if redirect_output:
+ progress (_ ("Processing %s.ly") % log_file)
else:
- progress ( _("Running %s...") % name)
-
+ if be_verbose:
+ show_progress = 1
+ progress (_ ("Invoking `%s\'") % cmd)
+ else:
+ progress ( _("Running %s...") % name)
stdout_setting = None
+ stderr_setting = None
if not show_progress:
- stdout_setting = subprocess.PIPE
+ stdout_setting = subprocess.PIPE
+
+ if redirect_output:
+ stdout_filename = ' '.join([log_file, '.log'])
+ stderr_filename = ' '.join([log_file, '.err.log'])
+ stdout_setting = open(stdout_filename, 'w')
+ stderr_setting = open(stderr_filename, 'w')
proc = subprocess.Popen (cmd,
- shell=True,
- universal_newlines=True,
- stdout=stdout_setting,
- stderr=stdout_setting)
+ shell=True,
+ universal_newlines=True,
+ stdout=stdout_setting,
+ stderr=stderr_setting)
log = ''
- if show_progress:
- retval = proc.wait()
+ if redirect_output:
+ while proc.poll()==None:
+ time.sleep(1)
+ retval = proc.returncode
+ stdout_setting.close()
+ stderr_setting.close()
else:
- log = proc.communicate ()
- retval = proc.returncode
-
+ if show_progress:
+ retval = proc.wait()
+ else:
+ log = proc.communicate ()
+ retval = proc.returncode
if retval:
- print >>sys.stderr, 'command failed:', cmd
- if retval < 0:
- print >>sys.stderr, "Child was terminated by signal", -retval
- elif retval > 0:
- print >>sys.stderr, "Child returned", retval
-
- if ignore_error:
- print >>sys.stderr, "Error ignored"
- else:
- if not show_progress:
- print log[0]
- print log[1]
- sys.exit (1)
+ print >>sys.stderr, 'command failed:', cmd
+ if retval < 0:
+ print >>sys.stderr, "Child was terminated by signal", -retval
+ elif retval > 0:
+ print >>sys.stderr, "Child returned", retval
+
+ if ignore_error:
+ print >>sys.stderr, "Error ignored"
+ else:
+ if not show_progress:
+ print log[0]
+ print log[1]
+ sys.exit (1)
return abs (retval)
name = command_name (cmd)
if be_verbose:
- show_progress = 1
- progress (_ ("Invoking `%s\'") % cmd)
+ show_progress = 1
+ progress (_ ("Invoking `%s\'") % cmd)
else:
- progress ( _("Running %s...") % name)
+ progress ( _("Running %s...") % name)
retval = os.system (cmd)
if retval:
- print >>sys.stderr, 'command failed:', cmd
- if retval < 0:
- print >>sys.stderr, "Child was terminated by signal", -retval
- elif retval > 0:
- print >>sys.stderr, "Child returned", retval
+ print >>sys.stderr, 'command failed:', cmd
+ if retval < 0:
+ print >>sys.stderr, "Child was terminated by signal", -retval
+ elif retval > 0:
+ print >>sys.stderr, "Child returned", retval
- if ignore_error:
- print >>sys.stderr, "Error ignored"
- else:
- sys.exit (1)
+ if ignore_error:
+ print >>sys.stderr, "Error ignored"
+ else:
+ sys.exit (1)
return abs (retval)
def strip_extension (f, ext):
(p, e) = os.path.splitext (f)
if e == ext:
- e = ''
+ e = ''
return p + e
p = os.environ['PATH']
exe_paths = p.split (':')
for e in exe_paths:
- full = os.path.join (e, name)
- if os.path.exists (full):
- return full
+ full = os.path.join (e, name)
+ if os.path.exists (full):
+ return full
return None
def print_environment ():
for (k,v) in os.environ.items ():
- sys.stderr.write ("%s=\"%s\"\n" % (k, v))
+ sys.stderr.write ("%s=\"%s\"\n" % (k, v))
class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter):
def format_heading(self, heading):
- if heading:
- return heading[0].upper() + heading[1:] + ':\n'
- return ''
+ if heading:
+ return heading[0].upper() + heading[1:] + ':\n'
+ return ''
def format_option_strings(self, option):
- sep = ' '
- if option._short_opts and option._long_opts:
- sep = ','
+ sep = ' '
+ if option._short_opts and option._long_opts:
+ sep = ','
- metavar = ''
- if option.takes_value():
- metavar = '=%s' % option.metavar or option.dest.upper()
+ metavar = ''
+ if option.takes_value():
+ metavar = '=%s' % option.metavar or option.dest.upper()
- return "%3s%s %s%s" % (" ".join (option._short_opts),
- sep,
- " ".join (option._long_opts),
- metavar)
+ return "%3s%s %s%s" % (" ".join (option._short_opts),
+ sep,
+ " ".join (option._long_opts),
+ metavar)
# Only use one level of indentation (even for groups and nested groups),
# since we don't indent the headeings, either
return _("Usage: %s") % usage + '\n'
def format_description(self, description):
- return description
+ return description
def get_option_parser (*args, **kwargs):
p = optparse.OptionParser (*args, **kwargs)
class Xml_node:
def __init__ (self):
- self._children = []
- self._data = None
- self._original = None
- self._name = 'xml_node'
- self._parent = None
+ self._children = []
+ self._data = None
+ self._original = None
+ self._name = 'xml_node'
+ self._parent = None
self._attribute_dict = {}
def get_parent (self):
return self._parent
def is_first (self):
- return self._parent.get_typed_children (self.__class__)[0] == self
+ return self._parent.get_typed_children (self.__class__)[0] == self
def original (self):
- return self._original
+ return self._original
def get_name (self):
- return self._name
+ return self._name
def get_text (self):
- if self._data:
- return self._data
+ if self._data:
+ return self._data
- if not self._children:
- return ''
+ if not self._children:
+ return ''
- return ''.join ([c.get_text () for c in self._children])
+ return ''.join ([c.get_text () for c in self._children])
def message (self, msg):
ly.stderr_write (msg+'\n')
return [c for c in self._children if isinstance(c, klass)]
def get_named_children (self, nm):
- return self.get_typed_children (get_class (nm))
+ return self.get_typed_children (get_class (nm))
def get_named_child (self, nm):
- return self.get_maybe_exist_named_child (nm)
+ return self.get_maybe_exist_named_child (nm)
def get_children (self, predicate):
- return [c for c in self._children if predicate(c)]
+ return [c for c in self._children if predicate(c)]
def get_all_children (self):
- return self._children
+ return self._children
def get_maybe_exist_named_child (self, name):
- return self.get_maybe_exist_typed_child (get_class (name))
+ return self.get_maybe_exist_typed_child (get_class (name))
def get_maybe_exist_typed_child (self, klass):
- cn = self.get_typed_children (klass)
- if len (cn)==0:
- return None
- elif len (cn) == 1:
- return cn[0]
- else:
- raise "More than 1 child", klass
+ cn = self.get_typed_children (klass)
+ if len (cn)==0:
+ return None
+ elif len (cn) == 1:
+ return cn[0]
+ else:
+ raise "More than 1 child", klass
def get_unique_typed_child (self, klass):
- cn = self.get_typed_children(klass)
- if len (cn) <> 1:
- sys.stderr.write (self.__dict__ + '\n')
- raise 'Child is not unique for', (klass, 'found', cn)
+ cn = self.get_typed_children(klass)
+ if len (cn) <> 1:
+ sys.stderr.write (self.__dict__ + '\n')
+ raise 'Child is not unique for', (klass, 'found', cn)
- return cn[0]
+ return cn[0]
def get_named_child_value_number (self, name, default):
n = self.get_maybe_exist_named_child (name)
class Music_xml_node (Xml_node):
def __init__ (self):
- Xml_node.__init__ (self)
- self.duration = Rational (0)
- self.start = Rational (0)
+ Xml_node.__init__ (self)
+ self.duration = Rational (0)
+ self.start = Rational (0)
class Work (Xml_node):
def get_work_information (self, tag):
class Duration (Music_xml_node):
def get_length (self):
- dur = int (self.get_text ()) * Rational (1,4)
- return dur
+ dur = int (self.get_text ()) * Rational (1,4)
+ return dur
class Hash_comment (Music_xml_node):
pass
class Pitch (Music_xml_node):
def get_step (self):
- ch = self.get_unique_typed_child (get_class (u'step'))
- step = ch.get_text ().strip ()
- return step
+ ch = self.get_unique_typed_child (get_class (u'step'))
+ step = ch.get_text ().strip ()
+ return step
def get_octave (self):
- ch = self.get_unique_typed_child (get_class (u'octave'))
- octave = ch.get_text ().strip ()
- return int (octave)
+ ch = self.get_unique_typed_child (get_class (u'octave'))
+ octave = ch.get_text ().strip ()
+ return int (octave)
def get_alteration (self):
- ch = self.get_maybe_exist_typed_child (get_class (u'alter'))
- return interpret_alter_element (ch)
+ ch = self.get_maybe_exist_typed_child (get_class (u'alter'))
+ return interpret_alter_element (ch)
class Unpitched (Music_xml_node):
def get_step (self):
- ch = self.get_unique_typed_child (get_class (u'display-step'))
- step = ch.get_text ().strip ()
- return step
+ ch = self.get_unique_typed_child (get_class (u'display-step'))
+ step = ch.get_text ().strip ()
+ return step
def get_octave (self):
- ch = self.get_unique_typed_child (get_class (u'display-octave'))
+ ch = self.get_unique_typed_child (get_class (u'display-octave'))
- if ch:
- octave = ch.get_text ().strip ()
- return int (octave)
- else:
- return None
+ if ch:
+ octave = ch.get_text ().strip ()
+ return int (octave)
+ else:
+ return None
class Measure_element (Music_xml_node):
def get_voice_id (self):
- voice_id = self.get_maybe_exist_named_child ('voice')
- if voice_id:
- return voice_id.get_text ()
- else:
- return None
+ voice_id = self.get_maybe_exist_named_child ('voice')
+ if voice_id:
+ return voice_id.get_text ()
+ else:
+ return None
def is_first (self):
# Look at all measure elements (previously we had self.__class__, which
# only looked at objects of the same type!
- cn = self._parent.get_typed_children (Measure_element)
+ cn = self._parent.get_typed_children (Measure_element)
# But only look at the correct voice; But include Attributes, too, which
# are not tied to any particular voice
- cn = [c for c in cn if (c.get_voice_id () == self.get_voice_id ()) or isinstance (c, Attributes)]
- return cn[0] == self
+ cn = [c for c in cn if (c.get_voice_id () == self.get_voice_id ()) or isinstance (c, Attributes)]
+ return cn[0] == self
class Attributes (Measure_element):
def __init__ (self):
- Measure_element.__init__ (self)
- self._dict = {}
+ Measure_element.__init__ (self)
+ self._dict = {}
self._original_tag = None
self._time_signature_cache = None
def is_first (self):
- cn = self._parent.get_typed_children (self.__class__)
+ cn = self._parent.get_typed_children (self.__class__)
if self._original_tag:
return cn[0] == self._original_tag
else:
return cn[0] == self
def set_attributes_from_previous (self, dict):
- self._dict.update (dict)
+ self._dict.update (dict)
def read_self (self):
- for c in self.get_all_children ():
- self._dict[c.get_name()] = c
+ for c in self.get_all_children ():
+ self._dict[c.get_name()] = c
def get_named_attribute (self, name):
- return self._dict.get (name)
+ return self._dict.get (name)
def single_time_sig_to_fraction (self, sig):
if len (sig) < 2:
if ch:
log = ch.get_text ().strip()
return musicxml_duration_to_log (log)
- elif self.get_maybe_exist_named_child (u'grace'):
- # FIXME: is it ok to default to eight note for grace notes?
- return 3
+ elif self.get_maybe_exist_named_child (u'grace'):
+ # FIXME: is it ok to default to eight note for grace notes?
+ return 3
else:
return None
def is_implicit (self):
return hasattr (self, 'implicit') and self.implicit == 'yes'
def get_notes (self):
- return self.get_typed_children (get_class (u'note'))
+ return self.get_typed_children (get_class (u'note'))
class Syllabic (Music_xml_node):
def continued (self):
class Musicxml_voice:
def __init__ (self):
- self._elements = []
- self._staves = {}
- self._start_staff = None
+ self._elements = []
+ self._staves = {}
+ self._start_staff = None
self._lyrics = []
self._has_lyrics = False
def add_element (self, e):
- self._elements.append (e)
- if (isinstance (e, Note)
- and e.get_maybe_exist_typed_child (Staff)):
- name = e.get_maybe_exist_typed_child (Staff).get_text ()
+ self._elements.append (e)
+ if (isinstance (e, Note)
+ and e.get_maybe_exist_typed_child (Staff)):
+ name = e.get_maybe_exist_typed_child (Staff).get_text ()
- if not self._start_staff and not e.get_maybe_exist_typed_child (Grace):
- self._start_staff = name
- self._staves[name] = True
+ if not self._start_staff and not e.get_maybe_exist_typed_child (Grace):
+ self._start_staff = name
+ self._staves[name] = True
lyrics = e.get_typed_children (Lyric)
if not self._has_lyrics:
self._lyrics.append (nr)
def insert (self, idx, e):
- self._elements.insert (idx, e)
+ self._elements.insert (idx, e)
def get_lyrics_numbers (self):
if (len (self._lyrics) == 0) and self._has_lyrics:
class Part (Music_xml_node):
def __init__ (self):
Music_xml_node.__init__ (self)
- self._voices = {}
+ self._voices = {}
self._staff_attributes_dict = {}
def get_part_list (self):
return n.get_named_child ('part-list')
def interpret (self):
- """Set durations and starting points."""
+ """Set durations and starting points."""
"""The starting point of the very first note is 0!"""
part_list = self.get_part_list ()
- now = Rational (0)
- factor = Rational (1)
- attributes_dict = {}
+ now = Rational (0)
+ factor = Rational (1)
+ attributes_dict = {}
attributes_object = None
- measures = self.get_typed_children (Measure)
+ measures = self.get_typed_children (Measure)
last_moment = Rational (-1)
last_measure_position = Rational (-1)
measure_position = Rational (0)
# Graces at the end of a measure need to have their position set to the
# previous number!
pending_graces = []
- for m in measures:
+ for m in measures:
# implicit measures are used for artificial measures, e.g. when
# a repeat bar line splits a bar into two halves. In this case,
# don't reset the measure position to 0. They are also used for
if isinstance (n, Hash_text):
continue
- dur = Rational (0)
+ dur = Rational (0)
if n.__class__ == Attributes:
- n.set_attributes_from_previous (attributes_dict)
- n.read_self ()
- attributes_dict = n._dict.copy ()
+ n.set_attributes_from_previous (attributes_dict)
+ n.read_self ()
+ attributes_dict = n._dict.copy ()
attributes_object = n
- factor = Rational (1,
- int (attributes_dict.get ('divisions').get_text ()))
+ factor = Rational (1,
+ int (attributes_dict.get ('divisions').get_text ()))
- if (n.get_maybe_exist_typed_child (Duration)):
- mxl_dur = n.get_maybe_exist_typed_child (Duration)
- dur = mxl_dur.get_length () * factor
+ if (n.get_maybe_exist_typed_child (Duration)):
+ mxl_dur = n.get_maybe_exist_typed_child (Duration)
+ dur = mxl_dur.get_length () * factor
- if n.get_name() == 'backup':
- dur = - dur
+ if n.get_name() == 'backup':
+ dur = - dur
# reset all graces before the backup to after-graces:
graces_to_aftergraces (pending_graces)
pending_graces = []
- if n.get_maybe_exist_typed_child (Grace):
- dur = Rational (0)
+ if n.get_maybe_exist_typed_child (Grace):
+ dur = Rational (0)
rest = n.get_maybe_exist_typed_child (Rest)
- if (rest
+ if (rest
and attributes_object
and attributes_object.get_measure_length () == dur):
return attributes
def extract_voices (part):
- voices = {}
- measures = part.get_typed_children (Measure)
- elements = []
- for m in measures:
+ voices = {}
+ measures = part.get_typed_children (Measure)
+ elements = []
+ for m in measures:
if m.partial > 0:
elements.append (Partial (m.partial))
- elements.extend (m.get_all_children ())
+ elements.extend (m.get_all_children ())
# make sure we know all voices already so that dynamics, clefs, etc.
# can be assigned to the correct voices
voice_to_staff_dict = {}
staff_to_voice_dict[s].append (v)
- start_attr = None
+ start_attr = None
assign_to_next_note = []
id = None
- for n in elements:
- voice_id = n.get_maybe_exist_typed_child (get_class ('voice'))
+ for n in elements:
+ voice_id = n.get_maybe_exist_typed_child (get_class ('voice'))
if voice_id:
id = voice_id.get_text ()
else:
# We don't need backup/forward any more, since we have already
# assigned the correct onset times.
# TODO: Let Grouping through. Also: link, print, bokmark sound
- if not (isinstance (n, Note) or isinstance (n, Attributes) or
+ if not (isinstance (n, Note) or isinstance (n, Attributes) or
isinstance (n, Direction) or isinstance (n, Partial) or
isinstance (n, Barline) or isinstance (n, Harmony) or
isinstance (n, FiguredBass) or isinstance (n, Print)):
- continue
+ continue
- if isinstance (n, Attributes) and not start_attr:
- start_attr = n
- continue
+ if isinstance (n, Attributes) and not start_attr:
+ start_attr = n
+ continue
if isinstance (n, Attributes):
- # assign these only to the voices they really belongs to!
+ # assign these only to the voices they really belong to!
for (s, vids) in staff_to_voice_dict.items ():
staff_attributes = part.extract_attributes_for_staff (n, s)
if staff_attributes:
voices[id].add_element (i)
assign_to_next_note = []
- if start_attr:
+ if start_attr:
for (s, vids) in staff_to_voice_dict.items ():
staff_attributes = part.extract_attributes_for_staff (start_attr, s)
staff_attributes.read_self ()
part._voices = voices
def get_voices (self):
- return self._voices
+ return self._voices
def get_staff_attributes (self):
return self._staff_attributes_dict
class Notations (Music_xml_node):
def get_tie (self):
- ts = self.get_named_children ('tied')
- starts = [t for t in ts if t.type == 'start']
- if starts:
- return starts[0]
- else:
- return None
+ ts = self.get_named_children ('tied')
+ starts = [t for t in ts if t.type == 'start']
+ if starts:
+ return starts[0]
+ else:
+ return None
def get_tuplets (self):
- return self.get_typed_children (Tuplet)
+ return self.get_typed_children (Tuplet)
class Time_modification(Music_xml_node):
def get_fraction (self):
- b = self.get_maybe_exist_named_child ('actual-notes')
- a = self.get_maybe_exist_named_child ('normal-notes')
- return (int(a.get_text ()), int (b.get_text ()))
+ b = self.get_maybe_exist_named_child ('actual-notes')
+ a = self.get_maybe_exist_named_child ('normal-notes')
+ return (int(a.get_text ()), int (b.get_text ()))
def get_normal_type (self):
tuplet_type = self.get_maybe_exist_named_child ('normal-type')
class Accidental (Music_xml_node):
def __init__ (self):
- Music_xml_node.__init__ (self)
- self.editorial = False
- self.cautionary = False
+ Music_xml_node.__init__ (self)
+ self.editorial = False
+ self.cautionary = False
class Music_xml_spanner (Music_xml_node):
def get_type (self):
class Slur (Music_xml_spanner):
def get_type (self):
- return self.type
+ return self.type
class Beam (Music_xml_spanner):
def get_type (self):
- return self.get_text ()
+ return self.get_text ()
def is_primary (self):
if hasattr (self, 'number'):
return self.number == "1"
## for every input file. Only add those classes, that are either directly
## used by class name or extend Music_xml_node in some way!
class_dict = {
- '#comment': Hash_comment,
+ '#comment': Hash_comment,
'#text': Hash_text,
- 'accidental': Accidental,
- 'attributes': Attributes,
+ 'accidental': Accidental,
+ 'attributes': Attributes,
'barline': Barline,
'bar-style': BarStyle,
'bass': Bass,
- 'beam' : Beam,
+ 'beam' : Beam,
'beats': Beats,
'beat-type': BeatType,
'beat-unit': BeatUnit,
'beat-unit-dot': BeatUnitDot,
'bend' : Bend,
'bracket' : Bracket,
- 'chord': Chord,
+ 'chord': Chord,
'dashes' : Dashes,
'degree' : ChordModification,
- 'dot': Dot,
- 'direction': Direction,
+ 'dot': Dot,
+ 'direction': Direction,
'direction-type': DirType,
- 'duration': Duration,
+ 'duration': Duration,
'elision': Elision,
'extend': Extend,
'frame': Frame,
'frame-note': Frame_Note,
'figured-bass': FiguredBass,
'glissando': Glissando,
- 'grace': Grace,
+ 'grace': Grace,
'harmony': Harmony,
'identification': Identification,
'key-alter': KeyAlter,
'key-octave': KeyOctave,
'key-step': KeyStep,
'lyric': Lyric,
- 'measure': Measure,
- 'notations': Notations,
- 'note': Note,
+ 'measure': Measure,
+ 'notations': Notations,
+ 'note': Note,
'octave-shift': Octave_shift,
- 'part': Part,
+ 'part': Part,
'part-group': Part_group,
- 'part-list': Part_list,
+ 'part-list': Part_list,
'pedal': Pedal,
'per-minute': PerMinute,
- 'pitch': Pitch,
+ 'pitch': Pitch,
'print': Print,
- 'rest': Rest,
+ 'rest': Rest,
'root': Root,
'score-part': Score_part,
'slide': Slide,
- 'slur': Slur,
- 'staff': Staff,
+ 'slur': Slur,
+ 'staff': Staff,
'syllabic': Syllabic,
'text': Text,
- 'time-modification': Time_modification,
+ 'time-modification': Time_modification,
'tuplet': Tuplet,
- 'type': Type,
- 'unpitched': Unpitched,
+ 'type': Type,
+ 'unpitched': Unpitched,
'wavy-line': Wavy_line,
'wedge': Wedge,
'words': Words,
if classname:
return classname
else:
- class_name = name2class_name (name)
- klass = new.classobj (class_name, (Music_xml_node,) , {})
- class_dict[name] = klass
+ class_name = name2class_name (name)
+ klass = new.classobj (class_name, (Music_xml_node,) , {})
+ class_dict[name] = klass
return klass
def lxml_demarshal_node (node):
py_node._children = filter (lambda x: x, py_node._children)
for c in py_node._children:
- c._parent = py_node
+ c._parent = py_node
for (k, v) in node.items ():
py_node.__dict__[k] = v
py_node._name = name
py_node._children = [minidom_demarshal_node (cn) for cn in node.childNodes]
for c in py_node._children:
- c._parent = py_node
+ c._parent = py_node
if node.attributes:
- for (nm, value) in node.attributes.items ():
- py_node.__dict__[nm] = value
+ for (nm, value) in node.attributes.items ():
+ py_node.__dict__[nm] = value
py_node._attribute_dict[nm] = value
py_node._data = None
if node.nodeType == node.TEXT_NODE and node.data:
- py_node._data = node.data
+ py_node._data = node.data
py_node._original = node
return py_node
self._d = -self._d
def numerator(self):
- return self._n
+ return self._n
def denominator(self):
- return self._d
+ return self._d
def __repr__(self):
if self._d == 1:
(base (dir-basename filename ".ps" ".eps"))
(intermediate (remove (lambda (x) (member x formats)) completed)))
(for-each (lambda (f)
- ((eval (string->symbol (format "convert-to-~a" f))
+ ((eval (string->symbol (format #f "convert-to-~a" f))
module) paper-book filename)) completed)
(if (ly:get-option 'delete-intermediate-files)
(for-each (lambda (f)
"A key cancellation."
'())
+(ly:add-interface
+ 'ligature-head-interface
+ "A note head that can become part of a ligature."
+ '())
+
(ly:add-interface
'ligature-bracket-interface
"A bracket indicating a ligature in the original edition."
(rotation ,list? "Number of degrees to rotate this object, and
what point to rotate around. For example, @code{#'(45 0 0)} rotates
by 45 degrees around the center of this object.")
+ (round-to-longer-rest ,boolean? "Displays the longer multi-measure
+rest when the length of a measure is between two values of
+@code{usable-duration-logs}. For example, displays a breve instead of a whole
+in a 3/2 measure.")
;;
(side-relative-direction ,ly:dir? "Multiply direction of
@code{direction-source} with this to get the direction of this
object.")
+ (simple-Y ,boolean? "Should the Y placement of a spanner
+disregard changes in system heights?")
(size ,number? "Size of object, relative to standard size.")
(skyline-horizontal-padding ,number? "For determining the
vertical distance between two staves, it is possible to have a
@example
\\override MultiMeasureRest #'spacing-pair = #'(staff-bar . staff-bar)
@end example")
+ (spanner-id ,string? "An identifier to distinguish concurrent spanners.")
(springs-and-rods ,boolean? "Dummy variable for triggering
spacing routines.")
(stacking-dir ,ly:dir? "Stack objects in which direction?")
structure.")
(stem-attachment ,number-pair? "An @code{(@var{x} . @var{y})}
pair where the stem attaches to the notehead.")
+ (stem-begin-position ,number? "Where does the stem begin (the
+position of the support-head)?")
(stem-end-position ,number? "Where does the stem end (the end is
opposite to the support-head)?")
;;[TODO: doco]
polyphonic patterns.")
(used ,boolean? "If set, this spacing column is kept in the
spacing problem.")
+ (usable-duration-logs ,list? "List of @code{duration-log}s that
+can be used in typesetting the grob.")
;;
(spacing-wishes ,ly:grob-array? "An array of note spacing or staff spacing
objects.")
(span-start ,boolean? "Is the note head at the start of a spanner?")
+ (spanner-broken ,boolean? "Indicates whether spanner
+alignment should be broken after the current spanner.")
(spanner-placement ,ly:dir? "The place of an annotation on a spanner.
LEFT is for the first spanner, and RIGHT is for the last. CENTER will
place it on the broken spanner that falls closest to the center of the length
(system-Y-offset ,number? "The Y-offset (relative to the bottom of the
top-margin of the page) of the system to which this staff belongs.")
- (use-breve-rest ,boolean? "Use breve rests for measures longer
-than a whole rest.")
;;;;;;;;;;;;;;;;
;; ancient notation
(footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
(stencil . ,ly:balloon-interface::print)
(text . ,(grob::calc-property-by-copy 'text))
+ (X-extent . #f)
(Y-extent . #f)
(X-offset . ,(grob::calc-property-by-copy 'X-offset))
(Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
(spanner-placement . ,LEFT)
(stencil . ,ly:balloon-interface::print-spanner)
(text . ,(grob::calc-property-by-copy 'text))
+ (X-extent . #f)
(Y-extent . #f)
(X-offset . ,(grob::calc-property-by-copy 'X-offset))
(Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
(left-bound-info . ,ly:line-spanner::calc-left-bound-info)
(normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
(right-bound-info . ,ly:line-spanner::calc-right-bound-info)
+ (simple-Y . #t)
(stencil . ,ly:line-spanner::print)
(style . line)
(X-extent . #f)
(self-alignment-X . ,LEFT)
(break-align-symbols . (time-signature))
(non-break-align-symbols . (multi-measure-rest-interface))
- (non-musical . #t)
(meta . ((class . Item)
(interfaces . (break-alignable-interface
font-interface
(staff-position . 0)
(stencil . ,ly:multi-measure-rest::print)
(thick-thickness . 6.6)
+ ;; See Wanske pp. 125
+ (usable-duration-logs . (0 -1 -2 -3))
(Y-offset . ,ly:staff-symbol-referencer::callback)
(meta . ((class . Spanner)
(interfaces . (font-interface
(interfaces . (font-interface
gregorian-ligature-interface
ledgered-interface
+ ligature-head-interface
mensural-ligature-interface
note-head-interface
rhythmic-grob-interface
(height-limit . 2.0)
(minimum-length . 1.5)
(ratio . 0.333)
+ (spanner-id . "")
(springs-and-rods . ,ly:spanner::set-spacing-rods)
(stencil . ,ly:slur::print)
(thickness . 1.1)
(line-thickness . 0.8)
(minimum-length . 1.5)
(ratio . 0.25)
+ (spanner-id . "")
(springs-and-rods . ,ly:spanner::set-spacing-rods)
(stencil . ,ly:slur::print)
(thickness . 1.2)
(length . ,ly:stem::calc-length)
(neutral-direction . ,DOWN)
(positioning-done . ,ly:stem::calc-positioning-done)
+ (stem-begin-position . ,ly:stem::calc-stem-begin-position)
(stem-end-position . ,ly:stem::calc-stem-end-position)
(stem-info . ,ly:stem::calc-stem-info)
(stencil . ,ly:stem::print)
(stencil . ,ly:stem-tremolo::print)
(style . ,ly:stem-tremolo::calc-style)
(X-extent . ,ly:stem-tremolo::width)
- (Y-extent . ,ly:stem-tremolo::height)
(meta . ((class . Item)
(interfaces . (stem-tremolo-interface))))))
. (
(avoid-slur . inside)
(cross-staff . ,ly:tuplet-number::calc-cross-staff)
+ (direction . ,tuplet-number::calc-direction)
(font-shape . italic)
(font-size . -2)
(stencil . ,ly:tuplet-number::print)
(,ly:arpeggio::brew-chord-bracket . ,ly:arpeggio::pure-height)
(,ly:arpeggio::brew-chord-slur . ,ly:arpeggio::pure-height)
(,ly:hairpin::print . ,ly:hairpin::pure-height)
+ (,ly:stem-tremolo::print . ,ly:stem-tremolo::pure-height)
(,ly:volta-bracket-interface::print . ,volta-bracket-interface::pure-height)))
;; ly:grob::stencil-extent is safe if the print callback is safe too
;; FIXME
(ly:make-stencil
(list 'embedded-ps
- (format "
+ (format #f "
gsave currentpoint translate
0.1 setlinewidth
~a
(define (general-column align-dir baseline mols)
"Stack @var{mols} vertically, aligned to @var{align-dir} horizontally."
- (let* ((aligned-mols (map (lambda (x) (ly:stencil-aligned-to x X align-dir)) mols)))
- (stack-lines -1 0.0 baseline aligned-mols)))
+ (let* ((aligned-mols (map (lambda (x) (ly:stencil-aligned-to x X align-dir)) mols))
+ (stacked-stencil (stack-lines -1 0.0 baseline aligned-mols))
+ (stacked-extent (ly:stencil-extent stacked-stencil X)))
+ (ly:stencil-translate-axis stacked-stencil (- (car stacked-extent)) X )))
(define-markup-command (center-column layout props args)
(markup-list?)
(define-markup-command (footnote layout props mkup note)
(markup? markup?)
#:category other
- "Have footnote @var{note} act as an annotation to the markup @var{mkup}."
- (ly:stencil-combine-at-edge
- (interpret-markup layout props mkup)
- X
- RIGHT
+ #:properties ((raise 0.5)
+ (padding 0.0))
+ "Have footnote @var{note} act as an annotation to the markup @var{mkup}.
+
+@lilypond[verbatim,quote]
+\\markup {
+ \\footnote a b
+ \\override #'(padding . 0.2)
+ \\footnote c d
+}
+@end lilypond"
+ (let* ((markup-stencil (interpret-markup layout props mkup))
+ (auto-numbering (ly:output-def-lookup layout
+ 'footnote-auto-numbering))
+ (footnote-hash (gensym "footnote"))
+ (stencil-seed 0)
+ (gauge-stencil (if auto-numbering
+ (interpret-markup
+ layout
+ props
+ ((ly:output-def-lookup
+ layout
+ 'footnote-numbering-function)
+ stencil-seed))
+ empty-stencil))
+ (x-ext (if auto-numbering
+ (ly:stencil-extent gauge-stencil X)
+ '(0 . 0)))
+ (y-ext (if auto-numbering
+ (ly:stencil-extent gauge-stencil Y)
+ '(0 . 0)))
+ (footnote-number
+ (if auto-numbering
+ `(delay-stencil-evaluation
+ ,(delay
+ (ly:stencil-expr
+ (let* ((table
+ (ly:output-def-lookup layout
+ 'number-footnote-table))
+ (footnote-stencil (if (list? table)
+ (assoc-get footnote-hash
+ table)
+ empty-stencil))
+ (footnote-stencil (if (ly:stencil? footnote-stencil)
+ footnote-stencil
+ (begin
+ (ly:programming-error
+"Cannot find correct footnote for a markup object.")
+ empty-stencil)))
+ (gap (- (interval-length x-ext)
+ (interval-length
+ (ly:stencil-extent footnote-stencil X))))
+ (y-trans (- (+ (cdr y-ext)
+ raise)
+ (cdr (ly:stencil-extent footnote-stencil
+ Y)))))
+ (ly:stencil-translate footnote-stencil
+ (cons gap y-trans))))))
+ '()))
+ (main-stencil (ly:stencil-combine-at-edge
+ markup-stencil
+ X
+ RIGHT
+ (ly:make-stencil footnote-number x-ext y-ext)
+ padding)))
+ (ly:stencil-add
+ main-stencil
(ly:make-stencil
- `(footnote ,(interpret-markup layout props note))
+ `(footnote ,footnote-hash ,(interpret-markup layout props note))
'(0 . 0)
- '(0 . 0))
- 0.0))
+ '(0 . 0)))))
(define-markup-command (override layout props new-prop arg)
(pair? markup?)
}
@end lilypond"
(let*
- ((name (format "arrowheads.~a.~a~a"
+ ((name (format #f "arrowheads.~a.~a~a"
(if filled
"close"
"open")
@end lilypond"
(define (get-glyph-name-candidates dir log style)
(map (lambda (dir-name)
- (format "noteheads.~a~a" dir-name
+ (format #f "noteheads.~a~a" dir-name
(if (and (symbol? style)
(not (equal? 'default style)))
(select-head-glyph style (min log 2))
(parenthesize-stencil
markup half-thickness scaled-width angularity padding)))
-\f
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Delayed markup evaluation
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(page-number (if (list? table)
(assoc-get label table)
#f))
- (page-markup (if page-number (format "~a" page-number) default))
+ (page-markup (if page-number (format #f "~a" page-number) default))
(page-stencil (interpret-markup layout props page-markup))
(gap (- (interval-length x-ext)
(interval-length (ly:stencil-extent page-stencil X)))))
;;;
(define (scheme-expr->lily-string scm-arg)
(cond ((or (number? scm-arg)
- (string? scm-arg))
+ (string? scm-arg)
+ (boolean? scm-arg))
(format #f "~s" scm-arg))
((or (symbol? scm-arg)
(list? scm-arg))
;; as a note_chord_element to prevent spurious output, e.g.,
;; \displayLilyMusic < c-1\4 >8 -> c-1\48
(null? (filter post-event?
- (ly:music-property (car simple-elements) 'articulations))))
+ (ly:music-property (car simple-elements) 'articulations)))
+ ;; same for simple_element with \tweak
+ (null? (ly:music-property (car simple-elements) 'tweaks)))
;; simple_element : note | figure | rest | mmrest | lyric_element | skip
(let* ((simple-element (car simple-elements))
(duration (ly:music-property simple-element 'duration))
(define-display-method OverrideProperty (expr parser)
(let* ((symbol (ly:music-property expr 'symbol))
- (property-path (ly:music-property expr 'grob-property-path))
- (properties (if (pair? property-path)
- property-path
- (list (ly:music-property expr 'grob-property))))
+ (properties (ly:music-property expr 'grob-property-path
+ (list (ly:music-property expr 'grob-property))))
(value (ly:music-property expr 'grob-value))
(once (ly:music-property expr 'once)))
(new-line->lily-string))))
(define-display-method RevertProperty (expr parser)
- (let ((symbol (ly:music-property expr 'symbol))
- (properties (ly:music-property expr 'grob-property-path)))
+ (let* ((symbol (ly:music-property expr 'symbol))
+ (properties (ly:music-property expr 'grob-property-path
+ (list (ly:music-property expr 'grob-property)))))
(format #f "\\revert ~a~a #'~a~a"
(if (eqv? (*current-context*) 'Bottom)
""
(with @code{+} sign).")
(augmented-slash ,boolean? "This figure is for an augmented figured bass
(back-slashed number).")
+ (autosplit-end ,boolean? "Duration of event was truncated by automatic
+splitting in @code{Completion_heads_engraver}.")
(bass ,boolean? "Set if this note is a bass note in a chord.")
(beat-structure ,list? "A beatStructure to be used in autobeaming.")
Options are @code{'text} and @code{'hairpin}.")
(span-text ,markup? "The displayed text for dynamic text spanners
(e.g., cresc.)")
+ (spanner-id ,string? "Identifier to distinguish concurrent spanners.")
(split-list ,list? "Splitting moments for part combiner.")
(start-callback ,procedure? "Function to compute the negative length
of starting grace notes. This property can only be defined as initializer
. ((description . "Start or end phrasing slur.
Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}")
+ (spanner-id . "")
(types . (general-music span-event event phrasing-slur-event))
))
. ((description . "Start or end slur.
Syntax: @var{note}@code{(} and @var{note}@code{)}")
+ (spanner-id . "")
(types . (general-music span-event event slur-event))
))
(format #f "~a\\tag #'~a" (if post-event? "-" "") tag))
(ly:music-property expr 'tags))))
+(define* (tweaks->lily-string expr #:optional (post-event? #f))
+ (format #f "~{~a ~}"
+ (map (lambda (tweak)
+ (format #f "~a\\tweak #'~a #~a"
+ (if post-event? "-" "")
+ (car tweak)
+ (scheme-expr->lily-string (cdr tweak))))
+ (ly:music-property expr 'tweaks))))
+
(define-public (music->lily-string expr parser)
"Print @var{expr}, a music expression, in LilyPond syntax."
(if (ly:music? expr)
(proc expr parser))
procs))))
(if result-string
- (format #f "~a~a"
- (tag->lily-string expr (post-event? expr))
+ (format #f "~a~a~a"
+ (tag->lily-string expr (post-event? expr))
+ (tweaks->lily-string expr (post-event? expr))
result-string)
(format #f "%{ Print method not implemented for music type ~a %}"
music-type)))
(signature-str
(string-join
- (map (lambda (x) (format "@var{~a} (~a)"
+ (map (lambda (x) (format #f "@var{~a} (~a)"
(car x)
(cadr x)))
(zip arg-names type-names)))))
- (format
+ (format #f
"@item @code{~a}~a~a
@findex ~a
~a
(define-public (identifiers-doc-string)
- (format
+ (format #f
"@table @asis
~a
@end table
(string-append
"@item Set "
- (format "grob-property @code{~a} "
+ (format #f "grob-property @code{~a} "
(string-join (map symbol->string path) " "))
- (format "in @ref{~a} to ~a."
+ (format #f "in @ref{~a} to ~a."
context-sym (scm->texi value))
"\n")))
((equal? (object-property context-sym 'is-grob?) #t) "")
((equal? tag 'assign)
- (format "@item Set translator property @code{~a} to ~a.\n"
+ (format #f "@item Set translator property @code{~a} to ~a.\n"
context-sym
(scm->texi (car args))))
)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; property stuff.
+(define (verify-type-name where sym type)
+ (if (eq? type #f)
+ (ly:error (_ "cannot find description for property `~S' (~S)")
+ sym
+ where))
+ (type-name type))
+
(define (property->texi where sym . rest)
"Document SYM for WHERE (which can be translation, backend, music),
with init values from ALIST (1st optional argument)
(doc-name (string->symbol
(string-append (symbol->string where) "-doc")))
(type (object-property sym type?-name))
- (typename (type-name type))
+ (typename (verify-type-name where sym type))
(desc (object-property sym doc-name))
(init-value (assoc-get sym alist)))
,(list->vector
(map (lambda (tup)
(cons (ly:pt (cdr tup))
- (format "~a-~a ~a"
+ (format #f "~a-~a ~a"
name
(car tup)
(ly:pt (cdr tup)))))
,(list->vector
(map (lambda (size-tup)
(delay (ly:system-font-load
- (format "~a-~a" name (car size-tup)))))
+ (format #f "~a-~a" name (car size-tup)))))
design-size-alist
)))
(fetaBraces ,(ly:pt 20.0)
#(,(delay (ly:system-font-load
- (format "~a-brace" name)))))
+ (format #f "~a-brace" name)))))
)))
(define-public (add-pango-fonts node lily-family family factor)
"Return EPS filename."
(let* ((stencil (car stencil-count-pair))
(number (cdr stencil-count-pair))
- (name (format "~a-~a" basename number)))
+ (name (format #f "~a-~a" basename number)))
(dump-stencil-as-EPS paper stencil name
(ly:get-option 'include-eps-fonts))
(string-append name ".eps")))
;; finally write some auxiliary files if desired
(dump-infinite-stack-EPS stencils)
(postprocess-output book framework-eps-module
- (format "~a.eps" basename) (ly:output-formats))
+ (format #f "~a.eps" basename) (ly:output-formats))
;; individual staves (*-1.eps etc.); only print if more than one stencil
;; Otherwise the .eps and the -1.eps file will be identical and waste space
(if create-aux-files
(let* ((write-file (lambda (str-port ext)
(if create-aux-files
- (let* ((name (format "~a-systems.~a" basename ext))
+ (let* ((name (format #f "~a-systems.~a" basename ext))
(port (open-output-file name)))
(ly:message (_ "Writing ~a...") name)
(display (get-output-string str-port) port)
(count-system-port (open-output-string)))
(for-each (lambda (c)
(if (< 0 c)
- (display (format
+ (format tex-system-port
"\\ifx\\betweenLilyPondSystem \\undefined
\\linebreak
\\else
\\expandafter\\betweenLilyPondSystem{~a}%
\\fi
-" c)
- tex-system-port))
- (display (format "\\includegraphics{~a-~a}%\n"
- basename (1+ c)) tex-system-port)
- (display (format "@image{~a-~a}\n"
- basename (1+ c)) texi-system-port))
+" c))
+ (format tex-system-port "\\includegraphics{~a-~a}%\n"
+ basename (1+ c))
+ (format texi-system-port "@image{~a-~a}\n"
+ basename (1+ c)))
(iota (length stencils)))
(display "@c eof\n" texi-system-port)
(display "% eof\n" tex-system-port)
- (display (format "~a" (length stencils)) count-system-port)
+ (format count-system-port "~a" (length stencils))
(write-file texi-system-port "texi")
(write-file tex-system-port "tex")
;; do this as the last action so we know the rest is complete if
(ly:outputter-dump-string
outputter
(string-append
- (format "%%Page: ~a ~a\n" page-number page-number)
+ (format #f "%%Page: ~a ~a\n" page-number page-number)
"%%BeginPageSetup\n"
(if landscape?
"page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
(names (apply append (map extract-names fonts))))
(apply string-append
(map (lambda (f)
- (format
+ (format #f
(if load-fonts?
"%%DocumentSuppliedResources: font ~a\n"
"%%DocumentNeededResources: font ~a\n")
"%%EndComments\n"))
(define (procset file-name)
- (format
+ (format #f
"%%BeginResource: procset (~a) 1 0
~a
%%EndResource
file-name (cached-file-contents file-name)))
(define (embed-document file-name)
- (format "%%BeginDocument: ~a
+ (format #f "%%BeginDocument: ~a
~a
%%EndDocument
"
(define-public (ps-embed-cff body font-set-name version)
(let* ((binary-data
(string-append
- (format "/~a ~s StartData " font-set-name (string-length body))
+ (format #f "/~a ~s StartData " font-set-name (string-length body))
body))
(header
- (format
+ (format #f
"%%BeginResource: font ~a
%!PS-Adobe-3.0 Resource-FontSet
%%DocumentNeededResources: ProcSet (FontSetInit)
(begin
(set! file-name (ly:string-substitute (ly:get-option 'datadir)
"" file-name))
- (format
+ (format #f
"lilypond-datadir (~a) concatstrings (r) file .loadfont\n"
file-name))
- (format "(~a) (r) file .loadfont\n" file-name))
- (format "% cannot find font file: ~a\n" file-name)))
+ (format #f "(~a) (r) file .loadfont\n" file-name))
+ (format #f "% cannot find font file: ~a\n" file-name)))
(let* ((font (car font-name-filename))
(name (cadr font-name-filename))
(cond
((internal-font? file-name)
(ps-load-file (ly:find-file
- (format "~a.otf" file-name))))
+ (format #f "~a.otf" file-name))))
((string? bare-file-name)
(ps-load-file file-name))
(else
(define-public (output-framework basename book scopes fields)
- (let* ((filename (format "~a.ps" basename))
+ (let* ((filename (format #f "~a.ps" basename))
(outputter (ly:make-paper-outputter
;; FIXME: better wrap open/open-file,
;; content-mangling is always bad.
;; FIXME: better wrap open/open-file,
;; content-mangling is always bad.
;; MINGW hack: need to have "b"inary for embedding CFFs
- (open-file (format "~a.eps" filename) "wb")
+ (open-file (format #f "~a.eps" filename) "wb")
'ps))
(port (ly:outputter-port outputter))
(rounded-bbox (to-rounded-bp-box bbox))
(bbox (list (car xext) (car yext)
(cdr xext) (cdr yext)))
(filename (if (< 0 count)
- (format "~a-~a" basename count)
+ (format #f "~a-~a" basename count)
basename)))
(set! count (1+ count))
(dump-stencil-as-EPS-with-bbox paper
(ly:get-option 'include-eps-fonts)
bbox)
(if do-pdf
- (postscript->pdf 0 0 (format "~a.eps" filename)))
+ (postscript->pdf 0 0 (format #f "~a.eps" filename)))
(if do-png
(postscript->png (ly:get-option 'resolution) 0 0
- (format "~a.eps" filename)))))
+ (format #f "~a.eps" filename)))))
extents-system-pairs)))
(define-public (clip-system-EPSes basename paper-book)
(for-each
(lambda (region)
(clip-systems-to-region
- (format "~a-from-~a-to-~a-clip"
+ (format #f "~a-from-~a-to-~a-clip"
basename
(rhythmic-location->file-string (car region))
(rhythmic-location->file-string (cdr region)))
(if (pair? system-list)
(clip-score-systems
(if (> count 0)
- (format "~a-~a" basename count)
+ (format #f "~a-~a" basename count)
basename)
system-list)))
score-system-list)))
(stack-stencils Y DOWN 0.0
(map paper-system-stencil
(reverse to-dump-systems)))
- (format "~a.preview" basename)
+ (format #f "~a.preview" basename)
#t)
(postprocess-output book framework-ps-module
- (format "~a.preview.eps" basename)
+ (format #f "~a.preview.eps" basename)
(cons "png" (ly:output-formats)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define format ergonomic-simple-format)
(define-public (output-framework basename book scopes fields)
- (let* ((file (open-output-file (format "~a.scm" basename))))
+ (let* ((file (open-output-file (format #f "~a.scm" basename))))
(display ";;Creator: LilyPond\n" file)
(display ";; raw SCM output\n" file)
(define-public (output-framework channel book scopes fields)
(let* ((ctor-arg (if (string? channel)
- (open-output-file (format "~a.socket" channel))
+ (open-output-file (format #f "~a.socket" channel))
channel))
(outputter (ly:make-paper-outputter
ctor-arg
(let* ((system-stencil (paper-system-stencil x))
(x-extent (ly:stencil-extent system-stencil X))
(y-extent (ly:stencil-extent system-stencil Y)))
- (format ctor-arg (ly:format "system ~4l ~4l ~4l ~4l\n"
- (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)))
+ (display (ly:format "system ~4l ~4l ~4l ~4l\n"
+ (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)) ctor-arg)
(ly:outputter-dump-stencil outputter system-stencil)))
systems)))
(define-public (output-classic-framework channel book scopes fields)
(let* ((ctor-arg (if (string? channel)
- (open-output-file (format "~a.socket" channel))
+ (open-output-file (format #f "~a.socket" channel))
channel))
(outputter (ly:make-paper-outputter
ctor-arg
'socket))
(systems (ly:paper-book-systems book))
(paper (ly:paper-book-paper book)))
- (format ctor-arg (ly:format "paper ~4l\n" (get-page-dimensions paper)))
+ (display (ly:format "paper ~4l\n" (get-page-dimensions paper)) ctor-arg)
(for-each (lambda (x)
(let* ((system-stencil (paper-system-stencil x))
(x-extent (ly:stencil-extent system-stencil X))
(y-extent (ly:stencil-extent system-stencil Y)))
- (format ctor-arg (ly:format "system ~4l ~4l ~4l ~4l\n"
- (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)))
+ (display (ly:format "system ~4l ~4l ~4l ~4l\n"
+ (car x-extent) (car y-extent) (cdr x-extent) (cdr y-extent)) ctor-arg)
(ly:outputter-dump-stencil outputter system-stencil)))
systems)))
(module-remove! (ly:outputter-module outputter) 'paper))
(if (ly:get-option 'svg-woff)
(dump (woff-header paper (dirname filename))))
- (dump (comment (format "Page: ~S/~S" page-number page-count)))
+ (dump (comment (format #f "Page: ~S/~S" page-number page-count)))
(ly:outputter-output-scheme outputter
`(begin (set! lily-unit-length ,unit-length)
""))
(page-count (length page-stencils))
(filename "")
(file-suffix (lambda (num)
- (if (= page-count 1) "" (format "-page-~a" num)))))
+ (if (= page-count 1) "" (format #f "-page-~a" num)))))
(for-each
(lambda (page)
(set! page-number (1+ page-number))
- (set! filename (format "~a~a.svg"
+ (set! filename (format #f "~a~a.svg"
basename
(file-suffix page-number)))
(dump-page paper filename page page-number page-count))
(stack-stencils Y DOWN 0.0
(map paper-system-stencil
(reverse to-dump-systems)))
- (format "~a.preview.svg" basename))))
+ (format #f "~a.preview.svg" basename))))
(let ((ns (nodes graph))
(es (edges graph))
(cs (clusters graph)))
- (ly:message (format (_ "Writing graph `~a'...") (port-filename out)))
+ (ly:message (format #f (_ "Writing graph `~a'...") (port-filename out)))
(display "digraph G {\nrankdir=\"LR\"\nnode [shape=rectangle]\n" out)
- (map (lambda (n) (display (format "~a [label=\"~a\"]\n" (car n) (cdr n)) out))
- ns)
- (map (lambda (e) (display (format "~a -> ~a\n" (car e) (cdr e)) out))
- es)
- (map (lambda (c)
- (display (format "subgraph cluster_~a {\nlabel= \"~a\"\ncolor=blue\n"
- (string-filter (car c) char-alphabetic?)
- (car c))
- out)
- (map (lambda (n) (display (format "~a\n" n) out)) (cdr c))
- (display "}\n" out))
- cs)
+ (for-each (lambda (n) (format out "~a [label=\"~a\"]\n" (car n) (cdr n)))
+ ns)
+ (for-each (lambda (e) (format out "~a -> ~a\n" (car e) (cdr e)))
+ es)
+ (for-each (lambda (c)
+ (format out "subgraph cluster_~a {\nlabel= \"~a\"\ncolor=blue\n"
+ (string-filter (car c) char-alphabetic?)
+ (car c))
+ (for-each (lambda (n) (format out "~a\n" n)) (cdr c))
+ (display "}\n" out))
+ cs)
(display "}" out)))
(ly:warning (_ "Error in beam quanting. Expected (~S,~S) found ~S.")
want-l want-r posns)
(set! (ly:grob-property beam 'annotation)
- (format "(~S,~S)" want-l want-r))))
+ (format #f "(~S,~S)" want-l want-r))))
posns))))
(define check-beam-slope-sign
(ly:warning (_ "Error in beam quanting. Expected ~S 0, found ~S.")
(procedure-name comparison) slope-sign)
(set! (ly:grob-property beam 'annotation)
- (format "~S 0" (procedure-name comparison))))
+ (format #f "~S 0" (procedure-name comparison))))
(set! (ly:grob-property beam 'annotation) ""))
posns))))
;; as the key to out internal a-list
(let* ((base-name (get-current-filename parser))
(output-suffix (get-current-suffix parser))
- (alist-key (format "~a~a" base-name output-suffix))
+ (alist-key (format #f "~a~a" base-name output-suffix))
(counter-alist (ly:parser-lookup parser 'counter-alist))
(output-count (assoc-get alist-key counter-alist 0))
(result base-name))
;; Allow all ASCII alphanumerics, including accents
(if (string? output-suffix)
(set! result
- (format "~a-~a"
+ (format #f "~a-~a"
result
(string-regexp-substitute
"[^-[:alnum:]]"
(reverse matches))
+(define-public (random-string pool n)
+ "Produces a random lowercase string of length n"
+ (define (helper alphabet out num)
+ (let ((rand (random (string-length pool))))
+ (if (< num 1)
+ out
+ (helper alphabet
+ (string-concatenate `(,out
+ ,(substring alphabet
+ rand
+ (+ 1 rand))))
+ (- num 1)))))
+ (helper pool "" n))
+
+(define-public (random-lowercase-string n)
+ (random-string "abcdefghijklmnopqrstuvwxyz" n))
+
;;;;;;;;;;;;;;;;
;; other
(assoc-get 'total-cells-allocated stats 0))))
(define (dump-profile base last this)
- (let* ((outname (format "~a.profile" (dir-basename base ".ly")))
+ (let* ((outname (format #f "~a.profile" (dir-basename base ".ly")))
(diff (map (lambda (y) (apply - y)) (zip this last))))
(ly:progress "\nWriting timing to ~a..." outname)
(format (open-file outname "w")
".scm"))
(outfile (open-file out-file-name "w")))
(set! gc-dumping #t)
- (display (format "Dumping GC statistics ~a...\n" out-file-name))
- (display (map (lambda (y)
- (let ((x (car y))
- (c (cdr y)))
- (display
- (format "~a (~a) = ~a\n" (object-address x) c x)
- outfile)))
- (filter
- (lambda (x)
- (not (symbol? (car x))))
- protects))
- outfile)
+ (format #t "Dumping GC statistics ~a...\n" out-file-name)
+ (for-each (lambda (y)
+ (let ((x (car y))
+ (c (cdr y)))
+ (format outfile "~a (~a) = ~a\n" (object-address x) c x)))
+ (filter
+ (lambda (x)
+ (not (symbol? (car x))))
+ protects))
(format outfile "\nprotected symbols: ~a\n"
(apply + (map (lambda (obj-count)
(if (symbol? (car obj-count))
(newline outfile)
(let* ((stats (gc-stats)))
(for-each (lambda (sym)
- (display
- (format "~a ~a ~a\n"
- gc-protect-stat-count
- sym
- (assoc-get sym stats "?"))
-
- outfile))
+ (format outfile "~a ~a ~a\n"
+ gc-protect-stat-count
+ sym
+ (assoc-get sym stats "?")))
'(protected-objects bytes-malloced cell-heap-size)))
(set! gc-dumping #f)
(close-port outfile)))
(string-match "^VmData:[ \t]*([0-9]*) kB" l))
lines)))
(mem (string->number (match:substring (car interesting) 1))))
- (display (format "VMDATA: ~a\n" mem))
+ (format #t "VMDATA: ~a\n" mem)
(display (gc-stats))
(if (> mem 100000)
(begin (dump-gc-protects)
(ly:set-option 'log-file "lilypond-multi-run"))
(if (number? joblist)
(begin (ly:set-option
- 'log-file (format "~a-~a"
+ 'log-file (format #f "~a-~a"
(ly:get-option 'log-file) joblist))
(set! files (vector-ref split-todo joblist)))
(begin (ly:progress "\nForking into jobs: ~a\n" joblist)
(lambda (x)
(let* ((job (car x))
(state (cdr x))
- (logfile (format "~a-~a.log"
+ (logfile (format #f "~a-~a.log"
(ly:get-option 'log-file) job))
(log (ly:gulp-file logfile))
(len (string-length log))
(if (status:term-sig state)
(ly:message
"\n\n~a\n"
- (format (_ "job ~a terminated with signal: ~a")
+ (format #f (_ "job ~a terminated with signal: ~a")
job (status:term-sig state)))
(ly:message
(_ "logfile ~a (exit ~a):\n~a")
(ly:exit 1 #f))))))
(if (string-or-symbol? (ly:get-option 'log-file))
- (ly:stderr-redirect (format "~a.log" (ly:get-option 'log-file)) "w"))
+ (ly:stderr-redirect (format #f "~a.log" (ly:get-option 'log-file)) "w"))
(let ((failed (lilypond-all files)))
(if (ly:get-option 'trace-scheme-coverage)
(begin
(ping-log
(if separate-logs
(open-file (if (string-or-symbol? (ly:get-option 'log-file))
- (format "~a.log" (ly:get-option 'log-file))
+ (format #f "~a.log" (ly:get-option 'log-file))
"/dev/stderr") "a") #f))
(do-measurements (ly:get-option 'dump-profile))
(handler (lambda (key failed-file)
(base (dir-basename x ".ly"))
(all-settings (ly:all-options)))
(if separate-logs
- (ly:stderr-redirect (format "~a.log" base) "w"))
+ (ly:stderr-redirect (format #f "~a.log" base) "w"))
(if ping-log
(format ping-log "Processing ~a\n" base))
(if (ly:get-option 'trace-memory-frequency)
(ly:stencil? (cadr stencils)))
(let* ((tail (stack-stencil-line space (cdr stencils)))
(head (car stencils))
- (xoff (+ space (cdr (ly:stencil-extent head X)))))
+ (xoff (+ space (interval-length (ly:stencil-extent head X)))))
(ly:stencil-add head
(ly:stencil-translate-axis tail xoff X)))
(car stencils))
;; This works for single-note and multi-note tremolos!
(let* ((children (if (music-is-of-type? main 'sequential-music)
;; \repeat tremolo n { ... }
- (length (ly:music-property main 'elements))
+ (length (extract-named-music main 'EventChord))
;; \repeat tremolo n c4
1))
;; # of dots is equal to the 1 in bitwise representation (minus 1)!
(define (calc-repeat-slash-count music)
"Given the child-list @var{music} in @code{PercentRepeatMusic},
calculate the number of slashes based on the durations. Returns @code{0}
-if durations in in @var{music} vary, allowing slash beats and double-percent
+if durations in @var{music} vary, allowing slash beats and double-percent
beats to be distinguished."
(let* ((durs (map (lambda (elt)
(duration-of-note elt))
Slur
Stem
TextScript
- Tie))
+ Tie
+ TupletBracket))
(define-safe-public (make-voice-props-set n)
(make-sequential-music
(begin
(set! need-accidental #t)
(if (and (not (= this-alt 0))
- (or (< (abs this-alt) (abs prev-alt))
- (< (* prev-alt this-alt) 0)))
+ (and (< (abs this-alt) (abs prev-alt))
+ (> (* prev-alt this-alt) 0)))
(set! need-restore #t))))))
(cons need-restore need-accidental)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Tuplets
+(define-public (tuplet-number::calc-direction grob)
+ (ly:tuplet-bracket::calc-direction (ly:grob-object grob 'bracket)))
+
(define-public (tuplet-number::calc-denominator-text grob)
(number->string (ly:event-property (event-cause grob) 'denominator)))
(define-public (tuplet-number::calc-fraction-text grob)
(let ((ev (event-cause grob)))
- (format "~a:~a"
+ (format #f "~a:~a"
(ly:event-property ev 'denominator)
(ly:event-property ev 'numerator))))
(den (if denominator denominator (ly:event-property ev 'denominator)))
(num (if numerator numerator (ly:event-property ev 'numerator))))
- (format "~a:~a" den num)))
+ (format #f "~a:~a" den num)))
;; Print a tuplet fraction with note durations appended to the numerator and the
;; denominator
(num (if numerator numerator (ly:event-property ev 'numerator))))
(make-concat-markup (list
- (make-simple-markup (format "~a" den))
+ (make-simple-markup (format #f "~a" den))
(markup #:fontsize -5 #:note denominatornote UP)
(make-simple-markup " : ")
- (make-simple-markup (format "~a" num))
+ (make-simple-markup (format #f "~a" num))
(markup #:fontsize -5 #:note numeratornote UP)))))
(+ c0 p))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; annotations
+
+(define-public (numbered-footnotes int)
+ (markup #:tiny (number->string (+ 1 int))))
+
+(define-public (symbol-footnotes int)
+ (define (helper symbols out idx n)
+ (if (< n 1)
+ out
+ (helper symbols
+ (string-append out (list-ref symbols idx))
+ idx
+ (- n 1))))
+ (markup #:tiny (helper '("*" "†" "‡" "§" "¶")
+ ""
+ (remainder int 5)
+ (+ 1 (quotient int 5)))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; accidentals
;;;
(define (bezier-sandwich lst thick)
- (format "bezier_sandwich ~a [~a]"
+ (format #f "bezier_sandwich ~a [~a]"
thick
(string-append
(string-join (map
(lambda (x)
- (format "(~a,~a)" (car x) (cdr x)))
+ (format #f "(~a,~a)" (car x) (cdr x)))
lst)
","))))
(define (draw-line thick x1 y1 x2 y2)
- (format "drawline ~a ~a ~a ~a ~a"
+ (format #f "drawline ~a ~a ~a ~a ~a"
thick x1 y2 x2 y2))
(define (grob-cause offset grob)
-1))
(name (assoc-get 'name (ly:grob-property grob 'meta))))
- (apply format
- (append (list "cause ~a \"~a\" ~a ~a ~a ~a\n" tag name)
- (grob-bbox grob offset)))))
+ (apply format #f
+ "cause ~a \"~a\" ~a ~a ~a ~a\n" tag name
+ (grob-bbox grob offset))))
(define (named-glyph font glyph)
- (format "glyphshow ~a \"~a\" ~a \"~a\""
+ (format #f "glyphshow ~a \"~a\" ~a \"~a\""
(ly:font-glyph-name-to-charcode font glyph)
(ly:font-name font)
(modified-font-metric-font-scaling font)
(define (placebox x y s)
(if (not (string-null? s))
- (format "at ~a ~a ~a\n" x y s)
+ (format #f "at ~a ~a ~a\n" x y s)
""))
(define (polygon xy-coords blot do-fill)
- (format "polygon ~a ~a ~a"
+ (format #f "polygon ~a ~a ~a"
blot
(if do-fill "True" "False")
(string-join (map number->string xy-coords))))
(define (round-filled-box breapth width depth height blot-diameter)
- (format "draw_round_box ~a ~a ~a ~a ~a"
+ (format #f "draw_round_box ~a ~a ~a ~a ~a"
breapth width depth height blot-diameter))
(define (utf-8-string descr string)
- (format "utf-8 \"~a\" \"~a\""
+ (format #f "utf-8 \"~a\" \"~a\""
(escape-string descr)
;; don't want unescaped spaces.
(escape-string string)))
(value (cdr x)))
(if (number? value)
(set! value (ly:format "~4f" value)))
- (format " ~s=\"~a\"" attr value)))
+ (format #f " ~s=\"~a\"" attr value)))
attributes-alist)))
(define-public (eo entity . attributes-alist)
"o = open"
- (format "<~S~a>\n" entity (attributes attributes-alist)))
+ (format #f "<~S~a>\n" entity (attributes attributes-alist)))
(define-public (eoc entity . attributes-alist)
"oc = open/close"
- (format "<~S~a/>\n" entity (attributes attributes-alist)))
+ (format #f "<~S~a/>\n" entity (attributes attributes-alist)))
(define-public (ec entity)
"c = close"
- (format "</~S>\n" entity))
+ (format #f "</~S>\n" entity))
(define-public (comment s)
(string-append "<!-- " s " -->\n"))
(define (helper lst)
(if (null? lst)
'()
- (cons (format "~S ~S" (car lst) (- (cadr lst)))
+ (cons (format #f "~S ~S" (car lst) (- (cadr lst)))
(helper (cddr lst)))))
(string-join (helper lst) " "))
(define (dashed-line thick on off dx dy phase)
(draw-line thick 0 0 dx dy
- `(stroke-dasharray . ,(format "~a,~a" on off))))
+ `(stroke-dasharray . ,(format #f "~a,~a" on off))))
(define (draw-line thick x1 y1 x2 y2 . alist)
(apply entity 'line ""
(closepath . z))
"")))
- (cons (format "~a~a" svg-head (number-list->point args))
+ (cons (format #f "~a~a" svg-head (number-list->point args))
(convert-path-exps (drop rest arity))))
'()))
'(fill . "currentColor")))
(define (setcolor r g b)
- (format "<g color=\"rgb(~a%, ~a%, ~a%)\">\n"
+ (format #f "<g color=\"rgb(~a%, ~a%, ~a%)\">\n"
(* 100 r) (* 100 g) (* 100 b)))
;; rotate around given point
(lambda (j)
(module-define!
page-module
- (string->symbol (format "page-~a" j))
+ (string->symbol (format #f "page-~a" j))
(lambda (pg)
(page-property pg j))))
(pixmap-format 'png16m)
(anti-alias-factor 1))
- (let* ((format-str (format "~a" pixmap-format))
+ (let* ((format-str (format #f "~a" pixmap-format))
(extension (cond
((string-contains format-str "png") "png")
((string-contains format-str "jpg") "jpeg")
(else
(ly:error "Unknown pixmap format ~a" pixmap-format))))
(base (dir-basename ps-name ".ps" ".eps"))
- (png1 (format "~a.~a" base extension))
- (pngn (format "~a-page%d.~a" base extension))
+ (png1 (format #f "~a.~a" base extension))
+ (pngn (format #f "~a-page%d.~a" base extension))
(page-count (ps-page-count ps-name))
(multi-page? (> page-count 1))
(output-file (if multi-page? pngn png1))
(if multi-page?
(map
(lambda (n)
- (format "~a-page~a.png" base (1+ n)))
+ (format #f "~a-page~a.png" base (1+ n)))
(iota page-count))
- (list (format "~a.png" base))))
+ (list (format #f "~a.png" base))))
(if (not (= 0 status))
(begin
ly:stem::height
ly:stem::offset-callback
ly:stem::print
- ly:stem-tremolo::height
ly:stem-tremolo::print
ly:sustain-pedal::print
ly:system-start-delimiter::print
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-(define-module (scm song))
-
-(use-modules (srfi srfi-1))
-(use-modules (ice-9 optargs))
-(use-modules (ice-9 receive))
-
-(use-modules (lily))
-(use-modules (scm song-util))
+(define-module (scm song)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-39)
+ #:use-module (ice-9 optargs)
+ #:use-module (ice-9 receive)
+ #:use-module (lily)
+ #:use-module (scm song-util))
;;; Configuration
;; The word to be sung in places where notes are played without lyrics.
;; If it is #f, the places without lyrics are omitted on the output.
-(define-public *skip-word* "-skip-")
+(define-public *skip-word* (make-parameter "-skip-"))
;; If true, use syllables in the Festival XML file.
;; If false, use whole words instead; this is necessary in languages like
;; English, were the phonetic form cannot be deduced from syllables well enough.
-(define-public *syllabify* #f)
+(define-public *syllabify* (make-parameter #f))
;; Base Festival octave to which LilyPond notes are mapped.
-(define-public *base-octave* 5)
+(define-public *base-octave* (make-parameter 5))
;; The resulting base octave is sum of *base-octave* and
;; *base-octave-shift*. This is done to work around a Festival bug
;; causing Festival to segfault or produce invalid pitch on higher pitches.
;(define *base-octave-shift* -2)
-(define *base-octave-shift* 0)
+(define *base-octave-shift* (make-parameter 0))
;; The coeficient by which the notes just before \breath are shortened.
-(define-public *breathe-shortage* 0.8)
+(define-public *breathe-shortage* (make-parameter 0.8))
;;; LilyPond interface
(set! *default-tempo* (property-value
(find-child tempo-spec (lambda (elt)
(music-property? elt 'tempoWholesPerMinute)))))
- (round (* tempo (expt 2 (+ 2 *base-octave-shift*)))))))
+ (round (* tempo (expt 2 (+ 2 (*base-octave-shift*))))))))
(defstruct music-context
music
(push! (make-lyrics
#:text (ly:music-property lyric-event 'text)
#:duration (* (duration->number (ly:music-property lyric-event 'duration)) 4)
- #:unfinished (and (not *syllabify*) (find-child-named music 'HyphenEvent))
+ #:unfinished (and (not (*syllabify*)) (find-child-named music 'HyphenEvent))
#:ignore-melismata ignore-melismata
#:context current-voice)
lyrics-list))
((music-name? music 'BreathingEvent)
(if last-note-spec
(let* ((note-duration (note-duration last-note-spec))
- (rest-spec (make-rest #:duration (* note-duration (- 1 *breathe-shortage*))
+ (rest-spec (make-rest #:duration (* note-duration (- 1 (*breathe-shortage*)))
#:origin (ly:music-property music 'origin))))
- (set-note-duration! last-note-spec (* note-duration *breathe-shortage*))
+ (set-note-duration! last-note-spec (* note-duration (*breathe-shortage*)))
(add! (make-score-notes #:note/rest-list (list rest-spec)) result-list))
(warning music "\\\\breathe without previous note known")))
;; anything else
last-verse
(append (verse-notelist/rests last-verse) (list notelist/rest))))))
((pair? notelist/rest)
- (add! (make-verse #:text *skip-word* #:notelist/rests (list notelist/rest))
+ (add! (make-verse #:text (*skip-word*) #:notelist/rests (list notelist/rest))
verse-list))
(else
(error "Unreachable branch reached")))
((< duration (- epsilon))
(warning (if (null? note-list) (safe-last consumed) (safe-car note-list))
"Skip misalignment: ~a ~a ~a ~a" context skip duration consumed)))
- (values (if *skip-word*
+ (values (if (*skip-word*)
consumed
'())
note-list)))
(octave (inexact->exact (floor (/ semitones 12))))
(tone (modulo semitones 12)))
(format #f "~a~a" (car (assoc-get tone festival-note-mapping))
- (+ octave *base-octave* *base-octave-shift*))))
+ (+ octave (*base-octave*) (*base-octave-shift*)))))
(define (write-header port tempo)
(let ((beats (or (tempo->beats tempo) 100)))
(markup #:whiteout
#:simple (cond
((interval-empty? extent)
- (format "empty"))
+ "empty")
(is-length
(ly:format "~$" (interval-length extent)))
(else
(define-public (fret-number-tablature-format
context string-number fret-number)
(make-vcenter-markup
- (format "~a" fret-number)))
+ (format #f "~a" fret-number)))
;; The 5-string banjo has got a extra string, the fifth (duh), which
;; starts at the fifth fret on the neck. Frets on the fifth string
#!/usr/bin/env python
-# fixcc -- nitpick lily's c++ code
+# fixcc -- indent and space lily's c++ code
# This file is part of LilyPond, the GNU music typesetter.
#
# You should have received a copy of the GNU General Public License
# along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+# Performs string substitution on files, then applies astyle
+# (http://astyle.sourceforge.net)
# TODO
-# * maintainable rules: regexp's using whitespace (?x) and match names
-# <identifier>)
-# * trailing `*' vs. function definition
-# * do not break/change indentation of fixcc-clean files
-# * check lexer, parser
-# * rewrite in elisp, add to cc-mode
-# * using regexes is broken by design
-# * ?
-# * profit
+# Remove prefiltering as the equivalent formatting becomes available in
+# astyle, or as the prefiltering is deemed un-necessary.
+# Soon, this script might be replaced by a simple invocation of astyle
import __main__
import getopt
GLOBAL_CXX = 'GC++'
CXX = 'C++'
verbose_p = 0
-indent_p = 0
+indent_p = 1
rules = {
GLOBAL_CXX:
[
- # delete gratuitous block -- disabled because it breaks .h files
-# ('''\n( |\t)\s*{\n\s*(.*?)(?![{}]|\b(do|for|else|if|switch|while)\b);\n\s*}''',
-# '\n\\2;'),
+ # delete trailing whitespace
+ ('[ \t]*\n', '\n'),
],
CXX:
[
# space before parenthesis open
- ('([^\( \]])[ \t]*\(', '\\1 ('),
- # space after comma
- ("\([^'],\)[ \t]*", '\1 '),
- # delete gratuitous block -- disabled because it breaks .h files
-# ('''\n( |\t)\s*{\n\s*(.*?)(?![{}]|\b(do|for|else|if|switch|while)\b);\n\s*}''',
-# '\n\\2;'),
- # delete inline tabs
- ('(\w)\t+', '\\1 '),
+ ('([\w\)\]])\(', '\\1 ('),
# delete inline double spaces
- (' *', ' '),
- # delete space after parenthesis open
- ('\([ \t]*', '('),
+ ('(\S) +', '\\1 '),
# delete space before parenthesis close
- ('[ \t]*\)', ')'),
+ (' *\)', ')'),
# delete spaces after prefix
- ('(--|\+\+)[ \t]*([\w\)])', '\\1\\2'),
+ ('(--|\+\+) *([\w\(])', '\\1\\2'),
# delete spaces before postfix
- ('([\w\)\]])[ \t]*(--|\+\+)', '\\1\\2'),
- # delete space after parenthesis close
- #('\)[ \t]*([^\w])', ')\\1'),
+ ('([\w\)\]]) *(--|\+\+)', '\\1\\2'),
+
# delete space around operator
- # ('([\w\(\)\]])([ \t]*)(::|\.)([ \t]*)([\w\(\)])', '\\1\\3\\5'),
- ('([\w\(\)\]])([ \t]*)(\.|->)([ \t]*)([\w\(\)])', '\\1\\3\\5'),
+ ('([\w\(\)\]]) *(\.|->) *([\w\(\)])', '\\1\\2\\3'),
# delete space after operator
- ('(::)([ \t]*)([\w\(\)])', '\\1\\3'),
+ ('(::) *([\w\(\)])', '\\1\\2'),
+
# delete superflous space around operator
- ('([\w\(\)\]])([ \t]+)(&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|>|\+|-|=|/|:|&|\||\*)([ \t]+)([\w\(\)])', '\\1 \\3 \\5'),
- # space around operator1
- ('([\w\)\]]) *(&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|>|=|/|:|&|\||\*) *([\w\(])', '\\1 \\2 \\3'),
- # space around operator2
- ('([\w\)\]]) *(&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|>|=|/|:|&|\||\*) ([^\w\s])', '\\1 \\2 \\3'),
- # space around operator3
- ('([^\w\s]) (&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|[^-]>|=|/|:|&|\||\*) *([\w\(])', '\\1 \\2 \\3'),
- # space around operator4
- ('([\w\(\)\]]) (\*|/|\+|-) *([-:])', '\\1 \\2 \\3'),
- # space around +/-; exponent
- ('([\w\)\]])(\+|-)([_A-Za-z\(])', '\\1 \\2 \\3'),
- ('([_\dA-Za-df-z\)\]])(\+|-)([\w\(])', '\\1 \\2 \\3'),
- # trailing operator, but don't un-trail #include
- (' (::|&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|>|\+|-|=|/|:|&XXX|\||\*XXX)[ \t]*\n([ \t]*)(?!#include)', '\n\\2\\1 '),
- # pointer
- ##('(bool|char|const|delete|int|stream|unsigned|void|size_t|struct \w+|[A-Z]\w*|,|;|&&|<|[^-]>|\|\||-|\+)[ \t]*(\*|&)[ \t]*', '\\1 \\2'),
- ('(bool|char|const|delete|int|stream|unsigned|void|vsize|size_t|struct \w+|[A-Z]\w*|,|;|:|=|\?\)|&&|<|[^-]>|\|\||-|\+)[ \t]*(\*|&)[ \t]*', '\\1 \\2'),
- #to#('(bool|char|const|delete|int|stream|unsigned|void|([A-Z]\w*)|[,])[ \n\t]*(\*|&)[ \t]*', '\\1 \\3'),
- # pointer with template
- ('(( *((bool|char|const|delete|int|stream|unsigned|void|size_t|class[ \t]+\w*|[A-Z]\w*|\w+::\w+|[,])\s*[\*&],*)+)>) *(\*|&) *', '\\1 \\5'),
- #to#('(( *((bool|char|delete|int|stream|unsigned|void|(class[ \t]+\w*)|([A-Z]\w*)|[,])[ \*&],*)+)>)[ \t\n]*(\*|&) *', '\\1 \\7'),
- # unary pointer, minus, not
- ('(return|=|&&|\|\|) (\*|&|-|!) ([\w\(])', '\\1 \\2\\3'),
+ ('([\w\(\)\]]) +(&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|>|\+|-|=|/|:|&|\||\*) +([\w\(\)])', '\\1 \\2 \\3'),
+
+ # trailing operator, but don't un-trail close angle-braces > nor pointer *, and not before a preprocessor line
+ (' (::|&&|\|\||<=|>=|!=|\|=|==|\+=|-=|\*=|/=|\?|<|\+|-|=|/|:|&XXX|\||\*XXX) *\n( *)([^\s#])', '\n\\2\\1 \\3'),
# space after `operator'
('(\Woperator) *([^\w\s])', '\\1 \\2'),
- # dangling brace close
- ('\n[ \t]*(\n[ \t]*})', '\\1'),
- # dangling newline
- ('\n[ \t]*\n[ \t]*\n', '\n\n'),
- # dangling parenthesis open
- #('[ \t]*\n[ \t]*\([ \t]*\n', '('),
- ('\([ \t]*\n', '('),
- # dangling parenthesis close
- ('\n[ \t]*\)', ')'),
+ # trailing parenthesis open
+ ('\( *\n *', '('),
+ # dangling parenthesis close: Disabled to leave ADD_TRANSLATOR format in place
+ #('\n *\)', ')'),
# dangling comma
- ('\n[ \t]*,', ','),
- # dangling semicolon, but don't un-dangle it onto #include
- ('(\n.*\n[ \t]*;)(?!\n#include)', '\\1'),
- # brace open, but not changing a #define... line
- ('(\w)[ \t]*([^\s]*){([ \t]*\n)(?!#define)', '\\1\\2\n{\n'),
- # brace open backslash
- ('(\w[^\n]*){[ \t]*\\\\\n', '\\1\\\n{\\\n'),
- # brace close
- ("}[ \t]*([^'\n]*\w[^\n\\\]*)\n", '}\n\\1\n'),
- # brace close backslash
- ("}[ \t]*([^'\n]*\w[^\n\\\]*)", '\n}\n\\1'),
- # delete space after `operator'
- #('(\Woperator) (\W)', '\\1\\2'),
+ ('\n( *),', ',\n\\1'),
# delete space after case, label
- ('(\W(case|label) ([\w]+)) :', '\\1:'),
+ ('(\W(case|label) [\w]+) :', '\\1:'),
# delete space before comma
- ('[ \t]*,', ','),
+ (' +,', ','),
# delete space before semicolon
- ('[ \t]*;', ';'),
- # delete space before eol-backslash
- ('[ \t]*\\\\\n', '\\\n'),
- # delete trailing whitespace
- ('[ \t]*\n', '\n'),
+ ('([^;]) +;', '\\1;'),
+ # dangling newline
+ ('\n\n+', '\n\n'),
- ## Deuglify code that also gets ugly by rules above.
- # delete newline after typedef struct
- ('(typedef struct\s+([\w]*\s){([^}]|{[^}]*})*})\s*\n\s*(\w[\w\d]*;)', '\\1 \\4'),
- # delete spaces around template brackets
- #('(dynamic_cast|template|([A-Z]\w*))[ \t]*<[ \t]*(( *(bool|char|int|unsigned|void|(class[ \t]+\w*)|([A-Z]\w*)),?)+)[ \t]?(| [\*&])[ \t]*>', '\\1<\\3\\8>'),
- ('(dynamic_cast|less|list|map|set|template|typedef|vector|\w+::\w+|[A-Z]\w*)[ \t]*<[ \t]*(( *(bool|char|const|string|int|unsigned|void|vsize|size_t|class[ \t]+\w*|[A-Z]\w*)( *[\*&]?,|[\*&])*)+)[ \t]?(| [\*&])[ \t]*>', '\\1<\\2\\6>'),
- ('(\w+::\w+|[A-Z]\w*) < ((\w+::\w+|[A-Z]\w*)<[A-Z]\w*>) >', '\\1<\\2 >'),
- ('((if|while)\s+\(([^\)]|\([^\)]*\))*\))\s*;', '\\1\n;'),
- ('(for\s+\(([^;]*;[^;]*;([^\)]|\([^\)]*\))*)\))\s*;', '\\1\n;'),
- # do {..} while
- ('(}\s*while\s*)(\(([^\)]|\([^\)]*\))*\))\s*;', '\\1\\2;'),
-
- ## Fix code that gets broken by rules above.
- ##('->\s+\*', '->*'),
- # delete space before #define x()
- ('#[ \t]*define (\w*)[ \t]*\(', '#define \\1('),
- # add space in #define x ()
- ('#[ \t]*define (\w*)(\(([^\(\)]|\([^\(\)]*\))*\)\\n)',
- '#define \\1 \\2'),
- # delete space in #include <>
- ('#[ \t]*include[ \t]*<[ \t]*([^ \t>]*)[ \t]*(/?)[ \t]*([^ \t>]*)[ \t]*>',
- '#include <\\1\\2\\3>'),
# delete backslash before empty line (emacs' indent region is broken)
('\\\\\n\n', '\n\n'),
],
COMMENT:
[
- # delete trailing whitespace
- ('[ \t]*\n', '\n'),
# delete empty first lines
('(/\*\n)\n*', '\\1'),
# delete empty last lines
no_match = 'a\ba'
snippet_res = {
CXX: {
+ 'define':
+ r'''(?x)
+ (?P<match>
+ (?P<code>
+ \#[ \t]*define[ \t]+([^\n]*\\\n)*[^\n]*))''',
+
'multiline_comment':
r'''(?sx)
(?P<match>
'singleline_comment':
r'''(?mx)
- ^.*
+ ^.*? # leave leading spaces for the comment snippet
(?P<match>
(?P<code>
- [ \t]*//([ \t][^\n]*|)\n))''',
+ [ \t]*//[^\n]*\n))''',
'string':
r'''(?x)
(?P<match>
(?P<code>
- "([^\"\n](\")*)*"))''',
+ "([^"\n]|\\")*"))''',
'char':
r'''(?x)
(?P<code>
'([^']+|\')))''',
- 'include':
- r'''(?x)
- (?P<match>
- (?P<code>
- "#[ \t]*include[ \t]*<[^>]*>''',
- },
- }
+ 'include':
+ r'''(?x)
+ (?P<match>
+ (?P<code>
+ \#[ \t]*include[ \t]*<[^>]*>))''',
+ },
+ }
class Chunk:
def replacement_text (self):
def nitpick_file (outdir, file):
s = open (file).read ()
+ t = s.expandtabs(8)
for i in rules[GLOBAL_CXX]:
- s = re.sub (i[0], i[1], s)
+ t = re.sub (i[0], i[1], t)
# FIXME: Containing blocks must be first, see
# find_toplevel_snippets.
# We leave simple strings be part of the code
snippet_types = (
+ 'define',
'multiline_comment',
'singleline_comment',
'string',
# 'char',
+ 'include',
)
- chunks = find_toplevel_snippets (s, snippet_types)
+ chunks = find_toplevel_snippets (t, snippet_types)
#code = filter (lambda x: is_derived_class (x.__class__, Substring),
# chunks)
indent_file (fixt)
def indent_file (file):
- emacs = '''emacs\
- --no-window-system\
- --batch\
- --no-site-file\
- --no-init-file\
- %(file)s\
- --eval '(let ((error nil)
- (version-control nil))
- (load-library "cc-mode")
- (c++-mode)
- (indent-region (point-min) (point-max))
- (if (buffer-modified-p (current-buffer))
- (save-buffer)))' ''' % vars ()
- emacsclient = '''emacsclient\
- --socket-name=%(socketdir)s/%(socketname)s\
- --no-wait\
- --eval '(let ((error nil)
- (version-control nil))
- (load-library "cc-mode")
- (find-file "%(file)s")
- (c++-mode)
- (indent-region (point-min) (point-max))
- (if (buffer-modified-p (current-buffer))
- (save-buffer)))' ''' \
- % { 'file': file,
- 'socketdir' : socketdir,
- 'socketname' : socketname, }
+ astyle = '''astyle\
+ --options=none --quiet -n \
+ --style=gnu --indent=spaces=2 \
+ --max-instatement-indent=60 \
+ --indent-cases \
+ --align-pointer=name --pad-oper \
+ --keep-one-line-blocks \
+ %(file)s
+ ''' % vars ()
if verbose_p:
- sys.stderr.write (emacs)
+ sys.stderr.write (astyle)
sys.stderr.write ('\n')
- os.system (emacs)
+ os.system (astyle)
def usage ():
Options:
--help
- --indent reindent, even if no changes
+ --lazy skip astyle, if no changes
--verbose
--test
Typical use with LilyPond:
- fixcc $(find flower kpath-guile lily -name '*cc' -o -name '*hh' | grep -v /out)
+ fixcc $(find flower lily -name '*cc' -o -name '*hh' | grep -v /out)
''')
def do_options ():
global indent_p, outdir, verbose_p
(options, files) = getopt.getopt (sys.argv[1:], '',
- ['help', 'indent', 'outdir=',
+ ['help', 'lazy', 'outdir=',
'test', 'verbose'])
for (o, a) in options:
if o == '--help':
usage ()
sys.exit (0)
- elif o == '--indent':
- indent_p = 1
+ elif o == '--lazy':
+ indent_p = 0
elif o == '--outdir':
outdir = a
elif o == '--verbose':
socketdir = '/tmp/fixcc'
socketname = 'fixcc%d' % os.getpid ()
-def setup_client ():
- #--no-window-system\
- #--batch\
- os.unlink (os.path.join (socketdir, socketname))
- os.mkdir (socketdir, 0700)
- emacs='''emacs\
- --no-site-file\
- --no-init-file\
- --eval '(let ((error nil)
- (version-control nil))
- (load-library "server")
- (setq server-socket-dir "%(socketdir)s")
- (setq server-name "%(socketname)s")
- (server-start)
- (while t) (sleep 1000))' ''' \
- % { 'socketdir' : socketdir,
- 'socketname' : socketname, }
-
- if not os.fork ():
- os.system (emacs)
- sys.exit (0)
- while not os.path.exists (os.path.join (socketdir, socketname)):
- time.sleep (1)
-
def main ():
- #emacsclient should be faster, but this does not work yet
- #setup_client ()
files = do_options ()
if outdir and not os.path.isdir (outdir):
os.makedirs (outdir)
git config core.bare false
git remote add -t $originHead \
origin git://git.sv.gnu.org/lilypond.git
- if {$translator == 1} {
- git fetch
- } else {
- git fetch --depth 1
- }
+ git fetch
git reset --hard origin/$originHead
git config branch.$originHead.remote origin
git config branch.$originHead.merge refs/heads/$originHead
# one backreference to group 1 (that's two 2\ ).
new_header = re.sub("@code\{\\\\([a-zA-Z])", "@code{\\\\\\\\\\1", header)
escaped_snippet = (snippet[:header_char_number_start] +
- new_header + snippet[header_char_number_end:])
+ new_header + snippet[header_char_number_end:])
return escaped_snippet
def copy_ly (srcdir, name, tags):
"http://lilypond.org",
mshort+getTrans(" (did not exist in 2.12)",lang))
continue
- # this is stupid and I shouldn't have bothered trying
- # to support the 2.12 docs and it will be deleted once
- # 2.14 is out and the website won't be visible to users
+ # this is stupid and I shouldn't have bothered trying
+ # to support the 2.12 docs and it will be deleted once
+ # 2.14 is out and the website won't be visible to users
# until 2.14 is out. -gp
if (url.endswith('.html')):
make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
MergeFonts("feta%(design_size)d.pfb");
MergeFonts("feta-noteheads%(design_size)d.pfb");
+MergeFonts("feta-flags%(design_size)d.pfb");
MergeFonts("parmesan%(design_size)d.pfb");
# load nummer/din after setting PUA.
enc_name = 'ParmesanEncoding'
elif re.search ('feta-noteheads', filenm):
enc_name = 'FetaNoteheadsEncoding'
+ elif re.search ('feta-flags', filenm):
+ enc_name = 'FetaFlagsEncoding'
elif re.search ('feta-brace', filenm):
enc_name = 'FetaBraceEncoding'
elif re.search ('feta-alphabet', filenm):
# questionable
if (not link.startswith("../doc/")):
if (link.endswith(".html")):
- langlink = addLangExt(link[:-5], lang, "html")
+ langlink = addLangExt(link[:-5], lang, "html")
line = line.replace(link, langlink)
if (link.endswith(".pdf")):
- langlink = addLangExt(link[:-4], lang, "pdf")
+ langlink = addLangExt(link[:-4], lang, "pdf")
line = line.replace(link, langlink)
### add google tracker header
if (line.find("</head>") >= 0):
help="prefix filtered track numbers with PREFIX")
parser.add_option ('', '--dump', action='store_true', dest='dump',
help="just dump parsed contents of the MIDI file")
+ parser.add_option ('', '--pretty', action='store_true', dest='pretty',
+ help="dump parsed contents of the MIDI file in human-readable form (implies --dump)")
parser.usage = parser.usage + " FILE"
options, args = parser.parse_args (args)
if len (args) != 1:
track_info.append ((i, track_name (tracks[i])))
return track_info
+
+class formatter:
+ def __init__ (self, txt = ""):
+ self.text = txt
+ def format_vals (self, val1, val2 = ""):
+ return str (val1) + str(val2)
+ def format (self, val1, val2 = ""):
+ return self.text + self.format_vals (val1, val2)
+class none_formatter (formatter):
+ def format_vals (self, val1, val2 = ""):
+ return ''
+class meta_formatter (formatter):
+ def format_vals (self, val1, val2):
+ return str (val2);
+class tempo_formatter (formatter):
+ def format_vals (self, val1, val2):
+ return str (val2) + " msec/quarter"
+
+class time_signature_formatter (formatter):
+ def format_vals (self, val1, val2 = ""):
+ return str (val2) # TODO
+class key_signature_formatter (formatter):
+ def format_vals (self, val1, val2):
+ return str (val2) # TODO
+class channel_formatter (formatter):
+ def __init__ (self, txt, ch):
+ formatter.__init__ (self, txt)
+ self.channel = ch
+ def format (self, val1, val2 = ""):
+ return self.text + "Channel " + str (self.channel) + ", " + \
+ self.format_vals (val1, val2)
+class control_mode_formatter (formatter):
+ def __init__ (self, txt, ch):
+ formatter.__init__ (self, txt)
+ self.mode = ch
+ def format (self, val1, val2 = ""):
+ return self.text + str (self.mode) + ", " + \
+ self.format_vals (val1, val2)
+class note_formatter (channel_formatter):
+ def pitch (self, val):
+ pitch_names = ['C', 'Cis', 'D', 'Dis', 'E', 'F', 'Fis', 'G', 'Gis', 'A', 'Ais', 'B'];
+ p = val % 12;
+ oct = val / 12 -1;
+ return pitch_names[p] + str(oct) + "(" + str(val) + ")"
+ def velocity (self, val):
+ #01 #10 #20 #30 #40 #50 #60 #70 #7F
+ pass;
+ def format_vals (self, val1, val2):
+ return self.pitch (val1)
+
+
+meta_dict = {0x00: meta_formatter ("Seq.Nr.: "),
+ 0x01: meta_formatter ("Text: "),
+ 0x02: meta_formatter ("Copyright: "),
+ 0x03: meta_formatter ("Track name: "),
+ 0x04: meta_formatter ("Instrument: "),
+ 0x05: meta_formatter ("Lyric: "),
+ 0x06: meta_formatter ("Marker: "),
+ 0x07: meta_formatter ("Cue point: "),
+ 0x2F: none_formatter ("End of Track"),
+ 0x51: tempo_formatter ("Tempo: "),
+ 0x54: meta_formatter ("SMPTE Offs.:"),
+ 0x58: time_signature_formatter ("Time signature: "),
+ 0x59: key_signature_formatter ("Key signature: ")
+}
+
+def dump_event (ev, time, padding):
+ ch = ev[0] & 0x0F;
+ func = ev[0] & 0xF0;
+ f = None
+ if (ev[0] == 0xFF):
+ f = meta_dict.get (ev[1], formatter ())
+ if (func == 0x80):
+ f = note_formatter ("Note off: ", ch)
+ elif (func == 0x90):
+ if (ev[2] == 0):
+ desc = "Note off: "
+ else:
+ desc = "Note on: "
+ f = note_formatter (desc, ch)
+ elif (func == 0xA0):
+ f = note_formatter ("Polyphonic aftertouch: ", ch, "Aftertouch pressure: ")
+ elif (func == 0xB0):
+ f = control_mode_formatter ("Control mode change: ", ch)
+ elif (func == 0xC0):
+ f = channel_formatter ("Program Change: ", ch)
+ elif (func == 0xD0):
+ f = channel_formatter ("Channel aftertouch: ", ch)
+ elif (ev[0] in [0xF0, 0xF7]):
+ f = meta_formatter ("System-exclusive event: ")
+
+ if f:
+ if len (ev) > 2:
+ print padding + f.format (ev[1], ev[2])
+ elif len (ev) > 1:
+ print padding + f.format (ev[1])
+ else:
+ print padding + f.format ()
+ else:
+ print padding + "Unrecognized MIDI event: " + str (ev);
+
+def dump_midi (data, midi_file, options):
+ if not options.pretty:
+ print data
+ return
+ # First, dump general info, #tracks, etc.
+ print "Filename: " + midi_file;
+ i = data[0];
+ m_formats = {0: 'single multi-channel track',
+ 1: "one or more simultaneous tracks",
+ 2: "one or more sequentially independent single-track patterns"}
+ print "MIDI format: " + str (i[0]) + " (" + m_formats.get (i[0], "") + ")";
+ print "Divisions: " + str (i[1]) + " per whole note";
+ print "#Tracks: " + str ( len (data[1]))
+ n = 0;
+ for tr in data[1]:
+ time = 0;
+ n += 1;
+ print
+ print "Track " + str(n) + ":"
+ print " Time 0:"
+ for ev in tr:
+ if ev[0]>time:
+ time = ev[0]
+ print " Time " + str(time) + ": "
+ dump_event (ev[1], time, " ");
+
+
+
def go ():
options, args = process_options (sys.argv[1:])
midi_file = args[0]
midi_data = read_midi (midi_file)
info = track_info (midi_data)
- if options.dump:
- print midi_data
+ if (options.dump or options.pretty):
+ dump_midi (midi_data, midi_file, options);
elif options.regexp:
import re
regexp = re.compile (options.regexp)
action='store',
dest='process_cmd', default='')
+ p.add_option ('--redirect-lilypond-output',
+ help = _ ("Redirect the lilypond output"),
+ action='store_true',
+ dest='redirect_output', default=False)
+
p.add_option ('-s', '--safe', help=_ ("Compile snippets in safe mode"),
action="store_true",
default=False,
return snippets
-def system_in_directory (cmd, directory):
+def system_in_directory (cmd, directory, logfile):
"""Execute a command in a different directory.
Because of win32 compatibility, we can't simply use subprocess.
current = os.getcwd()
os.chdir (directory)
- ly.system(cmd, be_verbose=global_options.verbose,
+ ly.system(cmd,
+ be_verbose=global_options.verbose,
+ redirect_output=global_options.redirect_output,
+ log_file=logfile,
progress_p=1)
os.chdir (current)
+ list (set ([snip.basename() + '.ly' for snip in snippets])))
name = os.path.join (lily_output_dir,
'snippet-names-%d.ly' % checksum)
+ logfile = name.replace('.ly', '')
file (name, 'wb').write (contents)
system_in_directory (' '.join ([cmd, ly.mkarg (name)]),
- lily_output_dir)
-
+ lily_output_dir,
+ logfile)
def snippet_list_checksum (snippets):
return hash (' '.join([l.basename() for l in snippets]))
(define (run-browser uri)
(system
(if (getenv "BROWSER")
- (format "~a ~a" (getenv "BROWSER") uri)
+ (format #f "~a ~a" (getenv "BROWSER") uri)
(format #f "firefox -remote 'OpenURL(~a,new-tab)'" uri))))
import string
import codecs
import zipfile
+import tempfile
import StringIO
"""
(let* ((ev (event-cause grob))
(den (if denominator denominator (ly:event-property ev 'denominator)))
(num (if numerator numerator (ly:event-property ev 'numerator))))
- (format "~a:~a" den num)))
+ (format #f "~a:~a" den num)))
""",
}
# TODO: Handle the level-display setting for displaying brackets/parentheses
elif n.get_maybe_exist_typed_child (musicxml.Unpitched):
- # Unpitched elements have display-step and can also have
- # display-octave.
- unpitched = n.get_maybe_exist_typed_child (musicxml.Unpitched)
- event = musicexp.NoteEvent ()
- event.pitch = musicxml_unpitched_to_lily (unpitched)
+ # Unpitched elements have display-step and can also have
+ # display-octave.
+ unpitched = n.get_maybe_exist_typed_child (musicxml.Unpitched)
+ event = musicexp.NoteEvent ()
+ event.pitch = musicxml_unpitched_to_lily (unpitched)
elif n.get_maybe_exist_typed_child (musicxml.Rest):
# rests can have display-octave and display-step, which are
p = None
step = mxl_unpitched.get_step ()
if step:
- p = musicexp.Pitch ()
- p.step = musicxml_step_to_lily (step)
+ p = musicexp.Pitch ()
+ p.step = musicxml_step_to_lily (step)
octave = mxl_unpitched.get_octave ()
if octave and p:
- p.octave = octave - 4
+ p.octave = octave - 4
return p
def musicxml_restdisplay_to_lily (mxl_rest):
if compressed:
if filename == "-":
progress (_ ("Input is compressed, extracting raw MusicXML data from stdin") )
- z = zipfile.ZipFile (sys.stdin)
+ # unfortunately, zipfile.ZipFile can't read directly from
+ # stdin, so copy everything from stdin to a temp file and read
+ # that. TemporaryFile() will remove the file when it is closed.
+ tmp = tempfile.TemporaryFile()
+ sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0) # Make sys.stdin binary
+ bytes_read = sys.stdin.read (8192)
+ while bytes_read:
+ for b in bytes_read:
+ tmp.write(b)
+ bytes_read = sys.stdin.read (8192)
+ z = zipfile.ZipFile (tmp, "r")
else:
progress (_ ("Input file %s is compressed, extracting raw MusicXML data") % filename)
z = zipfile.ZipFile (filename, "r")
all: default
$(LOOP)
+bin:
+ $(MAKE) PACKAGE=$(PACKAGE) package=$(package) -C lily
+
man:
$(LOOP)
@echo
@echo "Other generic targets:"
@echo " default same as the empty target"
+ @echo " bin check the lily directory and rebuild lilypond.exe if needed"
@echo " exe update all executables"
@echo " help this help"
@echo " lib update all libraries"
# ugh . mf2pt1 is extremely broken, it pollutes CWD iso. creating a
# temp dir.
+#
+# the soft link for mf2pt1.mp is for recent mpost versions
+# which no longer dump a .mem file
$(outdir)/%.pfb: %.mf $(outdir)/mf2pt1.mem
TMP=`mktemp -d $(outdir)/pfbtemp.XXXXXXXXX` \
&& ( cd $$TMP \
&& ln -s ../mf2pt1.mem . \
+ && ln -s ../../mf2pt1.mp . \
&& MFINPUTS=$(abs-src-dir):..:: $(buildscript-dir)/mf2pt1 $(MF2PT1_OPTIONS) $< $(METAFONT_QUIET)) \
&& mv $$TMP/*pfb $(outdir); \
rm -rf $$TMP
$(outdir)/%.pdf: $(outdir)/%.texi $(outdir)/version.itexi $(outdir)/%.pdf.omf $(outdir)/weblinks.itexi
ifeq ($(WEB_VERSION),yes)
- cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) -D web_version -I $(abs-src-dir) --batch $(TEXINFO_PAPERSIZE_OPTION) $(<F)
+ cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) -D web_version -I $(abs-src-dir) --quiet $(TEXINFO_PAPERSIZE_OPTION) $(<F)
else
- cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) -I $(abs-src-dir) --batch $(TEXINFO_PAPERSIZE_OPTION) $(<F)
+ cd $(outdir); texi2pdf $(TEXI2PDF_FLAGS) -I $(abs-src-dir) --quiet $(TEXINFO_PAPERSIZE_OPTION) $(<F)
endif
$(outdir)/%.txt: $(outdir)/%.texi $(outdir)/version.itexi $(outdir)/weblinks.itexi
--- /dev/null
+% Copyright 1999, 2007, 2008 Free Software Foundation, Inc.
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 3 of the license, or (at
+% your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+\txisetlanguage{hungarian}{2}{2}
+
+\plainfrenchspacing
+
+% Don't use checking because if it is our turn they have
+% been defined.
+\gdef\putwordAppendix{függelék}
+\gdef\putwordChapter{fejezet}
+\gdef\putwordfile{fájl}
+\gdef\putwordin{in}
+\gdef\putwordInfo{Info}
+\gdef\putwordMethodon{Metódus itt:}
+\gdef\putwordon{ezen:}
+\gdef\putwordof{ebben:}
+\gdef\putwordpage{oldal}
+\gdef\putwordsection{rész}
+\gdef\putwordSection{rész}
+\gdef\putwordsee{lásd}
+\gdef\putwordSee{Lásd}
+\gdef\putwordShortTOC{Áttekintés}
+\gdef\putwordTOC{Tartalomjegyzék}
+%%
+\gdef\putwordNoTitle{Nincs cím}
+%%
+%% New defintion for the output of months.
+\gdef\putwordMJan{Január}
+\gdef\putwordMFeb{Február}
+\gdef\putwordMMar{Március}
+\gdef\putwordMApr{Április}
+\gdef\putwordMMai{Május}
+\gdef\putwordMJun{Június}
+\gdef\putwordMJul{Július}
+\gdef\putwordMAug{Augusztus}
+\gdef\putwordMSep{Szeptember}
+\gdef\putwordMOct{Október}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{December}
+\gdef\putwordIndexNonexistent{(Nemlétező index)}
+\gdef\putwordIndexIsEmpty{(Üres index)}
+%%
+%% \defmac
+\gdef\putwordDefmac{Makró}
+%% \defspec
+\gdef\putwordDefspec{Speciális forma}
+%% \defivar
+\gdef\putwordDefivar{Példaváltozó}
+%% \defvar leave unchanged because no difference in
+%% writing but in phonectics.
+\gdef\putwordDefvar{Változó}
+%% \defopt
+\gdef\putwordDefopt{Felhasználói opció}
+%% \deffun
+\gdef\putwordDeffunc{Függvény}
+
+%%%
+%%% Date stamp
+%%% Produces y-m-d style of output.
+%%% 4-05-07 == 2007. m\'ajus 4.
+%%%
+\gdef\Today{\number\year. \ifcase\month\or % Mai d†tum
+ janu\'ar\or febru\'ar\or m\'arcius\or
+ \'aprilis\or m\'ajus\or j\'unius\or
+ j\'ulius\or augusztus\or szeptember\or
+ okt\'ober\or november\or december\fi
+ \space\ifcase\day\or
+ 1.\or 2.\or 3.\or 4.\or 5.\or
+ 6.\or 7.\or 8.\or 9.\or 10.\or
+ 11.\or 12.\or 13.\or 14.\or 15.\or
+ 16.\or 17.\or 18.\or 19.\or 20.\or
+ 21.\or 22.\or 23.\or 24.\or 25.\or
+ 26.\or 27.\or 28.\or 29.\or 30.\or
+ 31.\fi}
\ No newline at end of file